- Potrebne komponente:
- Kružni dijagram i objašnjenje:
- Radno objašnjenje:
- Objašnjenje koda:
- "; web stranica + =" Kvaliteta zraka je "; web stranica + = air_quality; web stranica + =" PPM "; web stranica + ="
";
Sljedeći će kôd pozvati funkciju koja se zove sendData i poslat će nizove podataka i poruka na web stranicu kako bi se prikazali.
sendData (cipSend, 1000, DEBUG); sendData (web stranica, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Sljedeći će kôd ispisati podatke na LCD-u. Primijenili smo različite uvjete za provjeru kakvoće zraka, a LCD će ispisivati poruke u skladu s uvjetima, a zujalo će se oglasiti i ako zagađenje pređe 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Kvaliteta zraka je"); lcd.print (zračna_kvaliteta); lcd.print ("PPM"); lcd.setCursor (0,1); if (kvaliteta_ zraka <= 1000) {lcd.print ("Svježi zrak"); digitalWrite (8, LOW);
Napokon će donja funkcija poslati i prikazati podatke na web stranici. Podaci koje smo pohranili u niz nazvan 'web stranica' spremit će se u niz naziva 'naredba' . ESP će zatim pročitati jedan po jedan znak iz "naredbe" i ispisat će ga na web stranici.
String sendData (naredba niza, const int timeout, boolean debug) {String response = ""; esp8266.print (naredba); // poslati pročitani znak na esp8266 long int time = millis (); while ((time + timeout)> milis ()) {while (esp8266.available ()) {// esp ima podatke pa prikaži svoj izlaz u serijski prozor char c = esp8266.read (); // pročitati sljedeći znak. odgovor + = c; }} if (otklanjanje pogrešaka) {Serial.print (odgovor); } odgovor na povratak; }
- Testiranje i rezultati projekta:
U ovom ćemo projektu izraditi IoT sustav praćenja onečišćenja zraka u kojem ćemo nadzirati kvalitetu zraka putem web poslužitelja koji koristi internet i aktivirat će alarm kada kvaliteta zraka padne iznad određene razine, što znači kada postoji dovoljna količina štetnih plinova prisutni su u zraku poput CO2, dima, alkohola, benzena i NH3. Pokazat će kvalitetu zraka u PPM-u na LCD-u, kao i na web stranici, tako da ga možemo vrlo lako nadgledati.
Prije smo izgradili LPG detektor pomoću senzora MQ6 i detektor dima pomoću senzora MQ2, ali ovaj put smo koristili senzor MQ135 kao senzor za kvalitetu zraka koji je najbolji izbor za praćenje kakvoće zraka jer može otkriti većinu štetnih plinova i može izmjeriti njihovu količinu točno. U ovom IOT projektu možete pratiti razinu zagađenja s bilo kojeg mjesta pomoću računala ili mobitela. Ovaj sustav možemo instalirati bilo gdje, a možemo pokrenuti i neki uređaj kada onečišćenje pređe neku razinu, poput uključivanja ispušnog ventilatora ili slanja SMS-a / upozorenja korisniku s upozorenjem.
Potrebne komponente:
- MQ135 Senzor plina
- Arduino Uno
- Wi-Fi modul ESP8266
- LCD LCD 16X2
- Breadboard
- 10K potenciometar
- Otpornici od 1K ohma
- Otpor od 220 ohma
- Zujalica
Sve gore navedene komponente možete kupiti ovdje.
Kružni dijagram i objašnjenje:
Prije svega spojit ćemo ESP8266 s Arduinom. ESP8266 radi na 3.3V i ako mu date 5V od Arduina, tada neće raditi ispravno i može naštetiti. Spojite VCC i CH_PD na 3.3V pin Arduina. RX pin ESP8266 radi na 3.3V i neće komunicirati s Arduinom kad ga povežemo izravno s Arduinom. Dakle, morat ćemo za njega napraviti razdjelnik napona koji će pretvoriti 5V u 3,3V. To se može postići spajanjem tri otpornika u seriju kao što smo to učinili u krugu. Kroz otpornike spojite TX pin ESP8266 na pin 10 Arduina i RX pin esp8266 na pin 9 Arduina.
Wi-Fi modul ESP8266 omogućuje vašim projektima pristup Wi-Fi-u ili Internetu. To je vrlo jeftin uređaj i vaše projekte čini vrlo moćnima. Može komunicirati s bilo kojim mikrokontrolerom i vodeći je uređaj na IOT platformi. Ovdje saznajte više o upotrebi ESP8266 s Arduinom.
Tada ćemo spojiti MQ135 senzor s Arduinom. Spojite VCC i uzemljenje pin senzora na 5 V i uzemljenje Arduina i analogni pin senzora na A0 Arduina.
Spojite zujalicu na zatik 8 Arduina koji će početi oglašavati kad stanje postane istina.
Na kraju ćemo povezati LCD s Arduinom. Priključci LCD-a su sljedeći
- Spojite zatik 1 (VEE) na masu.
- Spojite pin 2 (VDD ili VCC) na 5V.
- Spojite pin 3 (V0) na srednji pin 10K potenciometra, a druga dva kraja potenciometra spojite na VCC i GND. Potenciometar se koristi za kontrolu kontrasta zaslona LCD-a. Potenciometar vrijednosti osim 10K također će raditi.
- Spojite pin 4 (RS) na pin 12 Arduina.
- Spojite pin 5 (čitanje / pisanje) na masu Arduina. Ovaj se zatik ne koristi često pa ćemo ga spojiti sa zemljom.
- Spojite pin 6 (E) na pin 11 Arduina. RS i E pin su kontrolne igle koje se koriste za slanje podataka i znakova.
- Sljedeće četiri igle su podatkovne igle koje se koriste za komunikaciju s Arduinom.
Spojite pin 11 (D4) na pin 5 Arduina.
Spojite pin 12 (D5) na pin 4 Arduina.
Spojite pin 13 (D6) na pin 3 Arduina.
Spojite pin 14 (D7) na pin 2 Arduina.
- Spojite pin 15 na VCC kroz otpor od 220 ohma. Otpor će se koristiti za podešavanje svjetline stražnjeg svjetla. Veće vrijednosti učinit će pozadinsko svjetlo mnogo tamnijim.
- Spojite pin 16 na masu.

Radno objašnjenje:
MQ135 senzor može osjetiti NH3, NOx, alkohol, benzen, dim, CO2 i neke druge plinove, tako da je savršen senzor plina za naš Projekt praćenja kvalitete zraka. Kada ga spojimo na Arduino, tada će osjetiti plinove i dobit ćemo razinu onečišćenja u PPM (dijelovi na milijun). MQ135 senzor plina daje izlaz u obliku naponskih razina i moramo ga pretvoriti u PPM. Dakle, za pretvorbu izlaza u PPM ovdje smo koristili knjižnicu za senzor MQ135, što je detaljno objašnjeno u odjeljku "Objašnjenje koda" u nastavku.
Senzor nam je davao vrijednost 90 kada u blizini nije bilo plina, a sigurna razina kvalitete zraka je 350 PPM i ne smije prelaziti 1000 PPM. Kad prijeđe granicu od 1000 PPM, tada počinje uzrokovati glavobolju, pospanost i stajaći, ustajali, zagušljivi zrak, a ako prijeđe preko 2000 PPM, to može uzrokovati povećani puls i mnoge druge bolesti.
Kada je vrijednost manja od 1000 PPM, tada će se na LCD-u i web stranici prikazati "Svježi zrak". Kad god se vrijednost poveća 1000 PPM, zujalica će početi oglašavati, a na LCD-u i web stranici prikazat će se "Loš zrak, otvoreni prozori". Ako se poveća 2000, zujalo će nastaviti oglašavati, a na LCD-u i web stranici prikazat će se „Opasnost! Premjestite se na svježi zrak ”.
Objašnjenje koda:
Prije početka kodiranja za ovaj projekt, prvo moramo kalibrirati plinski senzor MQ135. Puno je proračuna uključenih u pretvaranje izlaza senzora u vrijednost PPM, mi smo to već radili u našem prethodnom projektu Detektora dima. Ali ovdje koristimo knjižnicu za MQ135, ovu knjižnicu MQ135 možete preuzeti i instalirati ovdje:
Korištenjem ove knjižnice možete izravno dobiti vrijednosti PPM-a, koristeći samo sljedeća dva retka:
MQ135 senzor plina = MQ135 (A0); plutajuća zračna_kvaliteta = gasSensor.getPPM ();
No, prije toga moramo kalibrirati MQ135 senzor, za kalibraciju senzora prenesite dolje navedeni kod i pustite ga da radi 12 do 24 sata, a zatim dobijemo RZERO vrijednost.
#include "MQ135.h" void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Pričvrstite senzor na pin A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); kašnjenje (1000); }
Nakon dobivanja vrijednosti RZERO . Stavite vrijednost RZERO u datoteku knjižnice koju ste preuzeli "MQ135.h": #define RZERO 494.63
Sada možemo započeti sa stvarnim kodom za naš projekt praćenja kakvoće zraka.
U kodu smo prije svega definirali knjižnice i varijable za plinski senzor i LCD. Korištenjem softverske serijske biblioteke možemo izraditi bilo koji digitalni pin kao TX i RX pin. U ovom kodu izradili smo pin 9 kao RX pin, a pin 10 kao TX pin za ESP8266. Zatim smo uključili knjižnicu za LCD i definirali igle za isti. Također smo definirali još dvije varijable: jednu za analogni pin senzora i drugu za pohranu vrijednosti zraka_kvalitete .
#include
Tada ćemo pin 8 proglasiti izlaznim pinom na koji smo spojili zujalicu. Naredba l cd.begin (16,2) pokrenut će LCD za primanje podataka, a zatim ćemo postaviti kursor u prvi redak i ispisat će 'circuitdigest' . Zatim ćemo postaviti kursor na drugi redak i ispisat ćemo 'Zagrijavanje senzora' .
pinMode (8, IZLAZ); lcd.početak (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Zagrijavanje senzora"); kašnjenje (1000);
Tada ćemo postaviti brzinu prijenosa za serijsku komunikaciju. Različiti ESP-ovi imaju različite brzine prijenosa pa ih napišite prema brzini prijenosa vašeg ESP-a. Tada ćemo poslati naredbe za postavljanje ESP-a za komunikaciju s Arduinom i prikazivanje IP adrese na serijskom monitoru.
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 ();
Za ispis rezultata na web stranici u web pregledniku morat ćemo koristiti HTML programiranje. Dakle, stvorili smo niz pod nazivom web stranica i u njega pohranili izlaz. Od izlaza oduzimamo 48 jer funkcija read () vraća ASCII decimalnu vrijednost, a prvi decimalni broj koji je 0 započinje s 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; Niz web stranice = "
IOT Sustav praćenja onečišćenja zraka
"; web stranica + =""; web stranica + =" Kvaliteta zraka je "; web stranica + = air_quality; web stranica + =" PPM "; web stranica + ="
";
Sljedeći će kôd pozvati funkciju koja se zove sendData i poslat će nizove podataka i poruka na web stranicu kako bi se prikazali.
sendData (cipSend, 1000, DEBUG); sendData (web stranica, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Sljedeći će kôd ispisati podatke na LCD-u. Primijenili smo različite uvjete za provjeru kakvoće zraka, a LCD će ispisivati poruke u skladu s uvjetima, a zujalo će se oglasiti i ako zagađenje pređe 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Kvaliteta zraka je"); lcd.print (zračna_kvaliteta); lcd.print ("PPM"); lcd.setCursor (0,1); if (kvaliteta_ zraka <= 1000) {lcd.print ("Svježi zrak"); digitalWrite (8, LOW);
Napokon će donja funkcija poslati i prikazati podatke na web stranici. Podaci koje smo pohranili u niz nazvan 'web stranica' spremit će se u niz naziva 'naredba' . ESP će zatim pročitati jedan po jedan znak iz "naredbe" i ispisat će ga na web stranici.
String sendData (naredba niza, const int timeout, boolean debug) {String response = ""; esp8266.print (naredba); // poslati pročitani znak na esp8266 long int time = millis (); while ((time + timeout)> milis ()) {while (esp8266.available ()) {// esp ima podatke pa prikaži svoj izlaz u serijski prozor char c = esp8266.read (); // pročitati sljedeći znak. odgovor + = c; }} if (otklanjanje pogrešaka) {Serial.print (odgovor); } odgovor na povratak; }
Testiranje i rezultati projekta:
Prije prijenosa koda, provjerite jeste li povezani s Wi-Fi mrežom svog ESP8266 uređaja. Nakon prijenosa otvorite serijski monitor i on će prikazati IP adresu kao što je prikazano u nastavku.

Upišite ovu IP adresu u svoj preglednik, prikazat će se izlaz kao što je prikazano dolje. Morat ćete ponovno osvježiti stranicu ako želite vidjeti trenutnu vrijednost kvalitete zraka u PPM-u.

Postavili smo lokalni poslužitelj da demonstrira njegov rad, video zapis možete pogledati u nastavku. No, da biste pratili kvalitetu zraka s bilo kojeg mjesta na svijetu, morate proslijediti priključak 80 (koji se koristi za HTTP ili Internet) na vašu lokalnu ili privatnu IP adresu (192.168 *) vašeg uređaja. Nakon prosljeđivanja porta sve dolazne veze bit će proslijeđene na ovu lokalnu adresu i gore prikazanu web stranicu možete otvoriti unosom javne IP adrese vašeg interneta s bilo kojeg mjesta. Luku možete proslijediti prijavom na usmjerivač (192.168.1.1) i pronaći opciju za postavljanje prosljeđivanja porta.
