- Reikalingi komponentai:
- Grandinės schema ir paaiškinimas:
- Darbinis paaiškinimas:
- Kodo paaiškinimas:
- "; tinklalapis + =" oro kokybė yra "; tinklalapis + = oro kokybė; tinklalapis + =" PPM "; tinklalapis + ="
";
Šis kodas iškvies funkciją pavadinimu sendData ir išsiųs duomenų ir pranešimų eilutes į tinklalapį, kad būtų rodomas.
sendData (cipSend, 1000, DEBUG); sendData (tinklalapis, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = tinklalapis.length (); cipSend + = "\ r \ n";
Šis kodas išspausdins duomenis LCD. Mes taikėme įvairias oro kokybės patikrinimo sąlygas, o LCD spausdins pranešimus pagal sąlygas, o signalas pypsės, jei tarša viršys 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("oro kokybė yra"); lcd.print (oro kokybė); lcd.print ("PPM"); lcd.setCursor (0,1); if (oro kokybė <= 1000) {lcd.print ("Šviežias oras"); „digitalWrite“ (8, LOW);
Pagaliau ši funkcija išsiųs ir parodys duomenis tinklalapyje. Duomenys, kuriuos išsaugojome eilutėje pavadinimu „tinklalapis“, bus išsaugoti eilutėje pavadinimu „komanda“ . Tada ESP perskaitys simbolį po vieną iš „komandos“ ir atspausdins jį tinklalapyje.
String sendData (String komanda, const int skirtasis laikas, loginis derinimas) {String response = ""; esp8266.print (komanda); // nusiųskite perskaitytą simbolį į esp8266 ilgą int laiką = milis (); while ((laikas + skirtasis laikas)> milis ()) {while (esp8266.available ()) {// Esp turi duomenų, todėl parodykite savo išvestį serijiniame lange char c = esp8266.read (); // perskaitykite kitą simbolį. atsakas + = c; }} if (derinti) {Serial.print (atsakymas); } grąžinimo atsakymas; }
- Testavimas ir projekto rezultatas:
Šiame projekte mes sukursime IoT pagrįstą oro taršos stebėjimo sistemą, kurioje mes stebėsime oro kokybę per interneto serverį, naudodamiesi internetu, ir sukelsime pavojaus signalą, kai oro kokybė nukris žemiau tam tikro lygio, tai reiškia, kai jų bus pakankamai ore yra kenksmingų dujų, tokių kaip CO2, dūmai, alkoholis, benzenas ir NH3. Tai parodys oro kokybę PPM skystųjų kristalų ekrane ir tinklalapyje, kad galėtume labai lengvai jį stebėti.
Anksčiau mes sukūrėme SND detektorių naudodami MQ6 jutiklį ir dūmų detektorių naudodami MQ2 jutiklį, tačiau šį kartą kaip oro kokybės jutiklį naudojome MQ135 jutiklį, kuris yra geriausias pasirinkimas oro kokybei stebėti, nes jis gali aptikti daugumą kenksmingų dujų ir gali išmatuoti jų kiekį tiksliai. Šiame IOT projekte galite stebėti taršos lygį iš bet kurios vietos naudodami kompiuterį ar mobilųjį telefoną. Šią sistemą galime įdiegti bet kur, taip pat galime suaktyvinti kai kuriuos įrenginius, kai tarša viršija tam tikrą lygį, pvz., Galime įjungti išmetimo ventiliatorių arba galime išsiųsti įspėjimo SMS / el. Laišką vartotojui.
Reikalingi komponentai:
- MQ135 dujų jutiklis
- Arduino Uno
- „Wi-Fi“ modulis ESP8266
- 16X2 skystųjų kristalų ekranas
- Bandomoji Lenta
- 10K potenciometras
- 1K omų rezistoriai
- 220 omų rezistorius
- Buzeris
Visus minėtus komponentus galite įsigyti čia.
Grandinės schema ir paaiškinimas:
Pirmiausia mes sujungsime ESP8266 su „Arduino“. ESP8266 veikia su 3.3V įtampa ir jei duosite 5V iš „Arduino“, jis neveiks tinkamai ir gali sugadinti. Prijunkite VCC ir CH_PD prie 3,3 V „Arduino“ kaiščio. ESP8266 RX kaištis veikia 3.3V įtampoje ir jis nebendraus su „Arduino“, kai jį prijungsime tiesiai prie „Arduino“. Taigi, mes turėsime sukurti įtampos daliklį, kuris pavers 5V į 3.3V. Tai galima padaryti sujungus tris rezistorius nuosekliai, kaip mes darėme grandinėje. Prijunkite ESP8266 TX kaištį prie „Arduino“ 10 kaiščio, o „esp8266“ RX kaištį per rezistorius.
ESP8266 „Wi-Fi“ modulis suteikia jūsų projektams prieigą prie „Wi-Fi“ ar interneto. Tai yra labai pigus prietaisas, todėl jūsų projektai yra labai galingi. Jis gali bendrauti su bet kokiu mikrovaldikliu ir yra pats svarbiausias IOT platformos įrenginys. Sužinokite daugiau apie ESP8266 naudojimą su „Arduino“ čia.
Tada mes sujungsime MQ135 jutiklį su „Arduino“. Prijunkite VCC ir jutiklio žemės kaištį prie „Arduino“ 5 V įtampos ir įžeminimą, o jutiklio analoginį kaištį - prie „Arduino“ A0.
Prijunkite garsinį signalą prie „Arduino“ 8 kaiščio, kuris pradės pypsėti, kai sąlyga išsipildys.
Galiausiai mes sujungsime LCD ekraną su „Arduino“. LCD jungtys yra tokios
- Prijunkite 1 kaištį (VEE) prie žemės.
- Prijunkite 2 kaištį (VDD arba VCC) prie 5 V.
- Prijunkite kaištį 3 (V0) prie 10K potenciometro vidurinio kaiščio, o kitus du potenciometro galus prijunkite prie VCC ir GND. Potenciometras naudojamas LCD ekrano kontrastui valdyti. Veiks ir kitų nei 10K verčių potenciometras.
- Prijunkite 4 kaištį (RS) prie „Arduino“ 12 kaiščio.
- Prijunkite 5 kaištį (skaitymas / rašymas) prie „Arduino“ žemės. Šis kaištis nėra dažnai naudojamas, todėl mes jį prijungsime prie žemės.
- Prijunkite kaištį 6 (E) prie „Arduino“ kaiščio 11. RS ir E kaiščiai yra valdymo kaiščiai, naudojami duomenims ir simboliams siųsti.
- Šie keturi kaiščiai yra duomenų kaiščiai, naudojami bendraujant su „Arduino“.
Prijunkite 11 kaištį (D4) prie 5 „Arduino“ kaiščio.
Prijunkite 12 kaištį (D5) prie 4 „Arduino“ kaiščio.
Prijunkite 13 kaištį (D6) prie 3 „Arduino“ kaiščio.
Prijunkite kaištį 14 (D7) prie 2 „Arduino“ kaiščio.
- Prijunkite kaištį 15 prie VCC per 220 omų rezistorių. Rezistorius bus naudojamas nustatyti galinio apšvietimo ryškumą. Didesnės vertės užpakalinę šviesą padarys daug tamsesnę.
- Prijunkite 16 kaištį prie žemės.
Darbinis paaiškinimas:
MQ135 jutiklis pajunta NH3, NOx, alkoholį, benzeną, dūmus, CO2 ir kai kurias kitas dujas, todėl yra puikus dujų jutiklis mūsų oro kokybės stebėjimo projektui. Kai prijungsime jį prie „Arduino“, jis pajus dujas ir gausime taršos lygį PPM (milijoninėmis dalimis). MQ135 dujų jutiklis pateikia išėjimą įtampos lygių forma, ir mes turime jį konvertuoti į PPM. Taigi, norint konvertuoti išvestį PPM, čia mes naudojome MQ135 jutiklio biblioteką, ji išsamiai paaiškinta toliau esančiame skyriuje „Kodo paaiškinimas“.
Jutiklis mums vertė 90, kai šalia jo nebuvo dujų, o saugus oro kokybės lygis yra 350 PPM ir jis neturėtų viršyti 1000 PPM. Kai jis viršija 1000 PPM ribą, jis pradeda sukelti galvos skausmą, mieguistumą ir sąstingį, pasenusį, tvankų orą ir, jei viršija 2000 PPM, tai gali sukelti širdies susitraukimų dažnį ir daugelį kitų ligų.
Kai vertė bus mažesnė nei 1000 PPM, tada LCD ekrane ir tinklalapyje bus rodoma „Fresh Air“. Kai vertė padidės 1000 PPM, garsinis signalas pradės pyptelėti, o skystųjų kristalų ekrane ir tinklalapyje bus rodoma „Prastas oras, atviri langai“. Jei jis padidės 2000 m., Garsinis signalas toliau pypsės, o LCD ekrane ir tinklalapyje bus rodoma „Pavojus! Perkelkite į gryną orą “.
Kodo paaiškinimas:
Prieš pradėdami koduoti šį projektą, pirmiausia turime sukalibruoti MQ135 dujų jutiklį. Yra daugybė skaičiavimų, konvertuojančių jutiklio išvestį į PPM vertę, mes jau atlikome šį skaičiavimą savo ankstesniame dūmų detektoriaus projekte. Bet čia mes naudojame biblioteką MQ135, galite atsisiųsti ir įdiegti šią MQ135 biblioteką iš čia:
Naudodamiesi šia biblioteka, galite tiesiogiai gauti PPM reikšmes, tiesiog naudodamiesi žemiau esančiomis dviem eilutėmis:
MQ135 dujų jutiklis = MQ135 (A0); plūduriuojanti oro kokybė = gasSensor.getPPM ();
Bet prieš tai turime sukalibruoti MQ135 jutiklį, kad kalibruotumėte jutiklį, įkelkite žemiau pateiktą kodą ir leiskite jam veikti 12–24 valandas, tada gausime RZERO reikšmę.
#include „MQ135.h“ negaliojanti sąranka () {Serial.begin (9600); } tuštuma kilpa () {MQ135 gasSensor = MQ135 (A0); // Pritvirtinkite jutiklį prie kaiščio A0 plūdės rzero = gasSensor.getRZero (); Serial.println (nulis); vėlavimas (1000); }
Gavę RZERO vertę. Įdėkite RZERO reikšmę į bibliotekos failą, kurį atsisiuntėte „MQ135.h“: #define RZERO 494.63
Dabar galime pradėti tikrąjį savo oro kokybės stebėjimo projekto kodą.
Kode pirmiausia apibrėžėme dujų jutiklio ir skystųjų kristalų bibliotekas ir kintamuosius. Naudodami programinės įrangos nuosekliąją biblioteką, mes galime padaryti bet kurį skaitmeninį kaištį kaip TX ir RX kaištį. Šiame kode mes padarėme kaištį 9 kaip RX kaištį ir kaištį 10 kaip TX kaištį ESP8266. Tada įtraukėme LCD biblioteką ir apibrėžėme tos pačios smeigtukus. Mes taip pat apibrėžėme dar du kintamuosius: vieną jutiklio analoginiam kaiščiui ir kitą oro_kvalifikacijos vertei saugoti.
# įtraukti
Tada mes paskelbsime kaištį 8 kaip išvesties kaištį ten, kur prijungėme garsinį signalą. Komanda l cd.begin (16,2) paleidžia LCD, kad gautų duomenis, tada mes nustatysime žymeklį į pirmąją eilutę ir atspausdinsime „circuitdigest“ . Tada mes nustatysime žymeklį antroje eilutėje ir atspausdinsime „Sensor Warming“ .
pinMode (8, OUTPUT); lcd.prade (16,2); lcd.setCursor (0,0); lcd.print („circuitdigest“); lcd.setCursor (0,1); lcd.print („Jutiklio atšilimas“); vėlavimas (1000);
Tada nustatysime nuosekliojo ryšio perdavimo greitį. Skirtingi ESP turi skirtingą duomenų perdavimo greitį, todėl parašykite jį pagal savo ESP perdavimo greitį. Tada mes išsiųsime komandas nustatyti ESP bendrauti su „Arduino“ ir rodyti IP adresą serijiniame monitoriuje.
Serijos pradžia (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 ();
Norėdami spausdinti išvestį tinklalapyje žiniatinklio naršyklėje, turėsime naudoti HTML programavimą. Taigi, mes sukūrėme eilutę pavadinimu tinklalapis ir jame išsaugojome išvestį. Iš išvesties atimame 48, nes funkcija read () grąžina ASCII dešimtainę vertę, o pirmasis dešimtainis skaičius, kuris yra 0, prasideda nuo 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {atidėjimas (1000); int connectionId = esp8266.read () - 48; Styginių tinklalapis = "
IOT oro taršos stebėjimo sistema
"; tinklalapis + =""; tinklalapis + =" oro kokybė yra "; tinklalapis + = oro kokybė; tinklalapis + =" PPM "; tinklalapis + ="
";
Šis kodas iškvies funkciją pavadinimu sendData ir išsiųs duomenų ir pranešimų eilutes į tinklalapį, kad būtų rodomas.
sendData (cipSend, 1000, DEBUG); sendData (tinklalapis, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = tinklalapis.length (); cipSend + = "\ r \ n";
Šis kodas išspausdins duomenis LCD. Mes taikėme įvairias oro kokybės patikrinimo sąlygas, o LCD spausdins pranešimus pagal sąlygas, o signalas pypsės, jei tarša viršys 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("oro kokybė yra"); lcd.print (oro kokybė); lcd.print ("PPM"); lcd.setCursor (0,1); if (oro kokybė <= 1000) {lcd.print ("Šviežias oras"); „digitalWrite“ (8, LOW);
Pagaliau ši funkcija išsiųs ir parodys duomenis tinklalapyje. Duomenys, kuriuos išsaugojome eilutėje pavadinimu „tinklalapis“, bus išsaugoti eilutėje pavadinimu „komanda“ . Tada ESP perskaitys simbolį po vieną iš „komandos“ ir atspausdins jį tinklalapyje.
String sendData (String komanda, const int skirtasis laikas, loginis derinimas) {String response = ""; esp8266.print (komanda); // nusiųskite perskaitytą simbolį į esp8266 ilgą int laiką = milis (); while ((laikas + skirtasis laikas)> milis ()) {while (esp8266.available ()) {// Esp turi duomenų, todėl parodykite savo išvestį serijiniame lange char c = esp8266.read (); // perskaitykite kitą simbolį. atsakas + = c; }} if (derinti) {Serial.print (atsakymas); } grąžinimo atsakymas; }
Testavimas ir projekto rezultatas:
Prieš įkeliant kodą, įsitikinkite, kad esate prisijungę prie ESP8266 įrenginio „Wi-Fi“. Įkėlę atidarykite nuoseklųjį monitorių ir jame bus rodomas IP adresas, kaip parodyta žemiau.
Įveskite šį IP adresą savo naršyklėje, jis parodys jums išvestį, kaip parodyta žemiau. Jei norite pamatyti dabartinę oro kokybės vertę PPM, turėsite dar kartą atnaujinti puslapį.
Mes sukonfigūravome vietinį serverį, kad pademonstruotume jo veikimą. Žemiau galite patikrinti vaizdo įrašą. Tačiau norėdami stebėti oro kokybę iš bet kurios pasaulio vietos, turite persiųsti 80 prievadą (naudojamą HTTP ar internetui) į savo įrenginio vietinį arba asmeninį IP adresą (192.168 *). Persiuntus uostą, visi gaunami ryšiai bus persiųsti šiuo vietiniu adresu ir galėsite atidaryti aukščiau rodomą tinklalapį tiesiog iš bet kur įvesdami viešą savo interneto IP adresą. Galite persiųsti uostą prisijungę prie savo maršrutizatoriaus (192.168.1.1) ir suraskite galimybę nustatyti uosto persiuntimą.