- Nødvendige komponenter:
- Kredsløbsdiagram og forklaring:
- Arbejdsforklaring:
- Kode Forklaring:
- "; webside + =" Luftkvalitet er "; webside + = luftkvalitet; webside + =" PPM "; webside + ="
";
Den følgende kode kalder en funktion ved navn sendData og sender data- og meddelelsesstrengene til websiden for at vise.
sendData (cipSend, 1000, DEBUG); sendData (webside, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Den følgende kode udskriver dataene på LCD'et. Vi har anvendt forskellige betingelser for kontrol af luftkvalitet, og LCD vil udskrive meddelelserne i henhold til betingelser, og summer bipper også, hvis forureningen går ud over 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Luftkvalitet er"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); hvis (air_quality <= 1000) {lcd.print ("frisk luft"); digitalWrite (8, LAV);
Endelig vil nedenstående funktion sende og vise dataene på websiden. De data, vi har gemt i en streng med navnet 'webside' , gemmes i en streng med navnet 'kommando' . ESP læser derefter tegnet en efter en fra 'kommandoen' og udskriver det på websiden.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (kommando); // send læsetegnet til esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp har data, så vis dens output til det serielle vindue char c = esp8266.read (); // læs det næste tegn. svar + = c; }} hvis (fejlretning) {Serial.print (svar); } returnere svar }
- Test og output af projektet:
I dette projekt skal vi lave et IoT-baseret luftforureningsovervågningssystem, hvor vi overvåger luftkvaliteten via en webserver ved hjælp af internet og vil udløse en alarm, når luftkvaliteten går ned over et bestemt niveau, betyder, når der er tilstrækkelig mængde af skadelige gasser findes i luften som CO2, røg, alkohol, benzen og NH3. Det viser luftkvaliteten i PPM på LCD'et og på websiden, så vi kan overvåge det meget let.
Tidligere har vi bygget LPG-detektoren ved hjælp af MQ6-sensoren og røgdetektoren ved hjælp af MQ2-sensoren, men denne gang har vi brugt MQ135-sensoren som luftkvalitetssensor, som er det bedste valg til overvågning af luftkvalitet, da den kan registrere de mest skadelige gasser og kan måle deres mængde nøjagtigt. I dette IOT-projekt kan du overvåge forureningsniveauet hvor som helst med din computer eller mobil. Vi kan installere dette system overalt og kan også udløse en eller anden enhed, når forurening går ud over et niveau, ligesom vi kan tænde for udstødningsventilatoren eller kan sende alarm-SMS / mail til brugeren.
Nødvendige komponenter:
- MQ135 Gassensor
- Arduino Uno
- Wi-Fi-modul ESP8266
- 16X2 LCD
- Brødbræt
- 10K potentiometer
- 1K ohm modstande
- 220 ohm modstand
- Summer
Du kan købe alle ovenstående komponenter herfra.
Kredsløbsdiagram og forklaring:
Først og fremmest forbinder vi ESP8266 med Arduino. ESP8266 kører på 3.3V, og hvis du giver den 5V fra Arduino, fungerer den ikke korrekt, og det kan få skade. Tilslut VCC og CH_PD til 3.3V-stiften på Arduino. RX-stiften på ESP8266 fungerer på 3.3V, og den kommunikerer ikke med Arduino, når vi forbinder den direkte til Arduino. Så vi bliver nødt til at lave en spændingsdeler til den, der konverterer 5V til 3,3V. Dette kan gøres ved at forbinde tre modstande i serie som vi gjorde i kredsløbet. Tilslut TX-stift på ESP8266 til stift 10 på Arduino og RX-stift på esp8266 til stift 9 på Arduino gennem modstandene.
ESP8266 Wi-Fi-modul giver dine projekter adgang til Wi-Fi eller internet. Det er en meget billig enhed og gør dine projekter meget kraftfulde. Det kan kommunikere med enhver mikrokontroller, og det er de mest førende enheder i IOT-platformen. Lær mere om brug af ESP8266 med Arduino her.
Derefter forbinder vi MQ135-sensoren med Arduino. Tilslut VCC og jordstiften på sensoren til 5V og jord på Arduino og den analoge stift på sensoren til A0 på Arduino.
Forbind en summer til stift 8 på Arduino, som begynder at bippe, når tilstanden bliver sand.
Til sidst forbinder vi LCD med Arduino. LCD-tilslutningerne er som følger
- Tilslut pin 1 (VEE) til jorden.
- Tilslut pin 2 (VDD eller VCC) til 5V.
- Tilslut pin 3 (V0) til den midterste pin på 10K potentiometeret og tilslut de to andre ender af potentiometeret til VCC og GND. Potentiometeret bruges til at kontrollere LCD-skærmens kontrast. Potentiometer med andre værdier end 10K fungerer også.
- Tilslut pin 4 (RS) til pin 12 på Arduino.
- Tilslut pin 5 (læse / skrive) til jorden af Arduino. Denne ben bruges ikke ofte, så vi forbinder den med jorden.
- Tilslut pin 6 (E) til pin 11 på Arduino. RS- og E-pin er kontrolpindene, der bruges til at sende data og tegn.
- De følgende fire ben er datapinde, der bruges til at kommunikere med Arduino.
Forbind pin 11 (D4) til pin 5 i Arduino.
Tilslut pin 12 (D5) til pin 4 i Arduino.
Tilslut pin 13 (D6) til pin 3 i Arduino.
Tilslut pin 14 (D7) til pin 2 i Arduino.
- Forbind pin 15 til VCC gennem 220 ohm modstanden. Modstanden bruges til at indstille lyset på baggrundslyset. Større værdier vil gøre baggrundslyset meget mørkere.
- Tilslut pin 16 til jorden.
Arbejdsforklaring:
MQ135-sensoren kan mærke NH3, NOx, alkohol, benzen, røg, CO2 og nogle andre gasser, så det er den perfekte gassensor til vores luftkvalitetsovervågningsprojekt. Når vi forbinder det til Arduino, vil det fornemme gasserne, og vi får forureningsniveauet i PPM (dele pr. Million). MQ135-gassensor giver output i form af spændingsniveauer, og vi skal konvertere det til PPM. Så til konvertering af output i PPM har vi her brugt et bibliotek til MQ135-sensoren. Det forklares detaljeret i afsnittet "Kode forklaring" nedenfor.
Sensoren gav os en værdi på 90, når der ikke var nogen gas i nærheden af det, og det sikre niveau for luftkvalitet er 350 PPM, og det bør ikke overstige 1000 PPM. Når det overskrider grænsen på 1000 PPM, så begynder det at forårsage hovedpine, søvnighed og stillestående, forældet, tilstoppet luft, og hvis det overstiger 2000 PPM, kan det forårsage øget hjerterytme og mange andre sygdomme.
Når værdien er mindre end 1000 PPM, viser LCD'en og websiden "Frisk luft". Hver gang værdien øges med 1000 PPM, begynder summeren at bippe, og LCD'et og websiden viser "Poor Air, Open Windows". Hvis det øges 2000, vil summeren fortsætte med at bippe, og LCD'et og websiden vil vise "Fare! Flyt til frisk luft ”.
Kode Forklaring:
Før vi begynder kodningen til dette projekt, skal vi først kalibrere MQ135-gassensoren. Der er mange beregninger involveret i konvertering af sensorens output til PPM-værdi, vi har foretaget denne beregning før i vores tidligere røgdetektorprojekt. Men her bruger vi biblioteket til MQ135, du kan downloade og installere dette MQ135-bibliotek herfra:
Ved hjælp af dette bibliotek kan du direkte hente PPM-værdier ved blot at bruge nedenstående to linjer:
MQ135 gasSensor = MQ135 (A0); flyde air_quality = gasSensor.getPPM ();
Men før det er vi nødt til at kalibrere MQ135-sensoren, for at kalibrere sensoren, upload nedenstående kode og lad den køre i 12 til 24 timer og derefter få RZERO- værdien.
#include "MQ135.h" ugyldig opsætning () {Serial.begin (9600); } ugyldig sløjfe () {MQ135 gasSensor = MQ135 (A0); // Fastgør sensor til pin A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); forsinkelse (1000); }
Efter at have fået RZERO- værdien. Sæt RZERO-værdien i biblioteksfilen, du downloadede "MQ135.h": #define RZERO 494.63
Nu kan vi begynde den faktiske kode for vores projekt om overvågning af luftkvalitet.
I koden har vi først og fremmest defineret bibliotekerne og variablerne til gassensoren og LCD'et. Ved at bruge softwarens serielle bibliotek kan vi oprette enhver digital pin som TX og RX pin. I denne kode har vi lavet Pin 9 som RX-pin og pin 10 som TX-pin til ESP8266. Så har vi inkluderet biblioteket til LCD og har defineret stifterne til det samme. Vi har også defineret to flere variabler: en til sensorens analoge pin og en anden til lagring af air_quality- værdi.
#omfatte
Derefter erklærer vi pin 8 som output pin, hvor vi har tilsluttet summeren. l cd.begin (16,2) -kommandoen starter LCD'et til at modtage data, og derefter indstiller vi markøren til første linje og udskriver 'circuitdigest' . Derefter indstiller vi markøren på den anden linje og udskriver 'Sensoropvarmning' .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensoropvarmning"); forsinkelse (1000);
Derefter indstiller vi baudhastigheden for den serielle kommunikation. Forskellige ESP'er har forskellige baudhastigheder, så skriv det i henhold til din ESPs baudrate. Derefter sender vi kommandoerne til at indstille ESP til at kommunikere med Arduino og vise IP-adressen på den serielle skærm.
Serial.begin (115200); esp8266.begin (115200); sendData ("AT + RST \ r \ n", 2000, DEBUG); sendData ("AT + CWMODE = 2 \ r \ n", 1000, DEBUG); sendData ("AT + CIFSR \ r \ n", 1000, DEBUG); sendData ("AT + CIPMUair_quality = 1 \ r \ n", 1000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 1000, DEBUG); pinMode (sensorPin, INPUT); lcd.clear ();
For at udskrive output på websiden i webbrowser skal vi bruge HTML-programmering. Så vi har oprettet en streng med navnet webside og gemt output i den. Vi trækker 48 fra output, fordi funktionen read () returnerer ASCII-decimalværdien, og det første decimaltal, der er 0, starter ved 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; String webside = "
IOT-overvågningssystem til luftforurening
"; webside + =""; webside + =" Luftkvalitet er "; webside + = luftkvalitet; webside + =" PPM "; webside + ="
";
Den følgende kode kalder en funktion ved navn sendData og sender data- og meddelelsesstrengene til websiden for at vise.
sendData (cipSend, 1000, DEBUG); sendData (webside, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Den følgende kode udskriver dataene på LCD'et. Vi har anvendt forskellige betingelser for kontrol af luftkvalitet, og LCD vil udskrive meddelelserne i henhold til betingelser, og summer bipper også, hvis forureningen går ud over 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Luftkvalitet er"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); hvis (air_quality <= 1000) {lcd.print ("frisk luft"); digitalWrite (8, LAV);
Endelig vil nedenstående funktion sende og vise dataene på websiden. De data, vi har gemt i en streng med navnet 'webside' , gemmes i en streng med navnet 'kommando' . ESP læser derefter tegnet en efter en fra 'kommandoen' og udskriver det på websiden.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (kommando); // send læsetegnet til esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp har data, så vis dens output til det serielle vindue char c = esp8266.read (); // læs det næste tegn. svar + = c; }} hvis (fejlretning) {Serial.print (svar); } returnere svar }
Test og output af projektet:
Inden du uploader koden, skal du sikre dig, at du har forbindelse til Wi-Fi på din ESP8266-enhed. Efter uploaden skal du åbne den serielle skærm og den viser IP-adressen som vist nedenfor.
Indtast denne IP-adresse i din browser, den viser dig output som vist nedenfor. Du bliver nødt til at opdatere siden igen, hvis du vil se den aktuelle luftkvalitetsværdi i PPM.
Vi har konfigureret en lokal server til at demonstrere, at den fungerer, du kan tjekke videoen nedenfor. Men for at overvåge luftkvaliteten overalt i verden skal du videresende port 80 (bruges til HTTP eller internet) til din lokale eller private IP-adresse (192.168 *) på din enhed. Efter portvideresendelse videresendes alle indgående forbindelser til denne lokale adresse, og du kan åbne ovenstående webside ved blot at indtaste den offentlige IP-adresse på dit internet fra hvor som helst. Du kan videresende porten ved at logge på din router (192.168.1.1) og finde muligheden for at konfigurere portvideresendelse.