- Komponen Diperlukan
- Nova PM Sensor SDS011 untuk Mengukur PM2.5 dan PM10
- Asas Modul Paparan OLED 0.96 '
- Menyiapkan Sensor MQ-7 untuk Mengukur Karbon Monoksida (CO)
- Pengiraan Indeks Kualiti Udara
- Rajah Litar
- Membina Litar Sistem Pemantauan Kualiti Udara di Perf Board
- Persediaan Adafruit IO
- Penjelasan Kod untuk
- Sarung Bercetak 3D untuk Sistem Pemantauan AQI
- Menguji Sistem Pemantauan AQI
Ketika musim sejuk menjelang, udara yang menggantung di atas kita menebal dengan asap dan pelepasan gas dari ladang yang terbakar, kilang industri, dan lalu lintas kenderaan, menyekat sinar matahari dan sukar bernafas. Pakar mengatakan bahawa tahap tinggi pencemaran udara dan pandemik COVID-19 boleh menjadi campuran berbahaya yang boleh membawa akibat yang serius. Keperluan untuk pemantauan kualiti udara pada masa nyata sangat mencolok.
Jadi dalam projek ini, kita akan membangun Sistem Pemantauan Kualiti Udara ESP32 menggunakan sensor Nova PM SDS011, sensor MQ-7, dan sensor DHT11. Kami juga akan menggunakan modul Paparan OLED untuk menampilkan Nilai Kualiti Udara. The Indeks Kualiti Air (AQI) di India adalah berdasarkan lapan pencemar, PM10, PM2.5, SO2 dan NO2, CO, Ozone, NH3, dan Pb. Walau bagaimanapun, tidak perlu mengukur semua bahan pencemar. Oleh itu, kita akan mengukur kepekatan PM2.5, PM10, dan Karbon Monoksida untuk mengira Indeks Kualiti Udara. Nilai AQI akan diterbitkan di Adafruit IO supaya kami dapat memantau dari mana saja. Sebelum ini kami juga telah mengukur kepekatan gas LPG, Asap, dan Ammonia menggunakan Arduino.
Komponen Diperlukan
- ESP32
- Sensor PM Nova SDS011
- Modul Paparan OLED 0.96 'SPI
- Sensor DHT11
- Sensor MQ-7
- Wayar Pelompat
Nova PM Sensor SDS011 untuk Mengukur PM2.5 dan PM10
Sensor SDS011 adalah Sensor Kualiti Udara terbaru yang dikembangkan oleh Nova Fitness. Ia berfungsi berdasarkan prinsip penyerakan laser dan dapat memperoleh kepekatan zarah antara 0.3 hingga 10μm di udara. Sensor ini terdiri daripada kipas kecil, injap masuk udara, dioda Laser, dan fotodioda. Udara masuk melalui saluran masuk udara di mana sumber cahaya (Laser) menerangi zarah-zarah dan cahaya yang tersebar diubah menjadi isyarat oleh fotodetektor. Isyarat-isyarat ini kemudiannya diperkuat dan diproses untuk mendapatkan kepekatan zarah PM2.5 dan PM10. Kami sebelum ini menggunakan Nova PM Sensor dengan Arduino untuk mengira kepekatan PM10 & PM2.5.
Spesifikasi Sensor SDS011:
- Keluaran: PM2.5, PM10
- Julat Pengukuran: 0.0-999.9μg / m3
- Voltan Input: 4.7V hingga 5.3V
- Arus Maksimum: 100mA
- Tidur Semasa: 2mA
- Masa Respons: 1 saat
- Kekerapan Output Data Bersiri: 1 masa / saat
- Resolusi Diameter Zarah: ≤0.3μm
- Ralat relatif: 10%
- Julat Suhu: -20 ~ 50 ° C
Asas Modul Paparan OLED 0.96 '
OLED (Organic Light Emitting Diode) adalah sejenis Light Emitting Diode yang dibuat menggunakan sebatian organik yang menggembirakan apabila arus elektrik dibiarkan mengalir melaluinya. Sebatian organik ini mempunyai cahaya tersendiri sehingga tidak memerlukan litar lampu latar seperti LCD biasa. Oleh sebab itu, teknologi paparan OLED cekap tenaga dan banyak digunakan di Televisyen dan produk paparan lain.
Pelbagai jenis OLED tersedia di pasar berdasarkan warna paparan, jumlah pin, ukuran, dan IC pengawal. Dalam tutorial ini, kami akan menggunakan modul OLED 7-pin SSD1306 0.96 "Monochrome Blue yang lebarnya 128 piksel dan panjang 64 piksel. OLED 7-pin ini menyokong protokol SPI dan IC pengawal SSD1306 membantu OLED memaparkan watak yang diterima. Ketahui lebih lanjut mengenai OLED dan hubungannya dengan pengawal mikro yang berbeza dengan mengikuti pautan tersebut.
Menyiapkan Sensor MQ-7 untuk Mengukur Karbon Monoksida (CO)
Modul Sensor Gas MQ-7 CO Carbon Monoxide mengesan kepekatan CO di udara. Sensor dapat mengukur kepekatan 10 hingga 10,000 ppm. Sensor MQ-7 boleh dibeli sebagai modul atau hanya sebagai sensor sahaja. Sebelum ini kami telah menggunakan pelbagai jenis sensor Gas untuk mengesan dan mengukur pelbagai gas, anda juga boleh memeriksanya jika anda berminat. Dalam projek ini, kami menggunakan modul sensor MQ-7 untuk mengukur kepekatan Karbon Monoksida di PPM. Gambarajah litar untuk papan MQ-7 diberikan di bawah:
Perintang beban RL memainkan peranan yang sangat penting dalam membuat sensor berfungsi. Perintang ini mengubah nilai rintangannya mengikut kepekatan gas. Papan sensor MQ-7 dilengkapi dengan rintangan Beban 1KΩ yang tidak berguna dan mempengaruhi bacaan sensor. Oleh itu, untuk mengukur nilai kepekatan CO yang sesuai, anda harus mengganti perintang 1KΩ dengan perintang 10KΩ.
Pengiraan Indeks Kualiti Udara
AQI di India dihitung berdasarkan kepekatan rata-rata bahan pencemar tertentu yang diukur dalam selang waktu standard (24 jam untuk kebanyakan bahan pencemar, 8 jam untuk karbon monoksida dan ozon). Sebagai contoh, AQI untuk PM2.5 dan PM10 berdasarkan kepekatan purata 24 jam dan AQI untuk Karbon Monoksida berdasarkan kepekatan purata 8 jam). Pengiraan AQI merangkumi lapan pencemar iaitu PM10, PM2.5, Nitrogen Dioxide (NO 2), Sulphur Dioxide (SO 2), Carbon Monoxide (CO), ozon permukaan tanah (O 3), Ammonia (NH 3), dan Plumbum (Pb). Walau bagaimanapun, semua bahan pencemar tidak diukur di setiap lokasi.
Berdasarkan kepekatan pencemar sekitar 24 jam dari pencemar, sub-indeks dikira, yang merupakan fungsi kepekatan linear (contohnya sub-indeks untuk PM2.5 akan menjadi 51 pada kepekatan 31 µg / m3, 100 pada kepekatan 60 µg / m3, dan 75 pada kepekatan 45 µg / m3). Sub-indeks terburuk (atau maksimum semua parameter) menentukan AQI keseluruhan.
Rajah Litar
Gambarajah litar untuk Sistem Pemantauan Kualiti Udara Berasaskan IoT sangat mudah dan diberikan di bawah:
Sensor SDS011, DHT11, dan sensor MQ-7 dikuasakan dengan + 5V sementara modul Paparan OLED dikuasakan dengan 3.3V. Pin pemancar dan Penerima SDS011 disambungkan ke GPIO16 & 17 dari ESP32. Pin Analog Out sensor MQ-7 disambungkan ke GPIO 25 dan pin data sensor DHT11 disambungkan ke sensor GPIO27. Oleh kerana modul OLED Display menggunakan komunikasi SPI, kami telah mewujudkan komunikasi SPI antara modul OLED dan ESP32. Sambungan ditunjukkan dalam jadual di bawah:
S.No |
Pin Modul OLED |
Pin ESP32 |
1 |
GND |
Tanah |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
Pin SDS011 |
Pin ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
Pin DHT |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Data |
27 |
S.No |
Pin MQ-7 |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Membina Litar Sistem Pemantauan Kualiti Udara di Perf Board
Seperti yang anda lihat dari gambar utama, idenya adalah menggunakan litar ini di dalam 3D Printed Casing. Jadi litar lengkap yang ditunjukkan di atas disolder ke papan perf. Pastikan menggunakan wayar untuk meninggalkan jarak yang cukup untuk memasang OLED dan Sensor. Papan perf saya disolder ke OLED dan modul sensor ditunjukkan di bawah.
Persediaan Adafruit IO
Adafruit IO adalah platform data terbuka yang membolehkan anda mengumpulkan, memvisualisasikan, dan menganalisis data langsung di awan. Dengan Adafruit IO, anda boleh memuat naik, memaparkan, dan memantau data anda melalui internet, dan menjadikan IoT projek anda diaktifkan. Anda boleh mengawal motor, membaca data sensor, dan membuat aplikasi IoT yang hebat melalui internet menggunakan Adafruit IO.
Untuk menggunakan Adafruit IO, buat dahulu akaun di Adafruit IO. Untuk melakukan ini, pergi ke laman web Adafruit IO dan klik 'Bermula secara Percuma' di kanan atas skrin.
Setelah menyelesaikan proses pembuatan akaun, log masuk ke akaun dan klik pada 'Lihat Kunci AIO' di sudut kanan atas untuk mendapatkan nama pengguna akaun dan kunci AIO.
Apabila anda mengklik 'AIO Key', tetingkap akan muncul dengan Adafruit IO AIO Key dan nama pengguna. Salin kunci dan nama pengguna ini, ia akan digunakan dalam kod.
Sekarang, setelah mendapatkan kunci AIO, buat suapan untuk menyimpan data sensor DHT. Untuk membuat suapan, klik pada 'Feed'. Kemudian klik pada 'Tindakan', dan kemudian pilih 'Buat Suapan Baru' dari pilihan yang ada.
Selepas ini, tetingkap baru akan dibuka di mana anda perlu memasukkan Nama dan Huraian suapan. Menulis keterangan adalah pilihan.
Klik pada 'Buat' selepas ini; anda akan diarahkan ke suapan yang baru dibuat.
Untuk projek ini, kami membuat enam umpan untuk nilai PM10, PM2.5, CO, Suhu, Kelembapan, dan AQI. Ikuti prosedur yang sama seperti di atas untuk membuat sisa suapan.
Setelah membuat suapan, sekarang kami akan membuat ciri papan pemuka Adafruit IO untuk memvisualisasikan data sensor pada satu halaman. Untuk itu, pertama, buat papan pemuka dan kemudian tambahkan semua suapan ini di papan pemuka itu.
Untuk membuat papan pemuka, klik pada pilihan Papan Pemuka dan kemudian klik pada 'Tindakan', dan setelah ini, klik pada 'Buat Papan Pemuka Baru.'
Di tetingkap seterusnya, masukkan nama papan pemuka dan klik 'Buat.'
Semasa papan pemuka dibuat, sekarang kita akan menggunakan blok Adafruit IO seperti Gauge dan Slider untuk memvisualisasikan data. Untuk menambah blok, klik pada '+' di sudut kanan atas.
Kemudian Pilih blok 'Gauge'.
Di tetingkap seterusnya, pilih data suapan yang ingin anda gambarkan.
Pada langkah terakhir, ubah tetapan blok untuk menyesuaikannya.
Sekarang ikuti prosedur yang sama seperti di atas untuk menambahkan blok visualisasi untuk sisa suapan. Papan Pemuka Adafruit IO saya kelihatan seperti ini:
Penjelasan Kod untuk
Kod lengkap untuk projek ini diberikan di akhir dokumen. Di sini kami menerangkan beberapa bahagian penting kod.
Kod ini menggunakan SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, dan DHT.h perpustakaan. Perpustakaan SDS011, Adafruit_GFX, dan Adafruit_SSD1306 boleh dimuat turun dari Pengurus Perpustakaan di Arduino IDE dan dipasang dari sana. Untuk itu, buka Arduino IDE dan pergi ke Sketch <Include Library <Manage Libraries . Sekarang cari SDS011 dan pasang perpustakaan Sensor SDS oleh R. Zschiegner.
Begitu juga, pasang perpustakaan Adafruit GFX dan Adafruit SSD1306 oleh Adafruit. Adafruit_MQTT.h dan DHT11.h boleh dimuat turun dari pautan yang diberikan.
Setelah memasang perpustakaan ke Arduino IDE, mulakan kod dengan memasukkan fail perpustakaan yang diperlukan.
#sertakan
Pada baris seterusnya, tentukan lebar dan tinggi paparan OLED. Dalam projek ini, saya telah menggunakan paparan OLED 128 × 64 SPI. Anda boleh mengubah pemboleh ubah SCREEN_WIDTH , dan SCREEN_HEIGHT mengikut paparan anda.
#tentukan SCREEN_WIDTH 128 #tentukan SCREEN_HEIGHT 64
Kemudian tentukan pin komunikasi SPI di mana Paparan OLED disambungkan.
#tentukan OLED_MOSI 23 #tentukan OLED_CLK 18 #tentukan OLED_DC 4 #tentukan OLED_CS 5 #tentukan OLED_RESET 2
Kemudian, buat contoh untuk paparan Adafruit dengan lebar dan tinggi dan protokol komunikasi SPI yang ditentukan sebelumnya.
Paparan Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Kemudian sertakan kelayakan WiFi dan Adafruit IO yang anda salin dari pelayan Adafruit IO. Ini termasuk pelayan MQTT, No Port, Nama Pengguna, dan Kunci AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Kemudian sediakan suapan Adafruit IO untuk menyimpan data sensor. Dalam kes saya, saya telah menentukan enam suapan untuk menyimpan data sensor yang berbeza, iaitu: AirQuality, Temperature, Humidity, PM10, PM25, dan CO.
Adafruit_MQTT_Client mqtt (& klien, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); Adafruit_MQTT_Publish Kelembapan = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Kelembapan"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Sekarang di dalam fungsi setup () , mulakan Monitor Serial pada kadar baud 9600 untuk tujuan penyahpepijatan. Inisialisasi juga paparan OLED, sensor DHT, dan sensor SDS011 dengan fungsi begin () .
batal persediaan () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Yang untuk gelung di dalam setup fungsi digunakan untuk mengumpul nilai-nilai sehingga jumlah yang ditetapkan dan kemudian menetapkan kaunter untuk sifar.
untuk (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {bacaanPM10 = 0; }
Membaca Nilai Sensor:
Sekarang di dalam fungsi gelung, gunakan kaedah milis () untuk membaca nilai sensor dalam setiap satu jam. Setiap sensor gas mengeluarkan nilai analog dari 0 hingga 4095. Untuk menukar nilai ini menjadi voltan, gunakan persamaan berikut: RvRo = MQ7Raw * (3.3 / 4095); di mana MQ7Raw adalah nilai analog dari pin analog sensor. Juga, baca bacaan PM2.5 dan PM10 dari sensor SDS011.
if ((unsigned long) (currentMillis - sebelumnyaMillis)> = selang) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); ralat = my_sds.read (& p25, & p10); jika (! ralat) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + Rentetan (p10)); }}
Menukar Nilai:
Nilai PM2.5 dan PM10 sudah dalam µg / m 3 tetapi kita perlu menukar nilai Karbon Monoksida dari PPM menjadi mg / m 3. Formula penukaran diberikan di bawah:
Kepekatan (mg / m 3) = Kepekatan (PPM) × (Jisim Molekul (g / mol) / Isipadu Molar (L))
Di mana: Jisim Molekul CO ialah 28.06 g / mol dan Isipadu Molar ialah 24.45L pada 25 0 C
Kepekatan INmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (KepekatanINmgm3);
Mengira Purata 24 Jam:
Kemudian pada baris seterusnya, hitung purata 24 jam untuk bacaan PM10, PM2.5, dan rata-rata 8 jam untuk bacaan Karbon Monoksida. Pada baris pertama kod, ambil jumlah semasa dan tolak elemen pertama dalam array, sekarang simpan ini sebagai jumlah baru. Pada mulanya, ia akan menjadi Zero. Kemudian dapatkan nilai sensor dan tambahkan bacaan semasa ke jumlah dan tingkatkan indeks nombor. Sekiranya nilai indeks sama atau lebih besar daripada numReadings, maka tetapkan indeks kembali ke sifar.
totalPM10 = totalPM10 - bacaanPM10; bacaanPM10 = p10; totalPM10 = totalPM10 + bacaanPM10; readIndexPM10 = readIndexPM10 + 1; jika (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Kemudian, akhirnya, terbitkan nilai-nilai ini di Adafruit IO.
jika (! Temperature.publish (suhu)) {kelewatan (30000); } jika (! Humidity.publish (kelembapan)) {kelewatan (30000); ………………………………………………………. ……………………………………………………….
Sarung Bercetak 3D untuk Sistem Pemantauan AQI
Seterusnya, saya mengukur dimensi persediaan menggunakan vernier saya dan juga mengukur dimensi sensor dan OLED untuk merancang selongsong. Reka bentuk saya kelihatan seperti ini di bawah ini, setelah ia selesai.
Setelah saya berpuas hati dengan reka bentuknya, saya mengeksportnya sebagai fail STL, memotongnya berdasarkan tetapan pencetak, dan akhirnya mencetaknya. Sekali lagi fail STL juga tersedia untuk dimuat turun dari Thingiverse dan anda boleh mencetak casing anda menggunakannya.
Setelah cetakan selesai, saya meneruskan pemasangan projek yang dipasang di kandang tetap untuk memasangnya di kemudahan. Dengan sambungan yang lengkap dibuat, saya memasangkan litar ke dalam selongsong saya dan semuanya sesuai dengan yang anda dapat lihat di sini.
Menguji Sistem Pemantauan AQI
Setelah perkakasan dan kod siap, sudah tiba masanya untuk menguji peranti. Kami menggunakan penyesuai 12V 1A luaran untuk menghidupkan peranti. Seperti yang anda lihat, peranti akan memaparkan Konsentrasi PM10, PM2.5, dan Karbon Monoksida pada Paparan OLED. Kepekatan PM2.5 dan PM10 berada dalam µg / m 3 sementara kepekatan Karbon Monoksida adalah dalam mg / m 3.
Bacaan ini juga akan diterbitkan di Adafruit IO Dashboard. Maksimum semua parameter (PM10, PM2.5 & CO) adalah AQI.
Nilai AQI 30 hari terakhir akan ditunjukkan sebagai grafik.
Ini adalah bagaimana anda boleh menggunakan sensor SDS011 dan MQ-7 untuk mengira Indeks Kualiti Udara. Penyelesaian projek yang lengkap juga terdapat dalam video yang dipautkan di bawah. Mudah-mudahan anda menikmati projek ini dan menjadikannya menarik untuk membina sendiri. Sekiranya anda mempunyai pertanyaan, sila tinggalkan di bahagian komen di bawah.