- Nödvändiga komponenter:
- Kretsschema och förklaring:
- Arbetsförklaring:
- Kodförklaring:
- "; webpage + =" Air Quality is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
Följande kod kommer att anropa en funktion med namnet sendData och skickar data- och meddelandesträngarna till webbsidan för att visa.
sendData (cipSend, 1000, DEBUG); sendData (webbsida, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Följande kod skriver ut data på LCD-skärmen. Vi har tillämpat olika villkor för att kontrollera luftkvaliteten, och LCD kommer att skriva ut meddelandena enligt förhållanden och summern piper också om föroreningarna går över 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Slutligen skickar nedanstående funktion och visar informationen på webbsidan. Data vi lagrade i sträng med namnet 'webbsida' kommer att sparas i sträng med namnet 'kommando' . ESP läser sedan karaktären en efter en från "kommandot" och skriver ut den på webbsidan.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (kommando); // skicka lästecknet till esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp har data så visa dess utdata till seriefönstret char c = esp8266.read (); // läs nästa karaktär. svar + = c; }} om (felsöka) {Serial.print (svar); } returnera svar; }
- Test och resultat av projektet:
I det här projektet ska vi skapa ett IoT-baserat övervakningssystem för luftföroreningar där vi övervakar luftkvaliteten via en webbserver med internet och kommer att utlösa ett larm när luftkvaliteten går ner över en viss nivå, betyder när det finns tillräckligt av skadliga gaser finns i luften som CO2, rök, alkohol, bensen och NH3. Den visar luftkvaliteten i PPM på LCD-skärmen och på webbsidan så att vi kan övervaka den mycket enkelt.
Tidigare har vi byggt LPG-detektorn med hjälp av MQ6-sensorn och rökdetektorn med hjälp av MQ2-sensorn men den här gången har vi använt MQ135-sensorn som luftkvalitetssensor, vilket är det bästa valet för övervakning av luftkvalitet eftersom det kan upptäcka de flesta skadliga gaser och kan mäta deras mängd exakt. I detta IOT-projekt kan du övervaka föroreningsnivån var som helst med din dator eller mobil. Vi kan installera detta system var som helst och kan också utlösa en viss enhet när föroreningar går utöver en viss nivå, som att vi kan slå på avgasfläkten eller kan skicka SMS / e-post till användaren.
Nödvändiga komponenter:
- MQ135 Gassensor
- Arduino Uno
- Wi-Fi-modul ESP8266
- 16X2 LCD
- Bakbord
- 10K potentiometer
- 1K ohm-motstånd
- 220 ohm motstånd
- Summer
Du kan köpa alla ovanstående komponenter härifrån.
Kretsschema och förklaring:
Först och främst ansluter vi ESP8266 till Arduino. ESP8266 körs på 3.3V och om du ger den 5V från Arduino fungerar den inte ordentligt och det kan skada den. Anslut VCC och CH_PD till 3.3V-stiftet på Arduino. RX-stiftet på ESP8266 fungerar på 3.3V och kommer inte att kommunicera med Arduino när vi ansluter den direkt till Arduino. Så vi måste skapa en spänningsdelare för den som omvandlar 5V till 3,3V. Detta kan göras genom att ansluta tre motstånd i serie som vi gjorde i kretsen. Anslut TX-stift på ESP8266 till stift 10 på Arduino och RX-stift på esp8266 till stift 9 på Arduino genom motstånden.
ESP8266 Wi-Fi-modul ger dina projekt åtkomst till Wi-Fi eller internet. Det är en mycket billig enhet och gör dina projekt väldigt kraftfulla. Den kan kommunicera med vilken mikrokontroller som helst och det är de mest ledande enheterna på IOT-plattformen. Läs mer om hur du använder ESP8266 med Arduino här.
Sedan ansluter vi MQ135-sensorn till Arduino. Anslut VCC och sensorns jordstift till 5V och jord på Arduino och den analoga sensorn till A0 på Arduino.
Anslut en summer till stift 8 på Arduino som börjar pipa när tillståndet blir sant.
Till sist kommer vi att ansluta LCD med Arduino. LCD-anslutningarna är som följer
- Anslut stift 1 (VEE) till marken.
- Anslut stift 2 (VDD eller VCC) till 5V.
- Anslut stift 3 (V0) till mittstiftet på 10K potentiometern och anslut de andra två ändarna av potentiometern till VCC och GND. Potentiometern används för att styra LCD-skärmens kontrast. Potentiometer med andra värden än 10K fungerar också.
- Anslut stift 4 (RS) till stift 12 på Arduino.
- Anslut stift 5 (Läs / skriv) till marken för Arduino. Denna stift används inte ofta så vi ansluter den till marken.
- Anslut stift 6 (E) till stift 11 på Arduino. RS- och E-stiftet är styrstiften som används för att skicka data och tecken.
- Följande fyra stift är datapinnar som används för att kommunicera med Arduino.
Anslut stift 11 (D4) till stift 5 på Arduino.
Anslut stift 12 (D5) till stift 4 i Arduino.
Anslut stift 13 (D6) till stift 3 i Arduino.
Anslut stift 14 (D7) till stift 2 på Arduino.
- Anslut stift 15 till VCC genom 220 ohm-motståndet. Motståndet kommer att användas för att ställa in bakgrundsbelysningens ljusstyrka. Större värden kommer att göra bakgrundsbelysningen mycket mörkare.
- Anslut stift 16 till marken.
Arbetsförklaring:
MQ135-sensorn känner av NH3, NOx, alkohol, bensen, rök, CO2 och några andra gaser, så det är en perfekt gassensor för vårt projekt för luftkvalitetsövervakning. När vi ansluter det till Arduino kommer det att känna av gaserna och vi kommer att få föroreningsnivån i PPM (delar per miljon). MQ135-gassensorn ger utdata i form av spänningsnivåer och vi måste konvertera den till PPM. Så för att konvertera utdata i PPM, här har vi använt ett bibliotek för MQ135-sensorn, det förklaras i detalj i avsnittet "Kodförklaring" nedan.
Sensorn gav oss värdet 90 när det inte fanns någon gas nära den och den säkra nivån på luftkvaliteten är 350 PPM och den bör inte överstiga 1000 PPM. När det överskrider gränsen på 1000 PPM, börjar det orsaka huvudvärk, sömnighet och stillastående, inaktuell, täppt luft och om det överstiger 2000 PPM kan det orsaka ökad hjärtfrekvens och många andra sjukdomar.
När värdet är mindre än 1000 PPM, visar LCD och webbsidan "Frisk luft". När värdet ökar med 1000 PPM, kommer summern att pipa och LCD-skärmen och webbsidan visar "Poor Air, Open Windows". Om det kommer att öka 2000 kommer summern att fortsätta pipa och LCD: n och webbsidan visar “Fara! Flytta till frisk luft ”.
Kodförklaring:
Innan vi börjar kodningen för det här projektet måste vi först kalibrera MQ135-gassensorn. Det finns många beräkningar involverade i att konvertera sensorns output till PPM-värde, vi har gjort denna beräkning tidigare i vårt tidigare rökdetektorprojekt. Men här använder vi biblioteket för MQ135, du kan ladda ner och installera detta MQ135-bibliotek härifrån:
Med hjälp av detta bibliotek kan du direkt få PPM-värden genom att bara använda nedanstående två rader:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Men innan det måste vi kalibrera MQ135-sensorn, för att kalibrera sensorn, ladda upp nedanstående kod och låt den gå i 12 till 24 timmar och få sedan RZERO- värdet.
#include "MQ135.h" ogiltig installation () {Serial.begin (9600); } ogiltig slinga () {MQ135 gasSensor = MQ135 (A0); // Fäst sensorn till stift A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); fördröjning (1000); }
Efter att ha fått RZERO- värdet. Lägg RZERO-värdet i biblioteksfilen du laddade ner "MQ135.h": #define RZERO 494.63
Nu kan vi börja den faktiska koden för vårt projekt för övervakning av luftkvalitet.
I koden har vi först och främst definierat biblioteken och variablerna för gassensorn och LCD-skärmen. Genom att använda Software Serial Library kan vi göra alla digitala stift som TX- och RX-stift. I den här koden har vi gjort stift 9 som RX-stift och stift 10 som TX-stift för ESP8266. Sedan har vi inkluderat biblioteket för LCD-skärmen och har definierat stiften för samma. Vi har också definierat ytterligare två variabler: en för sensorens analoga stift och en annan för att lagra air_quality- värde.
#omfatta
Då kommer vi att förklara stift 8 som utgångsstift där vi har anslutit summern. Kommandot l cd.begin (16,2) startar LCD-skärmen för att ta emot data och sedan ställer vi markören till första raden och skriver ut 'circuitdigest' . Sedan ställer vi in markören på den andra raden och skriver ut 'Sensor Warming' .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensorvärmning"); fördröjning (1000);
Sedan ställer vi in baudhastigheten för seriekommunikationen. Olika ESP: er har olika överföringshastigheter, så skriv det enligt din ESP: s överföringshastighet. Sedan skickar vi kommandona för att ställa in ESP för att kommunicera med Arduino och visa IP-adressen på den seriella bildskärmen.
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 ();
För att skriva ut utdata på webbsidan i webbläsaren måste vi använda HTML-programmering. Så vi har skapat en sträng som heter webbsida och lagrat utdata i den. Vi subtraherar 48 från utgången eftersom läsfunktionen () returnerar ASCII-decimalvärdet och det första decimaltalet som är 0 börjar vid 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; Strängwebbsida = "
IOT luftövervakningssystem
"; webbsida + =""; webpage + =" Air Quality is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
Följande kod kommer att anropa en funktion med namnet sendData och skickar data- och meddelandesträngarna till webbsidan för att visa.
sendData (cipSend, 1000, DEBUG); sendData (webbsida, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Följande kod skriver ut data på LCD-skärmen. Vi har tillämpat olika villkor för att kontrollera luftkvaliteten, och LCD kommer att skriva ut meddelandena enligt förhållanden och summern piper också om föroreningarna går över 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Slutligen skickar nedanstående funktion och visar informationen på webbsidan. Data vi lagrade i sträng med namnet 'webbsida' kommer att sparas i sträng med namnet 'kommando' . ESP läser sedan karaktären en efter en från "kommandot" och skriver ut den på webbsidan.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (kommando); // skicka lästecknet till esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp har data så visa dess utdata till seriefönstret char c = esp8266.read (); // läs nästa karaktär. svar + = c; }} om (felsöka) {Serial.print (svar); } returnera svar; }
Test och resultat av projektet:
Innan du laddar upp koden, se till att du är ansluten till Wi-Fi på din ESP8266-enhet. Efter uppladdning, öppna den seriella bildskärmen och den visar IP-adressen som visas nedan.
Skriv den här IP-adressen i din webbläsare, den visar utdata som visas nedan. Du måste uppdatera sidan igen om du vill se det aktuella luftkvalitetsvärdet i PPM.
Vi har konfigurerat en lokal server för att visa att den fungerar, du kan kolla in videon nedan. Men för att övervaka luftkvaliteten var som helst i världen måste du vidarebefordra port 80 (används för HTTP eller internet) till din lokala eller privata IP-adress (192.168 *) på din enhet. Efter vidarebefordran av portar vidarebefordras alla inkommande anslutningar till den här lokala adressen och du kan öppna ovanstående webbsida genom att bara ange den offentliga IP-adressen på ditt internet var som helst. Du kan vidarebefordra porten genom att logga in på din router (192.168.1.1) och hitta alternativet att ställa in portvidarebefordran.