- Komponen Diperlukan
- Nova PM Sensor SDS011 untuk Mengukur PM2.5 dan PM10
- Dasar-dasar Modul Layar OLED 0,96 '
- Mempersiapkan Sensor MQ-7 untuk Mengukur Karbon Monoksida (CO)
- Perhitungan Indeks Kualitas Udara
- Diagram Sirkuit
- Membangun Sirkuit Sistem Pemantauan Kualitas Udara di Perf Board
- Penyiapan Adafruit IO
- Penjelasan Kode untuk
- Casing Cetak 3D untuk Sistem Pemantauan AQI
- Menguji Sistem Pemantauan AQI
Saat musim dingin tiba, udara yang menggantung di atas kita mengental dengan asap dan emisi gas dari ladang yang terbakar, pabrik industri, dan lalu lintas kendaraan, menghalangi sinar matahari dan membuat sulit bernapas. Para ahli mengatakan bahwa polusi udara tingkat tinggi dan pandemi COVID-19 dapat menjadi campuran berbahaya yang dapat menimbulkan konsekuensi serius. Kebutuhan untuk memantau Kualitas Udara secara real-time sangat mencolok.
Jadi dalam proyek ini, kami akan membangun Sistem Pemantauan Kualitas Udara ESP32 menggunakan sensor Nova PM SDS011, sensor MQ-7, dan sensor DHT11. Kami juga akan menggunakan modul Layar OLED untuk menampilkan Nilai Kualitas Udara. The Air Kualitas Indeks (AQI) di India didasarkan pada delapan polutan, PM10, PM2.5, SO2 dan NO2, CO, Ozon, NH3, dan Pb. Namun, semua polutan tidak perlu diukur. Jadi kita akan mengukur konsentrasi PM2.5, PM10, dan Karbon Monoksida untuk menghitung Indeks Kualitas Udara. Nilai AQI akan dipublikasikan di Adafruit IO sehingga bisa kami pantau dari mana saja. Sebelumnya kami juga telah mengukur konsentrasi gas LPG, Asap, dan Amoniak menggunakan Arduino.
Komponen Diperlukan
- ESP32
- Nova PM Sensor SDS011
- Modul Layar OLED SPI 0,96 '
- Sensor DHT11
- Sensor MQ-7
- Kabel Jumper
Nova PM Sensor SDS011 untuk Mengukur PM2.5 dan PM10
Sensor SDS011 adalah Sensor Kualitas Udara terbaru yang dikembangkan oleh Nova Fitness. Ia bekerja berdasarkan prinsip hamburan laser dan bisa mendapatkan konsentrasi partikel antara 0,3 hingga 10μm di udara. Sensor ini terdiri dari kipas kecil, katup saluran masuk udara, dioda laser, dan fotodioda. Udara masuk melalui saluran masuk udara di mana sumber cahaya (Laser) menerangi partikel dan cahaya yang tersebar diubah menjadi sinyal oleh fotodetektor. Sinyal tersebut kemudian diperkuat dan diproses untuk mendapatkan konsentrasi partikel PM2.5 dan PM10. Kami sebelumnya menggunakan Nova PM Sensor dengan Arduino untuk menghitung konsentrasi PM10 & PM2.5.
Spesifikasi Sensor SDS011:
- Keluaran: PM2.5, PM10
- Rentang Pengukuran: 0,0-999,9μg / m3
- Tegangan Input: 4.7V hingga 5.3V
- Arus Maksimum: 100mA
- Tidur Saat Ini: 2mA
- Waktu Respon: 1 detik
- Frekuensi Output Data Serial: 1 kali / detik
- Resolusi Diameter Partikel: ≤0.3μm
- Kesalahan Relatif: 10%
- Rentang Suhu: -20 ~ 50 ° C
Dasar-dasar Modul Layar OLED 0,96 '
OLED (Organic Light Emitting Diode) adalah sejenis Light Emitting Diode yang dibuat menggunakan senyawa organik yang menggairahkan ketika arus listrik dibiarkan mengalir melaluinya. Senyawa organik ini memiliki cahayanya sendiri sehingga tidak memerlukan sirkuit lampu latar seperti LCD biasa. Karena alasan ini, teknologi layar OLED hemat daya dan banyak digunakan di Televisi dan produk layar lainnya.
Berbagai jenis OLED tersedia di pasaran berdasarkan warna layar, jumlah pin, ukuran, dan IC pengontrol. Dalam tutorial ini, kita akan menggunakan modul OLED Monochrome Blue 7-pin SSD1306 0,96 ”dengan lebar 128 piksel dan panjang 64 piksel. OLED 7-pin ini mendukung protokol SPI dan pengontrol IC SSD1306 membantu OLED untuk menampilkan karakter yang diterima. Pelajari lebih lanjut tentang OLED dan antarmuka dengan mikrokontroler yang berbeda dengan mengikuti tautan.
Mempersiapkan Sensor MQ-7 untuk Mengukur Karbon Monoksida (CO)
Modul Sensor Gas Karbon Monoksida MQ-7 CO mendeteksi konsentrasi CO di udara. Sensor dapat mengukur konsentrasi 10 hingga 10.000 ppm. Sensor MQ-7 dapat dibeli sebagai modul atau hanya sebagai sensor saja. Sebelumnya kami telah menggunakan berbagai jenis sensor Gas untuk mendeteksi dan mengukur berbagai gas, Anda juga dapat memeriksanya jika tertarik. Dalam proyek ini, kami menggunakan modul sensor MQ-7 untuk mengukur konsentrasi Karbon Monoksida dalam PPM. Diagram sirkuit untuk papan MQ-7 diberikan di bawah ini:
Resistor beban RL memegang peranan yang sangat penting dalam membuat sensor bekerja. Resistor ini mengubah nilai resistansinya sesuai dengan konsentrasi gas. Papan sensor MQ-7 dilengkapi dengan tahanan beban 1KΩ yang tidak berguna dan mempengaruhi pembacaan sensor. Jadi untuk mengukur nilai konsentrasi CO yang sesuai, Anda harus mengganti resistor 1KΩ dengan resistor 10KΩ.
Perhitungan Indeks Kualitas Udara
AQI di India dihitung berdasarkan konsentrasi rata-rata polutan tertentu yang diukur selama interval waktu standar (24 jam untuk sebagian besar polutan, 8 jam untuk karbon monoksida dan ozon). Misalnya, AQI untuk PM2.5 dan PM10 didasarkan pada konsentrasi rata-rata 24 jam dan AQI untuk Karbon Monoksida didasarkan pada konsentrasi rata-rata 8 jam). Perhitungan AQI meliputi delapan polutan yaitu PM10, PM2.5, Nitrogen Dioksida (NO 2), Sulfur Dioksida (SO 2), Karbon Monoksida (CO), ozon permukaan tanah (O 3), Amonia (NH 3), dan Lead (Pb). Namun, semua polutan tidak diukur di setiap lokasi.
Berdasarkan konsentrasi ambien 24 jam yang diukur dari suatu polutan, dihitung sub-indeks, yang merupakan fungsi linier dari konsentrasi (misalnya, sub-indeks untuk PM2.5 akan menjadi 51 pada konsentrasi 31 µg / m3, 100 pada konsentrasi 60 µg / m3, dan 75 pada konsentrasi 45 µg / m3). Sub-indeks terburuk (atau maksimum dari semua parameter) menentukan AQI keseluruhan.
Diagram Sirkuit
Diagram sirkuit untuk Sistem Pemantauan Kualitas Udara Berbasis IoT sangat sederhana dan diberikan di bawah ini:
Sensor SDS011, DHT11, dan MQ-7 didukung dengan + 5V sedangkan modul OLED Display didukung dengan 3.3V. Pin pemancar dan Penerima SDS011 terhubung ke GPIO16 & 17 dari ESP32. Pin Analog Out dari sensor MQ-7 terhubung ke GPIO 25 dan pin data dari sensor DHT11 terhubung ke sensor GPIO27. Karena modul Layar OLED menggunakan komunikasi SPI, kami telah membuat komunikasi SPI antara modul OLED dan ESP32. Hubungannya ditunjukkan pada tabel di bawah ini:
S.No |
Pin Modul OLED |
ESP32 Pin |
1 |
GND |
Tanah |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
SDS011 Pin |
ESP32 Pin |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
Pin DHT |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Data |
27 |
S.No |
MQ-7 Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Membangun Sirkuit Sistem Pemantauan Kualitas Udara di Perf Board
Seperti yang dapat Anda lihat dari gambar utama, idenya adalah menggunakan sirkuit ini di dalam Casing Cetak 3D. Jadi rangkaian lengkap yang ditunjukkan di atas disolder ke papan kinerja. Pastikan untuk menggunakan kabel untuk memberikan jarak yang cukup untuk memasang OLED dan Sensor. Papan kinerja saya disolder ke OLED dan modul sensornya ditampilkan di bawah.
Penyiapan Adafruit IO
Adafruit IO adalah platform data terbuka yang memungkinkan Anda untuk mengumpulkan, memvisualisasikan, dan menganalisis data langsung di cloud. Menggunakan Adafruit IO, Anda dapat mengunggah, menampilkan, dan memantau data Anda melalui internet, dan mengaktifkan IoT proyek Anda. Anda dapat mengontrol motor, membaca data sensor, dan membuat aplikasi IoT keren melalui internet menggunakan Adafruit IO.
Untuk menggunakan Adafruit IO, pertama-tama buat akun di Adafruit IO. Untuk melakukan ini, buka situs web Adafruit IO dan klik 'Mulai Gratis' di kanan atas layar.
Setelah menyelesaikan proses pembuatan akun, masuk ke akun dan klik 'Lihat Kunci AIO' di sudut kanan atas untuk mendapatkan nama pengguna akun dan kunci AIO.
Ketika Anda mengklik 'AIO Key,' sebuah jendela akan muncul dengan Adafruit IO AIO Key dan nama pengguna. Salin kunci dan nama pengguna ini, itu akan digunakan dalam kode.
Sekarang, setelah mendapatkan kunci AIO, buat feed untuk menyimpan data sensor DHT. Untuk membuat feed, klik 'Feed.' Kemudian klik 'Tindakan', lalu pilih 'Buat Umpan Baru' dari opsi yang tersedia.
Setelah ini, jendela baru akan terbuka di mana Anda perlu memasukkan Nama dan Deskripsi feed. Menulis deskripsi bersifat opsional.
Klik 'Buat', setelah ini; Anda akan diarahkan ke feed yang baru dibuat.
Untuk proyek ini, kami membuat total enam umpan untuk nilai PM10, PM2.5, CO, Suhu, Kelembaban, dan AQI. Ikuti prosedur yang sama seperti di atas untuk membuat sisa feed.
Setelah membuat feed, sekarang kita akan membuat fitur dashboard Adafruit IO untuk memvisualisasikan data sensor dalam satu halaman. Untuk itu, pertama, buat dasbor lalu tambahkan semua umpan ini di dasbor itu.
Untuk membuat dasbor, klik opsi Dasbor, lalu klik 'Tindakan', dan setelah ini, klik 'Buat Dasbor Baru.'
Di jendela berikutnya, masukkan nama dasbor dan klik 'Buat.'
Saat dasbor dibuat, sekarang kita akan menggunakan blok Adafruit IO seperti Gauge dan Slider untuk memvisualisasikan data. Untuk menambahkan blok, klik '+' di pojok kanan atas.
Kemudian Pilih blok 'Gauge'.
Di jendela berikutnya, pilih data feed yang ingin Anda visualisasikan.
Pada langkah terakhir, ubah pengaturan blok untuk menyesuaikannya.
Sekarang ikuti prosedur yang sama seperti di atas untuk menambahkan blok visualisasi untuk sisa feed. Dasbor Adafruit IO saya terlihat seperti ini:
Penjelasan Kode untuk
Kode lengkap untuk proyek ini diberikan di akhir dokumen. Di sini kami menjelaskan beberapa bagian penting dari kode.
Kode menggunakan SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, dan DHT.h perpustakaan. Perpustakaan SDS011, Adafruit_GFX, dan Adafruit_SSD1306 dapat diunduh dari Manajer Perpustakaan di Arduino IDE dan menginstal dari sana. Untuk itu, buka Arduino IDE dan masuk ke Sketch <Include Library <Manage Libraries . Sekarang cari SDS011 dan instal perpustakaan Sensor SDS oleh R. Zschiegner.
Demikian pula, instal pustaka Adafruit GFX dan Adafruit SSD1306 oleh Adafruit. Adafruit_MQTT.h dan DHT11.h dapat diunduh dari tautan yang diberikan.
Setelah menginstal perpustakaan ke Arduino IDE, mulai kode dengan memasukkan file perpustakaan yang diperlukan.
#include
Di baris berikutnya, tentukan lebar dan tinggi layar OLED. Dalam proyek ini, saya telah menggunakan layar OLED 128 × 64 SPI. Anda dapat mengubah variabel SCREEN_WIDTH , dan SCREEN_HEIGHT sesuai tampilan Anda.
# Tentukan SCREEN_WIDTH 128 # Tentukan SCREEN_HEIGHT 64
Kemudian tentukan pin komunikasi SPI di mana Layar OLED terhubung.
# Tentukan OLED_MOSI 23 # Tentukan OLED_CLK 18 # Tentukan OLED_DC 4 # Tentukan OLED_CS 5 # Tentukan OLED_RESET 2
Kemudian buat instance untuk tampilan Adafruit dengan lebar dan tinggi serta protokol komunikasi SPI yang sudah ditentukan sebelumnya.
Layar Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Kemudian sertakan kredensial WiFi dan Adafruit IO yang Anda salin dari server Adafruit IO. Ini akan mencakup server MQTT, Nomor Port, Nama Pengguna, dan Kunci AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #menentukan MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Kemudian atur umpan Adafruit IO untuk menyimpan data sensor. Dalam kasus saya, saya telah menetapkan enam umpan untuk menyimpan data sensor yang berbeda, yaitu: Kualitas Udara, Suhu, Kelembaban, 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 Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); 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 () , inisialisasi Monitor Serial pada baud rate 9600 untuk keperluan debugging. Juga Inisialisasi tampilan OLED, sensor DHT, dan sensor SDS011 dengan fungsi begin () .
batal penyiapan () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
The untuk loop dalam pengaturan fungsi yang digunakan untuk mengumpulkan nilai sampai dengan nomor ditetapkan dan kemudian mengatur counter ke nol.
untuk (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Membaca Nilai Sensor:
Sekarang di dalam fungsi loop, gunakan metode millis () untuk membaca nilai sensor setiap satu jam. Tiap sensor gas mengeluarkan nilai analog dari 0 hingga 4095. Untuk mengubah nilai ini menjadi tegangan, gunakan persamaan berikut: RvRo = MQ7Raw * (3.3 / 4095); dimana MQ7Raw adalah nilai analog dari pin analog sensor. Baca juga pembacaan PM2.5 dan PM10 dari sensor SDS011.
if ((unsigned long) (currentMillis - priorMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Mengubah Nilai:
Nilai PM2.5 dan PM10 sudah dalam µg / m 3 tetapi kita perlu mengubah nilai Karbon Monoksida dari PPM menjadi mg / m 3. Rumus konversi diberikan di bawah ini:
Konsentrasi (mg / m 3) = Konsentrasi (PPM) × (Massa Molekul (g / mol) / Volume Molar (L))
Dimana: Massa Molekul CO adalah 28,06 g / mol dan Volume Molar adalah 24,45L pada suhu 25 0 C
KonsentrasiINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Menghitung Rata-Rata 24 Jam:
Kemudian di baris berikutnya, hitung rata-rata 24 jam untuk pembacaan PM10, PM2.5, dan rata-rata 8 jam untuk pembacaan Karbon Monoksida. Di baris kode pertama, ambil total saat ini dan kurangi elemen pertama dalam larik, sekarang simpan ini sebagai total baru. Awalnya, ini akan menjadi Nol. Kemudian dapatkan nilai sensor dan tambahkan pembacaan arus ke total dan tingkatkan indeks bilangan. Jika nilai indeks sama dengan atau lebih besar dari numReadings, setel indeks kembali ke nol.
totalPM10 = totalPM10 - bacaanPM10; bacaanPM10 = p10; totalPM10 = totalPM10 + bacaanPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Kemudian, akhirnya, publikasikan nilai-nilai ini di Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Humidity.publish (kelembaban)) {delay (30000); ………………………………………………………. ……………………………………………………….
Casing Cetak 3D untuk Sistem Pemantauan AQI
Selanjutnya, saya mengukur dimensi setup menggunakan vernier saya dan juga mengukur dimensi sensor dan OLED untuk mendesain casing. Desain saya terlihat seperti ini di bawah, setelah selesai.
Setelah saya puas dengan desainnya, saya mengekspornya sebagai file STL, mengirisnya berdasarkan pengaturan printer, dan akhirnya mencetaknya. Sekali lagi file STL juga tersedia untuk diunduh dari Thingiverse dan Anda dapat mencetak casing Anda menggunakannya.
Setelah pencetakan selesai, saya melanjutkan dengan merakit proyek yang dipasang di kandang permanen untuk memasangnya di fasilitas. Dengan koneksi lengkap dibuat, saya memasang sirkuit ke casing saya dan semuanya cocok seperti yang Anda lihat di sini.
Menguji Sistem Pemantauan AQI
Setelah perangkat keras dan kode siap, sekarang saatnya menguji perangkat. Kami menggunakan adaptor 12V 1A eksternal untuk memberi daya pada perangkat. Seperti yang Anda lihat, perangkat akan menampilkan Konsentrasi PM10, PM2.5, dan Karbon Monoksida pada Layar OLED. Konsentrasi PM2.5 dan PM10 berada dalam µg / m 3 sedangkan konsentrasi Karbon Monoksida dalam mg / m 3.
Bacaan ini juga akan dipublikasikan di Dasbor Adafruit IO. Maksimum dari semua parameter (PM10, PM2.5 & CO) adalah AQI.
Nilai AQI dari 30 hari terakhir akan ditampilkan sebagai grafik.
Ini adalah bagaimana Anda dapat menggunakan sensor SDS011 dan MQ-7 untuk menghitung Indeks Kualitas Udara. Pekerjaan lengkap proyek juga dapat ditemukan di video yang ditautkan di bawah ini. Semoga Anda menikmati proyek ini dan merasa tertarik untuk membuat proyek Anda sendiri. Jika Anda memiliki pertanyaan, silakan tinggalkan di bagian komentar di bawah.