- Nødvendige komponenter:
- Kretsdiagram og forklaring:
- Arbeidsforklaring:
- Kode Forklaring:
- "; webside + =" Luftkvaliteten er "; webside + = air_quality; webside + =" PPM "; webside + ="
";
Den følgende koden vil kalle en funksjon som heter sendData, og vil sende data- og meldestrengene til websiden for å vise.
sendData (cipSend, 1000, DEBUG); sendData (nettside, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Følgende kode vil skrive ut dataene på LCD-skjermen. Vi har brukt ulike betingelser for å kontrollere luftkvaliteten, og LCD vil skrive ut meldingene i henhold til forholdene, og summeren vil også pippe hvis forurensningen går utover 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); hvis (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LAV);
Til slutt vil funksjonen nedenfor sende og vise dataene på websiden. Dataene vi lagret i en streng som heter 'webside' , lagres i en streng som heter 'kommando' . ESP vil da lese tegnet en etter en fra 'kommandoen' og vil skrive den ut på websiden.
String sendData (strengkommando, const int timeout, boolsk feilsøking) {String response = ""; esp8266.print (kommando); // send lesetegnet til esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// Espen har data, så vis utgangen til det serielle vinduet char c = esp8266.read (); // les neste karakter. respons + = c; }} if (feilsøking) {Serial.print (respons); } returnere svar; }
- Testing og produksjon av prosjektet:
I dette prosjektet skal vi lage et IoT-basert luftforurensningsovervåkingssystem der vi vil overvåke luftkvaliteten over en webserver ved hjelp av internett og utløse en alarm når luftkvaliteten går nedover et visst nivå, betyr når det er tilstrekkelig mengde av skadelige gasser er til stede i luften som CO2, røyk, alkohol, benzen og NH3. Det vil vise luftkvaliteten i PPM på LCD-skjermen og så vel som på websiden slik at vi kan overvåke den veldig enkelt.
Tidligere har vi bygget LPG-detektoren ved hjelp av MQ6-sensoren og Røykdetektoren ved hjelp av MQ2-sensoren, men denne gangen har vi brukt MQ135-sensoren som luftkvalitetssensor, som er det beste valget for overvåking av luftkvalitet, da den kan oppdage de mest skadelige gassene og kan måle mengden nøyaktig. I dette IOT-prosjektet kan du overvåke forurensningsnivået hvor som helst ved hjelp av datamaskinen eller mobilen din. Vi kan installere dette systemet hvor som helst og kan også utløse noen enheter når forurensning går utover noe nivå, som om vi kan slå på eksosviften eller kan sende varsel-SMS / e-post til brukeren.
Nødvendige komponenter:
- MQ135 Gassføler
- Arduino Uno
- Wi-Fi-modul ESP8266
- 16X2 LCD
- Brettbrett
- 10K potensiometer
- 1K ohm motstander
- 220 ohm motstand
- Summer
Du kan kjøpe alle komponentene ovenfor herfra.
Kretsdiagram og forklaring:
Først og fremst vil vi koble ESP8266 med Arduino. ESP8266 kjører på 3.3V, og hvis du gir den 5V fra Arduino, vil den ikke fungere skikkelig, og det kan få skade. Koble VCC og CH_PD til 3.3V-pinnen på Arduino. RX-pinnen på ESP8266 fungerer på 3.3V, og den kommuniserer ikke med Arduino når vi kobler den direkte til Arduino. Så vi må lage en spenningsdeler for den som vil konvertere 5V til 3,3V. Dette kan gjøres ved å koble tre motstander i serie som vi gjorde i kretsen. Koble TX-pinnen på ESP8266 til pinnen 10 på Arduino og RX-pinnen på esp8266 til pinnen 9 på Arduino gjennom motstandene.
ESP8266 Wi-Fi-modul gir prosjektene dine tilgang til Wi-Fi eller internett. Det er en veldig billig enhet og gjør prosjektene dine veldig kraftige. Den kan kommunisere med hvilken som helst mikrokontroller, og det er de mest ledende enhetene i IOT-plattformen. Lær mer om bruk av ESP8266 med Arduino her.
Deretter kobler vi MQ135-sensoren med Arduino. Koble VCC og jordpinnen til sensoren til 5V og bakken til Arduino og den analoge pinnen til sensoren til A0 til Arduino.
Koble en summer til pinnen 8 på Arduino som begynner å pippe når tilstanden blir oppfylt.
Til slutt vil vi koble LCD med Arduino. Tilkoblingene til LCD-skjermen er som følger
- Koble pin 1 (VEE) til bakken.
- Koble pin 2 (VDD eller VCC) til 5V.
- Koble pinne 3 (V0) til den midterste pinnen på 10K potensiometeret og koble de to andre endene av potensiometeret til VCC og GND. Potensiometeret brukes til å kontrollere skjermkontrasten på LCD-skjermen. Potensiometer med andre verdier enn 10K fungerer også.
- Koble pin 4 (RS) til pin 12 på Arduino.
- Koble pin 5 (Les / skriv) til bakken til Arduino. Denne pinnen brukes ikke ofte, så vi kobler den til bakken.
- Koble pin 6 (E) til pin 11 på Arduino. RS- og E-pinnen er kontrollpinnene som brukes til å sende data og tegn.
- Følgende fire pinner er datapinner som brukes til å kommunisere med Arduino.
Koble pinne 11 (D4) til pinne 5 på Arduino.
Koble pinne 12 (D5) til pinne 4 på Arduino.
Koble pinne 13 (D6) til pinne 3 på Arduino.
Koble pinne 14 (D7) til pinne 2 på Arduino.
- Koble pinne 15 til VCC gjennom motstanden på 220 ohm. Motstanden vil bli brukt til å stille inn lyset på baklyset. Større verdier vil gjøre baklyset mye mørkere.
- Koble tapp 16 til bakken.
Arbeidsforklaring:
MQ135-sensoren kan registrere NH3, NOx, alkohol, benzen, røyk, CO2 og noen andre gasser, så det er perfekt gassensor for vårt luftkvalitetsovervåkningsprosjekt. Når vi skal koble den til Arduino, vil den fornemme gassene, og vi vil få forurensningsnivået i PPM (deler per million). MQ135 gassensor gir utgangen i form av spenningsnivåer, og vi må konvertere den til PPM. Så for å konvertere utdataene i PPM, her har vi brukt et bibliotek for MQ135-sensoren, det blir forklart i detalj i delen "Kodeforklaring" nedenfor.
Sensoren ga oss en verdi på 90 når det ikke var noen gass i nærheten av den, og det sikre nivået på luftkvaliteten er 350 PPM og den bør ikke overstige 1000 PPM. Når det overstiger grensen på 1000 PPM, begynner det å forårsake Hodepine, søvnighet og stillestående, foreldet, tett luft, og hvis det overstiger 2000 PPM, kan det føre til økt hjertefrekvens og mange andre sykdommer.
Når verdien vil være mindre enn 1000 PPM, vil LCD-skjermen og websiden vise "Frisk luft". Når verdien øker med 1000 PPM, vil summeren begynne å pippe, og LCD-skjermen og websiden vil vise "Dårlig luft, åpne vinduer". Hvis det vil øke 2000, vil summeren fortsette å pippe, og LCD-skjermen og websiden vil vise “Fare! Gå til frisk luft ”.
Kode Forklaring:
Før vi begynner å kode for dette prosjektet, må vi først kalibrere MQ135 gassføleren. Det er mange beregninger involvert i å konvertere utgangen fra sensor til PPM-verdi, vi har gjort denne beregningen tidligere i vårt forrige Smoke Detector-prosjekt. Men her bruker vi biblioteket for MQ135, du kan laste ned og installere dette MQ135-biblioteket herfra:
Ved å bruke dette biblioteket kan du få PPM-verdiene direkte, ved å bare bruke nedenstående to linjer:
MQ135 gasSensor = MQ135 (A0); flyte air_quality = gasSensor.getPPM ();
Men før det må vi kalibrere MQ135-sensoren, for å kalibrere sensoren, last opp koden nedenfor og la den gå i 12 til 24 timer, og få deretter RZERO- verdien.
#include "MQ135.h" ugyldig oppsett () {Serial.begin (9600); } ugyldig sløyfe () {MQ135 gasSensor = MQ135 (A0); // Fest sensoren til pin A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); forsinkelse (1000); }
Etter å ha fått RZERO- verdien. Sett RZERO-verdien i biblioteksfilen du lastet ned "MQ135.h": #define RZERO 494.63
Nå kan vi begynne den faktiske koden for prosjektet for luftkvalitetsovervåking.
I koden har vi først og fremst definert bibliotekene og variablene for gassensoren og LCD-skjermen. Ved å bruke programvareseriebiblioteket kan vi lage en hvilken som helst digital pin som TX og RX pin. I denne koden har vi laget Pin 9 som RX-pin og pin 10 som TX-pin for ESP8266. Så har vi tatt med biblioteket for LCD-skjermen og har definert pinnene for det samme. Vi har også definert to flere variabler: en for sensorens analoge pin og en for lagring av air_quality- verdi.
#inkludere
Deretter vil vi erklære pinnen 8 som utgangspinnen der vi har koblet summeren. l cd.begin (16,2) kommandoen vil starte LCD å motta data og deretter vil vi sette markøren til første linje og vil skrive ut 'circuitdigest' . Deretter setter vi markøren på den andre linjen og skriver ut 'Sensor Warming' .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensor Warming"); forsinkelse (1000);
Deretter vil vi sette baudrate for seriekommunikasjonen. Ulike ESP-er har forskjellige overføringshastigheter, så skriv det i henhold til ESPs overføringshastighet. Deretter sender vi kommandoene for å stille ESP til å kommunisere med Arduino og vise IP-adressen på den serielle skjermen.
Serial.begin (115200); esp8266.begin (115200); sendData ("AT + RST \ r", 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 å skrive ut utdataene på websiden i nettleseren, må vi bruke HTML-programmering. Så vi har opprettet en streng som heter webside og lagret utdataene i den. Vi trekker 48 fra utgangen fordi read () -funksjonen returnerer ASCII-desimalverdien, og det første desimaltallet som er 0 starter ved 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; String webside = "
IOT luftovervåkningssystem
"; webside + =""; webside + =" Luftkvaliteten er "; webside + = air_quality; webside + =" PPM "; webside + ="
";
Den følgende koden vil kalle en funksjon som heter sendData, og vil sende data- og meldestrengene til websiden for å vise.
sendData (cipSend, 1000, DEBUG); sendData (nettside, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Følgende kode vil skrive ut dataene på LCD-skjermen. Vi har brukt ulike betingelser for å kontrollere luftkvaliteten, og LCD vil skrive ut meldingene i henhold til forholdene, og summeren vil også pippe hvis forurensningen går utover 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); hvis (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LAV);
Til slutt vil funksjonen nedenfor sende og vise dataene på websiden. Dataene vi lagret i en streng som heter 'webside' , lagres i en streng som heter 'kommando' . ESP vil da lese tegnet en etter en fra 'kommandoen' og vil skrive den ut på websiden.
String sendData (strengkommando, const int timeout, boolsk feilsøking) {String response = ""; esp8266.print (kommando); // send lesetegnet til esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// Espen har data, så vis utgangen til det serielle vinduet char c = esp8266.read (); // les neste karakter. respons + = c; }} if (feilsøking) {Serial.print (respons); } returnere svar; }
Testing og produksjon av prosjektet:
Før du laster opp koden, må du sørge for at du er koblet til Wi-Fi på ESP8266-enheten din. Etter at du har lastet opp, åpner du den serielle skjermen, og den viser IP-adressen som vist nedenfor.
Skriv inn denne IP-adressen i nettleseren din, den viser deg utdataene som vist nedenfor. Du må oppdatere siden igjen hvis du vil se gjeldende luftkvalitetsverdi i PPM.
Vi har satt opp en lokal server for å demonstrere at den fungerer, du kan sjekke videoen nedenfor. Men for å overvåke luftkvaliteten hvor som helst i verden, må du videresende port 80 (brukt til HTTP eller internett) til din lokale eller private IP-adresse (192.168 *) på enheten din. Etter portvideresending vil alle innkommende tilkoblinger bli videresendt til denne lokale adressen, og du kan åpne ovennevnte nettside ved å bare skrive inn den offentlige IP-adressen til internett ditt hvor som helst. Du kan videresende porten ved å logge deg på ruteren din (192.168.1.1) og finne muligheten til å konfigurere portvideresending.