- Zahtevane komponente:
- Shema vezja in razlaga:
- Delovna razlaga:
- Razlaga kode:
- "; spletna stran + =" Kakovost zraka je "; spletna stran + = kakovost zraka_; spletna stran + =" PPM "; spletna stran + ="
";
Naslednja koda bo poklicala funkcijo z imenom sendData in poslala nize podatkov in sporočil na spletno stran za prikaz.
sendData (cipSend, 1000, DEBUG); sendData (spletna stran, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Naslednja koda bo natisnila podatke na LCD. Za preverjanje kakovosti zraka smo uporabili različne pogoje, LCD pa bo sporočila natisnil v skladu s pogoji, zvočni signal pa bo piskal tudi, če bo onesnaženje preseglo 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Kakovost zraka je"); lcd.print (kakovost_ zraka); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Na koncu bo spodnja funkcija poslala in prikazala podatke na spletni strani. Podatki, ki smo jih shranili v niz z imenom 'spletna stran', bodo shranjeni v niz z imenom 'ukaz' . ESP bo nato iz zapovedi prebral znak enega za drugim in ga natisnil na spletno stran.
Niz sendData (ukaz niza, const int timeout, logična odpravljanje napak) {String response = ""; esp8266.print (ukaz); // pošljemo prebrani znak na esp8266 long int time = millis (); while ((time + timeout)> milis ()) {while (esp8266.available ()) {// Esp ima podatke, zato prikaže svoj izhod v zaporednem oknu char c = esp8266.read (); // preberemo naslednji znak. odziv + = c; }} if (odpravljanje napak) {Serial.print (odgovor); } povratni odgovor; }
- Testiranje in izvedba projekta:
V tem projektu bomo izdelali sistem za spremljanje onesnaževanja zraka na osnovi interneta stvari, v katerem bomo spremljali kakovost zraka prek spletnega strežnika, ki uporablja internet, in sprožil alarm, ko bo kakovost zraka presegla določeno raven, kar pomeni, ko bo dovolj V zraku so prisotni škodljivi plini, kot so CO2, dim, alkohol, benzen in NH3. Kakovost zraka v PPM bo prikazana na LCD-prikazovalniku in na spletni strani, tako da ga bomo lahko zelo enostavno spremljali.
Prej smo zgradili detektor utekočinjenega naftnega plina z uporabo senzorja MQ6 in detektor dima z uporabo senzorja MQ2, tokrat pa smo uporabili senzor MQ135 kot senzor kakovosti zraka, ki je najboljša izbira za spremljanje kakovosti zraka, saj lahko zazna najbolj škodljive pline in lahko izmeri njihovo količino natančno. V tem projektu IOT lahko stopnjo onesnaženosti spremljate kjer koli s pomočjo računalnika ali mobilnega telefona. Ta sistem lahko namestimo kamor koli in lahko sprožimo tudi kakšno napravo, ko onesnaženje preseže določeno raven, na primer vklopimo ventilator izpušnih plinov ali uporabniku pošljemo opozorilna sporočila SMS / pošto.
Zahtevane komponente:
- MQ135 Senzor za plin
- Arduino Uno
- Wi-Fi modul ESP8266
- LCD 16X2
- Breadboard
- 10K potenciometer
- 1K ohmski upori
- 220 ohmski upor
- Zvočni signal
Vse zgoraj navedene komponente lahko kupite tukaj.
Shema vezja in razlaga:
Najprej bomo ESP8266 povezali z Arduinom. ESP8266 deluje na 3,3 V in če mu boste od Arduina dali 5 V, potem ne bo deloval pravilno in lahko bo poškodovan. Priključite VCC in CH_PD na 3,3V zatič Arduino. Zatič RX ESP8266 deluje na 3.3V in ne bo komuniciral z Arduinom, ko ga bomo povezali neposredno z Arduinom. Torej, zanj bomo morali narediti delilnik napetosti, ki bo 5V pretvoril v 3,3V. To lahko storite tako, da zaporedno povežete tri upore, kot smo to storili v vezju. TX zatič ESP8266 priključite na zatič 10 Arduina in RX zatič esp8266 na zatič 9 Arduina prek uporov.
ESP8266 Wi-Fi modul omogoča vašim projektom dostop do Wi-Fi ali interneta. To je zelo poceni naprava, zato so vaši projekti zelo zmogljivi. Komunicira lahko s katerim koli mikrokrmilnikom in je najbolj vodilna naprava na platformi IOT. Več o uporabi ESP8266 z Arduinom najdete tukaj.
Nato bomo senzor MQ135 povezali z Arduinom. VCC in ozemljitveni zatič senzorja priključite na 5 V in ozemljitev Arduina in analogni zatič senzorja na A0 Arduina.
Na zatič 8 Arduina priključite brenčalo, ki bo začelo piskati, ko bo stanje resnično.
Nazadnje bomo LCD povezali z Arduinom. Povezave LCD-ja so naslednje
- Priključite zatič 1 (VEE) na tla.
- Priključite zatič 2 (VDD ali VCC) na 5V.
- Priključite zatič 3 (V0) na srednji zatič 10K potenciometra, druga dva konca potenciometra pa v VCC in GND. Potenciometer se uporablja za nadzor kontrasta zaslona LCD-ja. Tudi potenciometer vrednosti, ki ni 10K, bo deloval.
- Priključite zatič 4 (RS) na zatič 12 Arduina.
- Povežite zatič 5 (branje / pisanje) z maso Arduino. Ta zatič se ne uporablja pogosto, zato ga bomo povezali s tlemi.
- Povežite zatič 6 (E) z zatičem 11 Arduina. Zatič RS in E sta krmilna zatiča, ki se uporabljata za pošiljanje podatkov in znakov.
- Naslednji štirje zatiči so podatkovni zatiči, ki se uporabljajo za komunikacijo z Arduinom.
Priključite zatič 11 (D4) na zatič 5 Arduina.
Priključite zatič 12 (D5) na zatič 4 Arduina.
Priključite zatič 13 (D6) na zatič 3 Arduina.
Povežite zatič 14 (D7) z zatičem 2 Arduina.
- Priključite zatič 15 na VCC prek 220 ohmskega upora. Upor bo uporabljen za nastavitev svetlosti zadnje svetlobe. Zaradi večjih vrednosti bo osvetlitev ozadja veliko temnejša.
- Priključite zatič 16 na maso.
Delovna razlaga:
Senzor MQ135 lahko zazna NH3, NOx, alkohol, benzen, dim, CO2 in nekatere druge pline, zato je popoln senzor plina za naš projekt spremljanja kakovosti zraka. Ko ga bomo povezali z Arduinom, bo zaznal pline in dosegel raven onesnaženosti v PPM (na milijon delov). Senzor za plin MQ135 daje izhod v obliki napetostnih nivojev in ga moramo pretvoriti v PPM. Torej, za pretvorbo izhoda v PPM smo tukaj uporabili knjižnico za senzor MQ135, kar je podrobno razloženo v spodnjem razdelku »Razlaga kode«.
Senzor nam je dal vrednost 90, ko v bližini ni bilo plina in je varna raven kakovosti zraka 350 PPM in ne sme presegati 1000 PPM. Ko preseže mejo 1000 ppm, se začne povzročiti glavobol, zaspanost in mirujoč, zastarel, zamašen zrak, če preseže 2000 ppm, pa lahko povzroči povečan srčni utrip in številne druge bolezni.
Ko bo vrednost manjša od 1000 PPM, se na LCD-prikazovalniku in spletni strani prikaže "Fresh Air". Kadar se bo vrednost povečala za 1000 PPM, bo zvočni signal začel piskati in na LCD-prikazovalniku in spletni strani se bo prikazalo sporočilo »Slab zrak, odprti sistem Windows«. Če se bo povečalo za 2000, bo zvočni signal še naprej piskal in na LCD-prikazovalniku in spletni strani se bo prikazalo »Nevarnost! Premaknite se na svež zrak ”.
Razlaga kode:
Pred začetkom kodiranja za ta projekt moramo najprej umeriti plinski senzor MQ135. Pri pretvorbi izhodne vrednosti senzorja v vrednost PPM je vključenih veliko izračunov, ta izračun smo opravili že v prejšnjem projektu detektorja dima. Toda tu uporabljamo knjižnico za MQ135, knjižnico MQ135 lahko prenesete in namestite od tukaj:
Z uporabo te knjižnice lahko neposredno pridobite vrednosti PPM, tako da uporabite spodnji dve vrstici:
Senzor plina MQ135 = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Pred tem pa moramo umeriti senzor MQ135, za umerjanje senzorja naložimo spodnjo kodo in pustimo, da deluje 12 do 24 ur, nato pa dobimo vrednost RZERO .
#include "MQ135.h" void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Pritrdite senzor na zatič A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); zamuda (1000); }
Po pridobitvi vrednosti RZERO . Vnesite vrednost RZERO v datoteko knjižnice, ki ste jo prenesli "MQ135.h": #define RZERO 494.63
Zdaj lahko začnemo z dejansko kodo za naš projekt spremljanja kakovosti zraka.
V kodi smo najprej opredelili knjižnice in spremenljivke za senzor za plin in LCD. Z uporabo programske serijske knjižnice lahko naredimo kateri koli digitalni pin kot TX in RX pin. V tej kodi smo Pin 9 naredili kot zatič RX in zatič 10 kot TX zatič za ESP8266. Nato smo vključili knjižnico za LCD in za isto definirali nožice. Določili smo tudi še dve spremenljivki: eno za analogni zatič senzorja in drugo za shranjevanje vrednosti air_quality .
#include
Nato bomo razglasil zatič 8 kot izhodni zatič, kamor smo priključili brenčalo. Ukaz l cd.begin (16,2) bo zagnal LCD, da bo prejemal podatke, nato bomo kurzor postavili v prvo vrstico in natisnili 'circuitdigest' . Nato nastavimo kurzor v drugo vrstico in natisnemo 'Ogrevanje senzorja' .
pinMode (8, IZHOD); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Ogrevanje senzorja"); zamuda (1000);
Nato bomo nastavili hitrost prenosa za serijsko komunikacijo. Različni ESP-ji imajo različne hitrosti prenosa, zato jih zapišite v skladu s hitrostjo prenosa vašega ESP-ja. Nato bomo poslali ukaze za nastavitev ESP za komunikacijo z Arduino in prikaz IP naslova na serijskem monitorju.
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 tiskanje izpisa na spletni strani v spletnem brskalniku bomo morali uporabiti programiranje HTML. Tako smo ustvarili niz z imenom spletna stran in v njem shranili izhodne podatke. Od izhoda odštejemo 48, ker funkcija read () vrne decimalno vrednost ASCII in prvo decimalno število, ki je 0, se začne pri 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; Niz spletne strani = "
Sistem za spremljanje onesnaževanja zraka IOT
"; spletna stran + =""; spletna stran + =" Kakovost zraka je "; spletna stran + = kakovost zraka_; spletna stran + =" PPM "; spletna stran + ="
";
Naslednja koda bo poklicala funkcijo z imenom sendData in poslala nize podatkov in sporočil na spletno stran za prikaz.
sendData (cipSend, 1000, DEBUG); sendData (spletna stran, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Naslednja koda bo natisnila podatke na LCD. Za preverjanje kakovosti zraka smo uporabili različne pogoje, LCD pa bo sporočila natisnil v skladu s pogoji, zvočni signal pa bo piskal tudi, če bo onesnaženje preseglo 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Kakovost zraka je"); lcd.print (kakovost_ zraka); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Na koncu bo spodnja funkcija poslala in prikazala podatke na spletni strani. Podatki, ki smo jih shranili v niz z imenom 'spletna stran', bodo shranjeni v niz z imenom 'ukaz' . ESP bo nato iz zapovedi prebral znak enega za drugim in ga natisnil na spletno stran.
Niz sendData (ukaz niza, const int timeout, logična odpravljanje napak) {String response = ""; esp8266.print (ukaz); // pošljemo prebrani znak na esp8266 long int time = millis (); while ((time + timeout)> milis ()) {while (esp8266.available ()) {// Esp ima podatke, zato prikaže svoj izhod v zaporednem oknu char c = esp8266.read (); // preberemo naslednji znak. odziv + = c; }} if (odpravljanje napak) {Serial.print (odgovor); } povratni odgovor; }
Testiranje in izvedba projekta:
Pred nalaganjem kode se prepričajte, da ste povezani v Wi-Fi naprave ESP8266. Po nalaganju odprite serijski monitor in prikazal se bo naslov IP, kot je prikazano spodaj.
Vnesite ta naslov IP v brskalnik, prikazal bo izhod, kot je prikazano spodaj. Če želite videti trenutno vrednost kakovosti zraka v PPM, boste morali stran znova osvežiti.
Nastavili smo lokalni strežnik, da dokažemo njegovo delovanje. Spodaj lahko preverite video. Če želite spremljati kakovost zraka od koder koli na svetu, morate vrata 80 (ki se uporabljajo za HTTP ali internet) posredovati na lokalni ali zasebni naslov IP (192.168 *) vaše naprave. Po posredovanju vrat bodo vse dohodne povezave posredovane na ta lokalni naslov in zgoraj prikazano spletno stran lahko odprete tako, da od koder koli vnesete javni IP naslov vašega interneta. Vrata lahko posredujete tako, da se prijavite v usmerjevalnik (192.168.1.1) in poiščete možnost nastavitve posredovanja vrat.