- Vaaditut komponentit:
- Piirikaavio ja selitys:
- Työselitys:
- Koodin selitys:
- "; verkkosivu + =" Ilmanlaatu on "; verkkosivu + = ilman_laatu; verkkosivu + =" PPM "; verkkosivu + ="
";
Seuraava koodi kutsuu funktiota nimeltä sendData ja lähettää data- ja viestijonot verkkosivulle näytettäväksi.
sendData (cipSend, 1000, DEBUG); sendData (verkkosivu, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = yhteysId; cipSend + = ","; cipSend + = verkkosivun pituus (); cipSend + = "\ r \ n";
Seuraava koodi tulostaa tiedot nestekidenäytölle. Olemme soveltaneet erilaisia ehtoja ilmanlaadun tarkistamiseksi, ja LCD tulostaa viestit olosuhteiden mukaan ja summeri antaa myös äänimerkin, jos saaste ylittää 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Ilman laatu on"); lcd.print (ilmanlaatu); lcd.print ("PPM"); lcd.setCursor (0,1); if (ilmanlaatu <= 1000) {lcd.print ("raikas ilma"); digitalWrite (8, LOW);
Lopuksi alla oleva toiminto lähettää ja näyttää tiedot verkkosivulla. Tiedot me tallennettu merkkijono nimeltään 'verkkosivu' tallennetaan merkkijono nimeltä 'komento' . ESP lukee sitten merkin yksitellen komentosta ja tulostaa sen verkkosivulle.
Merkkijono sendData (Merkkijono-komento, const int-aikakatkaisu, looginen virheenkorjaus) {String response = ""; esp8266.print (komento); // lähetä luettu merkki henkiin esp8266 pitkä int aika = millis (); while ((aika + aikakatkaisu)> millis ()) {while (esp8266.available ()) {// Esp: llä on tietoja, joten esitä ulostulonsa sarjaikkunaan char c = esp8266.read (); // lue seuraava merkki. vaste + = c; }} if (debug) {Serial.print (vastaus); } palautusvastaus; }
- Projektin testaus ja tulos:
Tässä projektissa aiomme tehdä IoT-pohjaisen ilman pilaantumisen seurantajärjestelmän, jossa seuraamme ilmanlaatua Internet-palvelimen kautta ja käynnistämme hälytyksen, kun ilmanlaatu laskee tietyn tason yli, mikä tarkoittaa, kun sitä on riittävästi ilmassa on haitallisia kaasuja, kuten CO2, savu, alkoholi, bentseeni ja NH3. Se näyttää ilmanlaadun PPM: ssä nestekidenäytössä ja verkkosivustolla, jotta voimme seurata sitä erittäin helposti.
Aikaisemmin olemme rakentaneet nestekaasuilmaisimen käyttämällä MQ6-anturia ja savunilmaisinta MQ2-anturia käyttäen, mutta tällä kertaa olemme käyttäneet MQ135-anturia ilmanlaadun tunnistimena, joka on paras valinta ilmanlaadun seurantaan, koska se pystyy havaitsemaan haitallisimmat kaasut ja voi mitata niiden määrän tarkasti. Tässä IOT-projektissa voit seurata saastetasoa mistä tahansa tietokoneellasi tai matkapuhelimellasi. Voimme asentaa tämän järjestelmän mihin tahansa ja voi myös laukaista jonkin laitteen, kun pilaantuminen ylittää jonkin tason, kuten voimme kytkeä pakopuhaltimen päälle tai lähettää hälytys SMS / postin käyttäjälle.
Vaaditut komponentit:
- MQ135-kaasuanturi
- Arduino Uno
- Wi-Fi-moduuli ESP8266
- 16X2 LCD
- Leipälauta
- 10K potentiometri
- 1K ohmin vastukset
- 220 ohmin vastus
- Summeri
Voit ostaa kaikki yllä olevat komponentit täältä.
Piirikaavio ja selitys:
Ensinnäkin yhdistämme ESP8266: n Arduinoon. ESP8266 toimii 3.3V: llä ja jos annat sille 5V Arduinosta, se ei toimi kunnolla ja se voi vahingoittua. Liitä VCC ja CH_PD Arduinon 3,3 V: n nastaan. ESP8266: n RX-nasta toimii 3.3V: llä, eikä se ole yhteydessä Arduinoon, kun liitämme sen suoraan Arduinoon. Joten meidän on tehtävä sille jännitteenjakaja, joka muuntaa 5 V: n 3,3 V: ksi. Tämä voidaan tehdä kytkemällä kolme vastusta sarjaan, kuten teimme piirissä. Liitä ESP8266: n TX-nasta Arduinon tapiin 10 ja esp8266: n RX-nasta Arduinon tapiin 9 vastusten kautta.
ESP8266 Wi-Fi -moduuli antaa projektillesi pääsyn Wi-Fi- tai Internet-yhteyteen. Se on erittäin halpa laite ja tekee projekteistasi erittäin tehokkaita. Se voi kommunikoida minkä tahansa mikrokontrollerin kanssa ja se on IOT-alustan johtavimmat laitteet. Lue lisää ESP8266: n käytöstä Arduinon kanssa täältä.
Sitten yhdistämme MQ135-anturin Arduinoon. Liitä VCC ja anturin maadoitustapa Arduinon 5 V: iin ja maahan ja anturin analoginen nasta Arduinon A0: een.
Liitä summeri Arduinon nastaan 8, joka alkaa piipata, kun ehto toteutuu.
Viimeiseksi yhdistämme LCD-näytön Arduinoon. Nestekidenäytön liitännät ovat seuraavat
- Liitä nasta 1 (VEE) maahan.
- Liitä nasta 2 (VDD tai VCC) 5V: een.
- Liitä tappi 3 (V0) 10K-potentiometrin keskitappiin ja kytke potentiometrin kaksi muuta päätä VCC: hen ja GND: hen. Potentiometriä käytetään LCD-näytön kontrastin säätämiseen. Myös muiden arvojen kuin 10K potentiometri toimii.
- Liitä nasta 4 (RS) Arduinon nastaa 12.
- Liitä nasta 5 (luku / kirjoitus) Arduinon maahan. Tätä tapia ei käytetä usein, joten liitämme sen maahan.
- Liitä nasta 6 (E) Arduinon nastaa 11. RS- ja E-nastat ovat ohjausnastat, joita käytetään tietojen ja merkkien lähettämiseen.
- Seuraavat neljä nastaa ovat datanastoja, joita käytetään kommunikoimaan Arduinon kanssa.
Liitä nasta 11 (D4) Arduinon nastaa 5.
Liitä nasta 12 (D5) Arduinon nastaa 4.
Liitä nasta 13 (D6) Arduinon nastaa 3.
Liitä nasta 14 (D7) Arduinon nastaa 2.
- Liitä nasta 15 VCC: hen 220 ohmin vastuksen kautta. Vastusta käytetään taustavalon kirkkauden asettamiseen. Suuremmat arvot tekevät taustavalosta paljon tummemman.
- Liitä tappi 16 maahan.
Työselitys:
MQ135-anturi tunnistaa NH3: n, NOx: n, alkoholin, bentseenin, savun, CO2: n ja joitain muita kaasuja, joten se on täydellinen kaasuanturi ilmanlaadun seurantaprojektiimme. Kun yhdistämme sen Arduinoon, se tunnistaa kaasut ja saamme saastumisasteen PPM: ssä (miljoonasosat). MQ135-kaasuanturi antaa lähdön jännitetasoina ja se on muunnettava PPM: ksi. Joten tässä muunnetaan lähtö PPM: ssä, tässä on käytetty kirjastoa MQ135-anturille, se on selitetty yksityiskohtaisesti alla olevassa "Koodin selitys" -osiossa.
Anturin antama arvo oli 90, kun sen lähellä ei ollut kaasua ja turvallinen ilmanlaadun taso on 350 PPM eikä sen tulisi ylittää 1000 PPM. Kun se ylittää 1000 PPM: n rajan, se alkaa aiheuttaa päänsärkyä, uneliaisuutta ja pysähtynyttä, vanhentunutta, tukkoista ilmaa ja jos se ylittää 2000 PPM: n, se voi aiheuttaa lisääntynyttä sykettä ja monia muita sairauksia.
Kun arvo on alle 1 000 PPM, nestekidenäytössä ja verkkosivulla näkyy ”Raikas ilma”. Aina kun arvo nousee 1000 PPM, summeri alkaa piippailla ja nestekidenäytössä ja verkkosivulla näkyy ”Huono ilma, avoin Windows”. Jos se nousee vuoteen 2000, summeri jatkaa äänimerkkiä ja nestekidenäytössä ja verkkosivulla näkyy ”Vaara! Siirry raittiiseen ilmaan ”.
Koodin selitys:
Ennen tämän projektin koodauksen aloittamista meidän on ensin kalibroitava MQ135-kaasuanturi. Anturin ulostulon muuntamiseksi PPM-arvoksi on paljon laskelmia, olemme tehneet tämän laskelman aiemmin edellisessä savuilmaisimen projektissamme. Mutta täällä käytämme kirjastoa MQ135: lle, voit ladata ja asentaa tämän MQ135-kirjaston täältä:
Tämän kirjaston avulla voit saada PPM-arvot suoraan käyttämällä kahta alla olevaa riviä:
MQ135 gasSensor = MQ135 (A0); kelluva ilmamäärä = gasSensor.getPPM ();
Mutta ennen sitä meidän on kalibroitava MQ135-anturi, anturin kalibroimiseksi lataa alla annettu koodi ja anna sen toimia 12-24 tuntia ja sitten saada RZERO- arvo.
#include "MQ135.h" mitätön asennus () {Serial.begin (9600); } tyhjä silmukka () {MQ135 gasSensor = MQ135 (A0); // Kiinnitä anturi tapiin A0 float rzero = gasSensor.getRZero (); Serial.println (nolla); viive (1000); }
Saatuaan RZERO- arvon. Lisää RZERO-arvo kirjastotiedostoon, jonka latasit "MQ135.h": #define RZERO 494.63
Nyt voimme aloittaa ilmanlaadun seurantaprojektimme varsinaisen koodin.
Koodissa on ensinnäkin määritelty kirjastot ja muuttujat kaasuanturille ja nestekidenäytölle. Ohjelmistosarjakirjastoa käyttämällä voimme tehdä minkä tahansa digitaalisen nastan TX- ja RX-nastoina. Tässä koodissa olemme tehneet nastan 9 RX-nastaksi ja nastan 10 TX-nastaksi ESP8266: lle. Sitten olemme sisällyttäneet LCD-kirjaston ja määritelleet nastat samalle. Olemme myös määrittäneet kaksi muuta muuttujaa: yhden anturin analogiselle nastalle ja toisen ilman_laatuarvolle .
#sisältää
Sitten julistetaan tappi 8 lähtötapiksi, johon olemme liittäneet summerin. l cd.begin (16,2) -komento käynnistää nestekidenäytön vastaanottamaan tietoja, ja sitten asetamme kohdistimen ensimmäiselle riville ja tulostamme 'piiri' . Sitten asetamme kohdistimen toiselle riville ja tulostamme 'Sensor Warming' .
pinMode (8, OUTPUT); lcd-alku (16,2); lcd.setCursor (0,0); lcd.print ("piirimuoto"); lcd.setCursor (0,1); lcd.print ("Anturin lämpeneminen"); viive (1000);
Sitten asetamme baudinopeuden sarjaliikenteelle. Eri ESP: llä on erilaiset siirtonopeudet, joten kirjoita se ESP: n siirtonopeuden mukaan. Sitten lähetämme komennot ESP: n asettamiseksi kommunikoimaan Arduinon kanssa ja näyttämään IP-osoitteen sarjavalvonnassa.
Sarjan alku (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 ();
Tulostettaessa tulos verkkosivulle verkkoselaimessa meidän on käytettävä HTML-ohjelmointia. Joten olemme luoneet merkkijonon nimeltä verkkosivu ja tallentaneet tuotoksen siihen. Vähennämme 48 lähdöstä, koska read () -funktio palauttaa ASCII-desimaaliarvon ja ensimmäinen desimaaliluku, joka on 0, alkaa 48: sta.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {viive (1000); int yhteysId = esp8266.luku () - 48; Merkkijono verkkosivu = "
IOT: n ilman pilaantumisen seurantajärjestelmä
"; verkkosivu + =""; verkkosivu + =" Ilmanlaatu on "; verkkosivu + = ilman_laatu; verkkosivu + =" PPM "; verkkosivu + ="
";
Seuraava koodi kutsuu funktiota nimeltä sendData ja lähettää data- ja viestijonot verkkosivulle näytettäväksi.
sendData (cipSend, 1000, DEBUG); sendData (verkkosivu, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = yhteysId; cipSend + = ","; cipSend + = verkkosivun pituus (); cipSend + = "\ r \ n";
Seuraava koodi tulostaa tiedot nestekidenäytölle. Olemme soveltaneet erilaisia ehtoja ilmanlaadun tarkistamiseksi, ja LCD tulostaa viestit olosuhteiden mukaan ja summeri antaa myös äänimerkin, jos saaste ylittää 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Ilman laatu on"); lcd.print (ilmanlaatu); lcd.print ("PPM"); lcd.setCursor (0,1); if (ilmanlaatu <= 1000) {lcd.print ("raikas ilma"); digitalWrite (8, LOW);
Lopuksi alla oleva toiminto lähettää ja näyttää tiedot verkkosivulla. Tiedot me tallennettu merkkijono nimeltään 'verkkosivu' tallennetaan merkkijono nimeltä 'komento' . ESP lukee sitten merkin yksitellen komentosta ja tulostaa sen verkkosivulle.
Merkkijono sendData (Merkkijono-komento, const int-aikakatkaisu, looginen virheenkorjaus) {String response = ""; esp8266.print (komento); // lähetä luettu merkki henkiin esp8266 pitkä int aika = millis (); while ((aika + aikakatkaisu)> millis ()) {while (esp8266.available ()) {// Esp: llä on tietoja, joten esitä ulostulonsa sarjaikkunaan char c = esp8266.read (); // lue seuraava merkki. vaste + = c; }} if (debug) {Serial.print (vastaus); } palautusvastaus; }
Projektin testaus ja tulos:
Varmista ennen koodin lataamista, että olet yhteydessä ESP8266-laitteen Wi-Fi-verkkoon. Lataamisen jälkeen avaa sarjavalvonta ja siinä näkyy IP-osoite kuten alla.
Kirjoita tämä IP-osoite selaimeesi, se näyttää tuloksen alla olevan kuvan mukaisesti. Sinun on päivitettävä sivu uudelleen, jos haluat nähdä nykyisen ilmanlaadun arvon PPM: ssä.
Olemme määrittäneet paikallisen palvelimen osoittamaan sen toimintaa. Voit tarkistaa alla olevan videon. Mutta ilmanlaadun seuraamiseksi mistä päin maailmaa tahansa, sinun on välitettävä portti 80 (jota käytetään HTTP: ssä tai Internetissä) laitteen paikalliselle tai yksityiselle IP-osoitteelle (192.168 *). Kun portti on edelleenlähetetty, kaikki saapuvat yhteydet ohjataan tähän paikalliseen osoitteeseen ja voit avata yllä olevan verkkosivun kirjoittamalla vain Internetin julkisen IP-osoitteen mistä tahansa. Voit välittää portin edelleen kirjautumalla reitittimeesi (192.168.1.1) ja etsimällä vaihtoehdon portin edelleenlähetyksen määrittämiseksi.