- Componente necesare:
- Schema și explicația circuitului:
- Explicație de lucru:
- Explicatie cod:
- "; pagina web + =" Calitatea aerului este "; pagina web + = calitatea_air; pagina web + =" PPM "; pagina web + ="
";
Următorul cod va apela o funcție numită sendData și va trimite șirurile de date și mesaje pe pagina web pentru a fi afișate.
sendData (cipSend, 1000, DEBUG); sendData (pagina web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Următorul cod va imprima datele pe ecranul LCD. Am aplicat diferite condiții pentru verificarea calității aerului, iar ecranul LCD va imprima mesajele în funcție de condiții, iar buzzerul va emite un sunet dacă poluarea depășește 1000 PPM.
lcd.setCursor (0, 0); lcd.print („Calitatea aerului este”); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Aer proaspăt"); digitalWrite (8, LOW);
În cele din urmă, funcția de mai jos va trimite și va afișa datele pe pagina web. Datele stocate în șirul numit „pagină web” vor fi salvate în șirul numit „comandă” . ESP va citi apoi caracterul unul câte unul din „comandă” și îl va imprima pe pagina web.
String sendData (comanda String, const int timeout, depanare booleană) {String response = ""; esp8266.print (comandă); // trimiteți caracterul citit la esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// Esp are date, așa că afișează ieșirea în fereastra serială char c = esp8266.read (); // citiți următorul personaj. răspuns + = c; }} if (depanare) {Serial.print (răspuns); } răspuns de returnare; }
- Testarea și rezultatul proiectului:
În acest proiect vom realiza un sistem de monitorizare a poluării aerului bazat pe IoT, în care vom monitoriza calitatea aerului pe un server web folosind internet și vom declanșa o alarmă atunci când calitatea aerului scade dincolo de un anumit nivel, înseamnă când există o cantitate suficientă de gaze nocive sunt prezente în aer, cum ar fi CO2, fum, alcool, benzen și NH3. Acesta va arăta calitatea aerului în PPM pe ecranul LCD și pe pagina web, astfel încât să îl putem monitoriza foarte ușor.
Anterior am construit detectorul GPL folosind senzorul MQ6 și detectorul de fum folosind senzorul MQ2, dar de data aceasta am folosit senzorul MQ135 ca senzor de calitate a aerului, care este cea mai bună alegere pentru monitorizarea calității aerului, deoarece poate detecta cele mai multe gaze dăunătoare și poate măsura cantitatea acestora cu precizie. În acest proiect IOT, puteți monitoriza nivelul de poluare de oriunde utilizând computerul sau mobilul. Putem instala acest sistem oriunde și, de asemenea, putem declanșa un dispozitiv atunci când poluarea depășește un anumit nivel, de exemplu, putem porni ventilatorul de eșapament sau putem trimite mesaje SMS / e-mail de alertă utilizatorului.
Componente necesare:
- MQ135 Senzor de gaz
- Arduino Uno
- Modul Wi-Fi ESP8266
- LCD 16X2
- Breadboard
- Potențiometru 10K
- Rezistențe de 1K ohm
- Rezistor de 220 ohmi
- Buzzer
Puteți cumpăra toate componentele de mai sus de aici.
Schema și explicația circuitului:
În primul rând vom conecta ESP8266 cu Arduino. ESP8266 funcționează pe 3,3V și dacă îi veți da 5V de pe Arduino, atunci nu va funcționa corect și ar putea deteriora. Conectați VCC și CH_PD la pinul de 3,3 V al Arduino. Pinul RX al ESP8266 funcționează pe 3,3V și nu va comunica cu Arduino când îl vom conecta direct la Arduino. Deci, va trebui să facem un divizor de tensiune pentru acesta, care va converti 5V în 3.3V. Acest lucru se poate face prin conectarea a trei rezistențe în serie, așa cum am făcut în circuit. Conectați pinul TX al ESP8266 la pinul 10 al Arduino și pinul RX al esp8266 la pinul 9 al Arduino prin rezistențe.
Modulul ESP8266 Wi-Fi oferă proiectelor dvs. acces la Wi-Fi sau internet. Este un dispozitiv foarte ieftin și vă face proiectele foarte puternice. Poate comunica cu orice microcontroler și este cel mai important dispozitiv din platforma IOT. Aflați mai multe despre utilizarea ESP8266 cu Arduino aici.
Apoi vom conecta senzorul MQ135 cu Arduino. Conectați VCC și pinul de masă al senzorului la 5V și la solul Arduino și pinul analogic al senzorului la A0 al Arduino.
Conectați un buzzer la pinul 8 al Arduino, care va începe să emită un sunet când starea devine adevărată.
În cele din urmă, vom conecta ecranul LCD cu Arduino. Conexiunile LCD sunt după cum urmează
- Conectați pinul 1 (VEE) la sol.
- Conectați pinul 2 (VDD sau VCC) la 5V.
- Conectați pinul 3 (V0) la pinul mijlociu al potențiometrului de 10K și conectați celelalte două capete ale potențiometrului la VCC și GND. Potențiometrul este utilizat pentru a controla contrastul ecranului ecranului LCD. Potențiometrul altor valori decât 10K va funcționa și el.
- Conectați pinul 4 (RS) la pinul 12 al Arduino.
- Conectați pinul 5 (Citire / Scriere) la solul Arduino. Acest pin nu este adesea folosit, așa că îl vom conecta la sol.
- Conectați pinul 6 (E) la pinul 11 al Arduino. Pinii RS și E sunt pinii de control care sunt utilizați pentru a trimite date și caractere.
- Următorii patru pini sunt pini de date care sunt utilizați pentru a comunica cu Arduino.
Conectați pinul 11 (D4) la pinul 5 al Arduino.
Conectați pinul 12 (D5) la pinul 4 al Arduino.
Conectați pinul 13 (D6) la pinul 3 al Arduino.
Conectați pinul 14 (D7) la pinul 2 al Arduino.
- Conectați pinul 15 la VCC prin rezistorul de 220 ohmi. Rezistorul va fi folosit pentru a seta luminozitatea luminii din spate. Valorile mai mari vor face lumina din spate mult mai întunecată.
- Conectați pinul 16 la masă.
Explicație de lucru:
Senzorul MQ135 poate detecta NH3, NOx, alcool, benzen, fum, CO2 și alte gaze, deci este un senzor de gaz perfect pentru proiectul nostru de monitorizare a calității aerului. Când îl vom conecta la Arduino, atunci va simți gazele și vom obține nivelul de poluare în PPM (părți pe milion). Senzorul de gaz MQ135 oferă ieșirea sub formă de niveluri de tensiune și trebuie să-l transformăm în PPM. Deci, pentru conversia ieșirii în PPM, aici am folosit o bibliotecă pentru senzorul MQ135, aceasta este explicată în detaliu în secțiunea „Explicație cod” de mai jos.
Senzorul ne oferea o valoare de 90 atunci când nu existau gaz lângă acesta, iar nivelul sigur al calității aerului este de 350 PPM și nu trebuie să depășească 1000 PPM. Când depășește limita de 1000 PPM, atunci începe să provoace dureri de cap, somnolență și aer stagnant, învechit, înfundat și dacă depășește peste 2000 PPM, atunci poate provoca creșterea ritmului cardiac și multe alte boli.
Când valoarea va fi mai mică de 1000 PPM, atunci ecranul LCD și pagina web vor afișa „Aer proaspăt”. Ori de câte ori valoarea va crește 1000 PPM, atunci buzzer-ul va începe să emită un bip, iar ecranul LCD și pagina web vor afișa „Poor Air, Open Windows”. Dacă va crește 2000, buzzer-ul va continua să bipe și LCD-ul și pagina web vor afișa „Pericol! Treceți la aer proaspăt ”.
Explicatie cod:
Înainte de a începe codificarea pentru acest proiect, trebuie mai întâi să calibrăm senzorul de gaz MQ135. Există o mulțime de calcule implicate în conversia ieșirii senzorului în valoare PPM, am făcut acest calcul înainte în proiectul nostru anterior de Detector de fum. Dar aici folosim Biblioteca pentru MQ135, puteți descărca și instala această bibliotecă MQ135 de aici:
Folosind această bibliotecă puteți obține direct valorile PPM, doar folosind cele două linii de mai jos:
MQ135 gazSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Dar înainte de asta trebuie să calibrăm senzorul MQ135, pentru calibrarea senzorului încărcați codul de mai jos și lăsați-l să ruleze timp de 12 până la 24 de ore și apoi obțineți valoarea RZERO .
#includeți "MQ135.h" void setup () {Serial.begin (9600); } bucla nulă () {MQ135 gasSensor = MQ135 (A0); // Atașați senzorul la pinul A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); întârziere (1000); }
După obținerea valorii RZERO . Puneți valoarea RZERO în fișierul de bibliotecă pe care l-ați descărcat „MQ135.h”: #define RZERO 494.63
Acum putem începe codul propriu-zis pentru proiectul nostru de monitorizare a calității aerului.
În cod, în primul rând am definit bibliotecile și variabilele pentru senzorul de gaz și LCD. Folosind Biblioteca Serială Software, putem realiza orice pin digital ca pin TX și RX. În acest cod, am creat pinul 9 ca pinul RX și pinul 10 ca pinul TX pentru ESP8266. Apoi am inclus biblioteca pentru ecranul LCD și am definit pinii pentru același. De asemenea, am definit încă două variabile: una pentru pinul analogic al senzorului și alta pentru stocarea valorii calității aerului .
#include
Apoi vom declara pinul 8 ca pinul de ieșire unde am conectat buzzerul. Comanda l cd.begin (16,2) va porni ecranul LCD pentru a primi date și apoi vom seta cursorul pe prima linie și vom imprima „circuitdigest” . Apoi vom seta cursorul pe a doua linie și vom imprima „Încălzirea senzorului” .
pinMode (8, OUTPUT); lcd.inceput (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print („Încălzirea senzorului”); întârziere (1000);
Apoi vom seta rata de transmisie pentru comunicația serială. Diferite ESP-uri au rate de transmisie diferite, deci scrieți-le în funcție de rata de transmisie a ESP-ului dvs. Apoi vom trimite comenzile pentru a seta ESP-ul să comunice cu Arduino și să afișăm adresa IP pe monitorul serial.
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 ();
Pentru imprimarea rezultatului pe pagina web în browserul web, va trebui să folosim programare HTML. Deci, am creat un șir numit pagină web și am stocat rezultatul în ea. Scădem 48 din ieșire, deoarece funcția read () returnează valoarea zecimală ASCII, iar primul număr zecimal care este 0 începe la 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; String page web = "
Sistemul de monitorizare a poluării aerului IOT
"; pagina web + =""; pagina web + =" Calitatea aerului este "; pagina web + = calitatea_air; pagina web + =" PPM "; pagina web + ="
";
Următorul cod va apela o funcție numită sendData și va trimite șirurile de date și mesaje pe pagina web pentru a fi afișate.
sendData (cipSend, 1000, DEBUG); sendData (pagina web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Următorul cod va imprima datele pe ecranul LCD. Am aplicat diferite condiții pentru verificarea calității aerului, iar ecranul LCD va imprima mesajele în funcție de condiții, iar buzzerul va emite un sunet dacă poluarea depășește 1000 PPM.
lcd.setCursor (0, 0); lcd.print („Calitatea aerului este”); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Aer proaspăt"); digitalWrite (8, LOW);
În cele din urmă, funcția de mai jos va trimite și va afișa datele pe pagina web. Datele stocate în șirul numit „pagină web” vor fi salvate în șirul numit „comandă” . ESP va citi apoi caracterul unul câte unul din „comandă” și îl va imprima pe pagina web.
String sendData (comanda String, const int timeout, depanare booleană) {String response = ""; esp8266.print (comandă); // trimiteți caracterul citit la esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// Esp are date, așa că afișează ieșirea în fereastra serială char c = esp8266.read (); // citiți următorul personaj. răspuns + = c; }} if (depanare) {Serial.print (răspuns); } răspuns de returnare; }
Testarea și rezultatul proiectului:
Înainte de a încărca codul, asigurați-vă că sunteți conectat la Wi-Fi-ul dispozitivului ESP8266. După încărcare, deschideți monitorul serial și va afișa adresa IP așa cum se arată mai jos.
Tastați această adresă IP în browserul dvs., aceasta vă va arăta ieșirea așa cum se arată mai jos. Va trebui să reîmprospătați pagina din nou dacă doriți să vedeți valoarea curentă a calității aerului în PPM.
Am configurat un server local pentru a demonstra funcționarea acestuia, puteți verifica videoclipul de mai jos. Dar pentru a monitoriza calitatea aerului de oriunde în lume, trebuie să redirecționați portul 80 (utilizat pentru HTTP sau internet) la adresa dvs. IP locală sau privată (192.168 *) a dispozitivului dvs. După redirecționarea porturilor, toate conexiunile primite vor fi redirecționate către această adresă locală și puteți deschide pagina web afișată deasupra introducând doar adresa IP publică a internetului dvs. de oriunde. Puteți redirecționa portul conectându-vă la router (192.168.1.1) și găsiți opțiunea de configurare a redirecționării portului.