Tentang proyek ini
Pemantauan kualitas udara adalah ilmu yang terkenal dan mapan yang dimulai pada tahun 80-an. Saat itu, teknologinya sangat terbatas, dan solusi yang digunakan untuk menghitung polusi udara kompleks, rumit dan sangat mahal.
Untungnya, saat ini, dengan teknologi terkini dan modern, solusi yang digunakan untuk pemantauan kualitas udara tidak hanya menjadi lebih tepat, tetapi juga lebih cepat dalam pengukuran. Perangkat menjadi lebih kecil, dan harganya jauh lebih terjangkau daripada sebelumnya. Perangkat yang disajikan menggunakan sensor debu Samyoung "DSM501A" yang merupakan salah satu yang termurah di pasaran dan dapat dibeli di AliExpress dengan harga beberapa dolar. Sensor ini mampu mendeteksi partikel PM2.5 serta PM10.
Pada gambar di bawah ini, Anda dapat melihat tata letak pin tetapi jangan perhatikan warna kabelnya karena mungkin berbeda.
Rangkaiannya sangat sederhana:
Vout1 (PM2.5) dari sensor terhubung ke D2 Arduino, Vout2 (PM10) ke D3, Vcc ke Arduino +5V, dan GND ke pin Arduino Gnd. Dioda LED terhubung ke pin analog A1 ke A5 Arduino yang didefinisikan sebagai output dalam kode. Layar LCD dengan karakter 61x2 kompatibel dengan Hitachi HD44780. Ini menunjukkan konsentrasi partikel PM10 dalam pcs/0.01cf, dan 5 status kualitas udara:
- Bersihkan
- Bagus
- Dapat diterima
- Berat
- Bahaya
Konsentrasi PM10 dan PM2.5 dapat dipantau pada monitor serial arduino. Tergantung pada tingkat kontaminasi (PM10), LED yang sesuai dengan warna tertentu akan menyala untuk memungkinkan pembacaan hasilnya dengan cepat dan mudah. Saya tidak punya banyak pengalaman dalam menulis kode, jadi mungkin kodenya bisa diperbaiki. Sangat penting untuk ditekankan bahwa dengan memasang kipas yang menarik udara keluar dari outlet sensor, secara signifikan meningkatkan karakteristik di area nilai puncak yang tidak diinginkan. Seluruh perangkat dirakit dalam kotak plastik untuk instalasi listrik.
Di masa mendatang, saya berencana untuk menguji beberapa sensor debu yang lebih murah sehingga Anda dapat menemukan hasilnya di salah satu proyek saya berikutnya.
Kode
kodeArduino
#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7);int pin2 =3;int pin1 =2;unsigned long duration1;unsigned long duration2;unsigned long starttime;unsigned long sampletime_ms =3000;//sampe 1s;unsigned long lowpulseoccupancy1 =0;unsigned long lowpulseoccupancy2 =0;float ratio1 =0;float ratio2 =0;float konsentrasi1 =0;float konsentrasi2 =0;int wLed =A1;int gLed =A2;int yLed =A3;int rLed =A4;int bLed =A5;pengaturan batal() { Serial.begin(9600); pinMode(2,INPUT); pinMode(3,INPUT); pinMode(wLed,OUTPUT); pinMode(gLed,OUTPUT); pinMode(yLed,OUTPUT); pinMode(rLed,OUTPUT); pinMode(bLed,OUTPUT); starttime =milis();//dapatkan waktu saat ini; lcd.begin(16, 2);}void loop() { durasi1 =pulseIn(pin1, LOW); durasi2 =pulseIn(pin2, RENDAH); lowpulseoccupancy1 =lowpulseoccupancy1+durasi1; lowpulseoccupancy2 =lowpulseoccupancy2+durasi2; if ((millis()-starttime)> sampletime_ms)//if sampel time ==30s { ratio1 =lowpulseoccupancy1/(sampletime_ms*10.0); // Persentase bilangan bulat 0=>100 konsentrasi1 =1.1*pow(rasio1,3)-3.8*pow(rasio1,2)+520*rasio1+0,62; // menggunakan rasio kurva lembar spesifikasi2 =lowpulseoccupancy2/(sampletime_ms*10.0); // Persentase bilangan bulat 0=>100 konsentrasi2 =1.1*pow(rasio2,3)-3.8*pow(rasio2,2)+520*rasio2+0,62; // lcd.setCursor(0, 0); lcd.print("PM10"); lcd.setCursor(6, 0); lcd.print(konsentrasi1,3); Serial.print("konsentrasi1 ="); Serial.print(konsentrasi1); Serial.print("pcs/0.01cf - "); Serial.print("konsentrasi2 ="); Serial.print(konsentrasi2); Serial.print("pcs/0.01cf - "); if (konsentrasi1 <1000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("BERSIH"); digitalWrite(wLed, TINGGI); digitalWrite(gLed, RENDAH); digitalWrite(yLed, RENDAH); digitalWrite(rLed, RENDAH); digitalWrite(bLed, RENDAH); } if (konsentrasi1> 1000 &&konsentrasi1 <10000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("BAIK"); digitalWrite(wLed, RENDAH); digitalWrite(gLed, TINGGI); digitalWrite(yLed, RENDAH); digitalWrite(rLed, RENDAH); digitalWrite(bLed, RENDAH); } if (konsentrasi1> 10.000 &&konsentrasi1 <20000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("DAPAT DITERIMA"); digitalWrite(wLed, RENDAH); digitalWrite(gLed, RENDAH); digitalWrite(yLed, TINGGI); digitalWrite(rLed, RENDAH); digitalWrite(bLed, RENDAH); } if (konsentrasi1> 20000 &&konsentrasi1 <50000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("BERAT"); digitalWrite(wLed, RENDAH); digitalWrite(gLed, RENDAH); digitalWrite(yLed, RENDAH); digitalWrite(rLed, TINGGI); digitalWrite(bLed, RENDAH); } if (concentration1> 50000 ) {lcd.setCursor (0, 1);for (int i =0; i <16; ++i){ lcd.write(' ');} lcd.setCursor(4, 1); lcd.print("BAHAYA"); digitalWrite(wLed, RENDAH); digitalWrite(gLed, RENDAH); digitalWrite(yLed, RENDAH); digitalWrite(rLed, RENDAH); digitalWrite(bLed, TINGGI); } lowpulseoccupancy1 =0; lowpulseoccupancy2 =0; waktu mulai =mili(); }}
Skema