Arduino-luchtkwaliteitsmonitor met DSM501A-sensor
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 5 | ||||
| × | 1 | ||||
| × | 1 |
Benodigde gereedschappen en machines
|
Apps en online services
|
Over dit project
Monitoring van de luchtkwaliteit is een bekende en gevestigde wetenschap die begon in de jaren '80. In die tijd was de technologie vrij beperkt en de oplossing die werd gebruikt om het luchtvervuilingscomplex te kwantificeren, omslachtig en erg duur.
Gelukkig worden de oplossingen die worden gebruikt voor het monitoren van de luchtkwaliteit tegenwoordig, met de meest recente en moderne technologieën, niet alleen nauwkeuriger, maar ook sneller in het meten. Apparaten worden kleiner en kosten veel betaalbaarder dan ooit tevoren. Het gepresenteerde apparaat maakt gebruik van de Samyoung "DSM501A" stofsensor die een van de goedkoopste op de markt is en voor een paar dollar bij AliExpress kan worden gekocht. Deze sensor kan zowel PM2.5- als PM10-deeltjes detecteren.
In de onderstaande afbeelding kunt u de lay-out van de pinnen zien, maar let niet op de kleur van de draden, omdat deze anders kunnen zijn.
De schakeling is heel eenvoudig:
Vout1 (PM2.5) van sensor is aangesloten op D2 van Arduino, Vout2 (PM10) op D3, Vcc op Arduino +5V en GND op Arduino Gnd-pin. De LED-diodes zijn verbonden met de analoge pinnen A1 tot A5 van Arduino die in de code als uitgangen worden gedefinieerd. LCD-scherm met 61x2 tekens is compatibel met de Hitachi HD44780. Het toont de concentratie van PM10-deeltjes in pcs/0.01cf, en 5 toestanden van luchtkwaliteit:
- Schoon
- Goed
- Aanvaardbaar
- Zwaar
- Gevaar
De concentratie van zowel PM10 als PM2.5 kan worden gecontroleerd op de arduino seriële monitor. Afhankelijk van de mate van vervuiling (PM10) zal een geschikte LED van een bepaalde kleur gaan branden om een snelle en gemakkelijke aflezing van het resultaat mogelijk te maken. Ik heb niet veel ervaring met het schrijven van codes, dus misschien kan de code verbeterd worden. Het is erg belangrijk om te benadrukken dat door het installeren van een ventilator die lucht uit de sensoruitgang zuigt, de eigenschappen op het gebied van ongewenste piekwaarden aanzienlijk worden verbeterd. Het hele apparaat is gemonteerd in een plastic doos voor elektrische installatie.
In de toekomst ben ik van plan nog een paar goedkope stofsensoren te testen, zodat je de resultaten in een van mijn volgende projecten kunt vinden.
Code
- code
codeArduino
#includeLiquidCrystal 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 concentratie1 =0;float concentratie2 =0;int wLed =A1;int gLed =A2;int yLed =A3;int rLed =A4;int bLed =A5;void setup() {Serial.begin(9600); pinMode(2,INPUT); pinMode(3,INVOER); pinMode (wLed, UITGANG); pinMode (gLed, UITGANG); pinMode (yLed, UITGANG); pinMode (rLed, UITGANG); pinMode (bLed, UITGANG); starttime =millis();//haal de huidige tijd; lcd.begin (16, 2);}void loop () { duration1 =pulseIn (pin1, LOW); duur2 =pulseIn(pin2, LAAG); lage pulsbezetting1 =lage pulsbezetting1+duur1; lagepulsbezetting2 =lagepulsbezetting2+duur2; if ((millis()-starttime)> sampletime_ms)//if de sampletime ==30s { ratio1 =lowpulseoccupancy1/(sampletime_ms*10.0); // Integer percentage 0=>100 concentratie1 =1,1*pow(ratio1,3)-3,8*pow(ratio1,2)+520*ratio1+0,62; // met behulp van specificatieblad curve ratio2 =lowpulseoccupancy2/(sampletime_ms*10.0); // Integer percentage 0=>100 concentratie2 =1,1*pow(ratio2,3)-3,8*pow(ratio2,2)+520*ratio2+0,62; // lcd.setCursor (0, 0); lcd.print("PM10 "); lcd.setCursor(6, 0); lcd.print(concentratie1,3); Serial.print("concentratie1 ="); Seriële.afdruk (concentratie1); Serial.print(" stuks/0.01cf - "); Serial.print("concentratie2 ="); Serial.print (concentratie2); Serial.print(" stuks/0.01cf - "); if (concentratie1 <1000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("SCHOON"); digitalWrite(wLed, HOOG); digitalWrite(gLed, LAAG); digitalWrite(yLed, LAAG); digitalWrite(rLed, LAAG); digitalWrite(bLed, LAAG); } if (concentratie1> 1000 &&concentratie1 <10000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("GOED"); digitalWrite(wLed, LAAG); digitalWrite(gLed, HOOG); digitalWrite(yLed, LAAG); digitalWrite(rLed, LAAG); digitalWrite(bLed, LAAG); } if (concentratie1> 10000 &&concentratie1 <20000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("AANVAARDBAAR"); digitalWrite(wLed, LAAG); digitalWrite(gLed, LAAG); digitalWrite(yLed, HOOG); digitalWrite(rLed, LAAG); digitalWrite(bLed, LAAG); } if (concentratie1> 20000 &&concentratie1 <50000) { lcd.setCursor (0, 1); for (int i =0; i <16; ++i) { lcd.write(' '); } lcd.setCursor(4, 1); lcd.print("ZWAAR"); digitalWrite(wLed, LAAG); digitalWrite(gLed, LAAG); digitalWrite(yLed, LAAG); digitalWrite(rLed, HOOG); digitalWrite(bLed, LAAG); } if (concentratie1> 50000 ) {lcd.setCursor (0, 1);for (int i =0; i <16; ++i){ lcd.write(' ');} lcd.setCursor(4, 1); lcd.print("GEVAAR"); digitalWrite(wLed, LAAG); digitalWrite(gLed, LAAG); digitalWrite(yLed, LAAG); digitalWrite(rLed, LAAG); digitalWrite(bLed, HOOG); } lage pulsbezetting1 =0; lage pulsbezetting2 =0; starttijd =millis(); }}
Schema's
Productieproces
- Hoe de luchtkwaliteit op OpenSensors te meten
- Helium luchtkwaliteitssensor
- Arduino-gyroscoopspel met MPU-6050
- Multitemperatuursensor
- CO2-monitoring met K30-sensor
- Eenvoudige obstakelsensor met Arduino
- Capacitieve vingerafdruksensor met een Arduino of ESP8266
- IoT-meter met Arduino, Yaler en IFTTT
- Arduino afstotende elektromagnetische levitatie
- Arduino aangedreven weerballon datalogger
- Op koolstof gebaseerde luchtkwaliteitssensor