- Components necessaris:
- Diagrama del circuit i explicació:
- Explicació de treball:
- Explicació del codi:
- "; pàgina web + =" La qualitat de l'aire és "; pàgina web + = qualitat_aire; pàgina web + =" PPM "; pàgina web + ="
";
El següent codi cridarà una funció anomenada sendData i enviarà les cadenes de dades i missatges a la pàgina web per mostrar-les.
sendData (cipSend, 1000, DEBUG); sendData (pàgina web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipEnvia + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
El següent codi imprimirà les dades a la pantalla LCD. Hem aplicat diverses condicions per comprovar la qualitat de l'aire i la pantalla LCD imprimirà els missatges segons les condicions i el brunzidor també emetrà un so si la contaminació supera els 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("La qualitat de l'aire és"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Aire fresc"); digitalWrite (8, BAIX);
Finalment, la funció següent enviarà i mostrarà les dades a la pàgina web. Les dades que hem emmagatzemat en una cadena anomenada "pàgina web" es desaran en una cadena anomenada "ordre" . A continuació, l'ESP llegirà el caràcter un a un des de l' ordre i l'imprimirà a la pàgina web.
Cadena sendData (ordre de cadena, temps d'espera de const int, depuració booleana) {Resposta de cadena = ""; esp8266.print (ordre); // enviar el caràcter de lectura a l'esp8266 long int time = millis (); while ((temps + temps d'espera)> millis ()) {while (esp8266.available ()) {// L'esp té dades de manera que mostri la seva sortida a la finestra sèrie char c = esp8266.read (); // llegeix el següent personatge. resposta + = c; }} if (depuració) {Serial.print (resposta); } resposta de retorn; }
- Proves i sortida del projecte:
En aquest projecte farem un sistema de control de la contaminació atmosfèrica basat en IoT en el qual controlarem la qualitat de l’aire a través d’un servidor web mitjançant internet i activarem una alarma quan la qualitat de l’aire baixi d’un nivell determinat, és a dir, quan hi hagi quantitat suficient de gasos nocius a l’aire com CO2, fum, alcohol, benzè i NH3. Es mostrarà la qualitat de l’aire a PPM a la pantalla LCD i a la pàgina web, de manera que puguem controlar-la molt fàcilment.
Anteriorment hem construït el detector de GLP amb sensor MQ6 i el de fum amb sensor MQ2, però aquesta vegada hem utilitzat el sensor MQ135 com a sensor de qualitat de l’aire, que és la millor opció per controlar la qualitat de l’aire, ja que pot detectar la majoria dels gasos nocius i en pot mesurar la quantitat. amb precisió. En aquest projecte IOT, podeu controlar el nivell de contaminació des de qualsevol lloc mitjançant l’ordinador o el mòbil. Podem instal·lar aquest sistema a qualsevol lloc i també podem activar algun dispositiu quan la contaminació supera algun nivell, com ara que podem encendre el ventilador d’escapament o enviar missatges de correu electrònic o SMS d’alerta a l’usuari.
Components necessaris:
- Sensor de gas MQ135
- Arduino Uno
- Mòdul Wi-Fi ESP8266
- LCD de 16X2
- Taula de pa
- Potenciòmetre de 10K
- Resistències de 1 K ohm
- Resistència de 220 ohm
- Zumbador
Podeu comprar tots els components anteriors des d’aquí.
Diagrama del circuit i explicació:
Primer de tot connectarem l’ ESP8266 amb l’Arduino. L'ESP8266 funciona amb 3,3 V i, si li doneu 5 V des de l'Arduino, no funcionarà correctament i pot causar danys. Connecteu el VCC i el CH_PD al pin d'Arduino de 3,3 V. El pin RX de l'ESP8266 funciona en 3,3 V i no es comunicarà amb l'Arduino quan el connectem directament a l'Arduino. Per tant, haurem de fer un divisor de voltatge per convertir el 5V en 3,3V. Això es pot fer connectant tres resistències en sèrie com ho fèiem al circuit. Connecteu el pin TX de l’ESP8266 al pin 10 de l’Arduino i el pin RX de l’esp8266 al pin 9 d’Arduino mitjançant les resistències.
El mòdul Wi-Fi ESP8266 proporciona als vostres projectes accés a Wi-Fi o Internet. És un dispositiu molt barat i fa que els vostres projectes siguin molt potents. Pot comunicar-se amb qualsevol microcontrolador i és el dispositiu més important de la plataforma IOT. Obteniu més informació sobre l’ús d’ESP8266 amb Arduino aquí.
Després connectarem el sensor MQ135 amb l’Arduino. Connecteu el VCC i el pin de terra del sensor a 5V i la terra de l'Arduino i el pin Analog del sensor a l'A0 de l'Arduino.
Connecteu un timbre al pin 8 de l'Arduino que començarà a sonar quan la condició es compleixi.
Per últim, connectarem LCD amb l’Arduino. Les connexions de la pantalla LCD són les següents
- Connecteu el pin 1 (VEE) a terra.
- Connecteu el pin 2 (VDD o VCC) al 5V.
- Connecteu el pin 3 (V0) al pin central del potenciòmetre 10K i connecteu els altres dos extrems del potenciòmetre al VCC i al GND. El potenciòmetre s’utilitza per controlar el contrast de pantalla de la pantalla LCD. També funcionarà un potenciòmetre de valors diferents de 10K.
- Connecteu el pin 4 (RS) al pin 12 de l'Arduino.
- Connecteu el pin 5 (lectura / escriptura) a la terra d'Arduino. Aquest pin no s’utilitza sovint, de manera que el connectarem a terra.
- Connecteu el pin 6 (E) al pin 11 de l'Arduino. Els pins RS i E són els pins de control que s’utilitzen per enviar dades i caràcters.
- Els quatre pins següents són pins de dades que s’utilitzen per comunicar-se amb l’Arduino.
Connecteu el pin 11 (D4) al pin 5 d'Arduino.
Connecteu el pin 12 (D5) al pin 4 d'Arduino.
Connecteu el pin 13 (D6) al pin 3 d'Arduino.
Connecteu el pin 14 (D7) al pin 2 d'Arduino.
- Connecteu el pin 15 al VCC mitjançant la resistència de 220 ohm. La resistència s'utilitzarà per configurar la brillantor de la llum de fons. Els valors més grans faran que la llum del darrere sigui molt més fosca.
- Connecteu el pin 16 a terra.

Explicació de treball:
El sensor MQ135 pot detectar NH3, NOx, alcohol, benzè, fum, CO2 i alguns altres gasos, de manera que és un sensor de gas perfecte per al nostre projecte de control de qualitat de l’aire. Quan el connectem a Arduino, detectarà els gasos i obtindrem el nivell de contaminació en PPM (parts per milió). El sensor de gas MQ135 proporciona la sortida en forma de nivells de tensió i hem de convertir-lo en PPM. Així doncs, per convertir la sortida en PPM, aquí hem utilitzat una biblioteca per al sensor MQ135; s’explica amb detall a la secció “Explicació del codi” següent.
El sensor ens donava un valor de 90 quan no hi havia gas a prop i el nivell segur de qualitat de l’aire és de 350 PPM i no hauria de superar els 1000 PPM. Quan supera el límit de 1.000 PPM, comença a causar mals de cap, somnolència i aire estancat, ranci i tapat i, si supera els 2000 PPM, pot provocar un augment de la freqüència cardíaca i moltes altres malalties.
Quan el valor sigui inferior a 1000 PPM, la pantalla LCD i la pàgina web mostraran "Aire fresc". Sempre que el valor augmenti 1.000 PPM, el brunzidor començarà a sonar i la pantalla LCD i la pàgina web mostraran "Poor Air, Open Windows". Si augmentarà 2000, el brunzidor continuarà sonant i la pantalla LCD i la pàgina web mostraran "Perill!" Passa a l’aire fresc ”.
Explicació del codi:
Abans de començar la codificació d’aquest projecte, primer cal calibrar el sensor de gas MQ135. Hi ha molts càlculs relacionats amb la conversió de la sortida del sensor en valor PPM, ja ho hem fet abans en el nostre anterior projecte de Detector de fum. Però aquí estem utilitzant la biblioteca per a MQ135, podeu descarregar i instal·lar aquesta biblioteca MQ135 des d’aquí:
Mitjançant aquesta biblioteca podeu obtenir directament els valors PPM, només utilitzant les dues línies següents:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Abans d’això, cal calibrar el sensor MQ135, per calibrar el sensor, pengeu el codi indicat a continuació i deixeu-lo funcionar de 12 a 24 hores i obteniu el valor RZERO .
#include setup "MQ135.h" void () {Serial.begin (9600); } bucle buit () {MQ135 gasSensor = MQ135 (A0); // Connecteu el sensor al pin A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); retard (1000); }
Després d'obtenir el valor RZERO . Introduïu el valor RZERO al fitxer de la biblioteca que heu descarregat "MQ135.h": #define RZERO 494.63
Ara podem començar el codi real del nostre projecte de control de qualitat de l'aire.
En el codi, en primer lloc hem definit les biblioteques i les variables per al sensor de gas i la pantalla LCD. Mitjançant l’ús de la Biblioteca en sèrie de programari, podem fer qualsevol pin digital com a pin TX i RX. En aquest codi, hem creat el pin 9 com a pin RX i el pin 10 com a pin TX per a l’ESP8266. A continuació, hem inclòs la biblioteca per a la pantalla LCD i hem definit els pins per a la mateixa. També hem definit dues variables més: una per al pin analògic del sensor i una altra per emmagatzemar el valor air_quality .
#incloure
A continuació, declararem el pin 8 com el pin de sortida on hem connectat el brunzidor. l ordre cd.begin (16,2) iniciarà la pantalla LCD per rebre dades i, a continuació, configurarem el cursor a primera línia i imprimirem el "circuitdigest" . A continuació, establirem el cursor a la segona línia i imprimirem "Escalfament del sensor" .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Escalfament del sensor"); retard (1000);
A continuació, establirem la velocitat en bauds per a la comunicació serial. Els diferents ESP tenen velocitats de transmissió diferents, així que escriviu-lo segons la velocitat de transmissió de la vostra ESP. A continuació, enviarem les ordres per configurar l’ESP per comunicar-se amb l’Arduino i mostrarem l’adreça IP al monitor sèrie.
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 ();
Per imprimir la sortida a la pàgina web al navegador web, haurem d’utilitzar la programació HTML. Per tant, hem creat una cadena anomenada pàgina web i hi hem emmagatzemat la sortida. Restem 48 de la sortida perquè la funció read () retorna el valor decimal ASCII i el primer número decimal que és 0 comença a 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD")) {delay (1000); int connectionId = esp8266.read () - 48; Pàgina web de cadena = "
Sistema de control de la contaminació atmosfèrica IOT
"; pàgina web + =""; pàgina web + =" La qualitat de l'aire és "; pàgina web + = qualitat_aire; pàgina web + =" PPM "; pàgina web + ="
";
El següent codi cridarà una funció anomenada sendData i enviarà les cadenes de dades i missatges a la pàgina web per mostrar-les.
sendData (cipSend, 1000, DEBUG); sendData (pàgina web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipEnvia + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
El següent codi imprimirà les dades a la pantalla LCD. Hem aplicat diverses condicions per comprovar la qualitat de l'aire i la pantalla LCD imprimirà els missatges segons les condicions i el brunzidor també emetrà un so si la contaminació supera els 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("La qualitat de l'aire és"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Aire fresc"); digitalWrite (8, BAIX);
Finalment, la funció següent enviarà i mostrarà les dades a la pàgina web. Les dades que hem emmagatzemat en una cadena anomenada "pàgina web" es desaran en una cadena anomenada "ordre" . A continuació, l'ESP llegirà el caràcter un a un des de l' ordre i l'imprimirà a la pàgina web.
Cadena sendData (ordre de cadena, temps d'espera de const int, depuració booleana) {Resposta de cadena = ""; esp8266.print (ordre); // enviar el caràcter de lectura a l'esp8266 long int time = millis (); while ((temps + temps d'espera)> millis ()) {while (esp8266.available ()) {// L'esp té dades de manera que mostri la seva sortida a la finestra sèrie char c = esp8266.read (); // llegeix el següent personatge. resposta + = c; }} if (depuració) {Serial.print (resposta); } resposta de retorn; }
Proves i sortida del projecte:
Abans de penjar el codi, assegureu-vos que esteu connectat a la Wi-Fi del vostre dispositiu ESP8266. Després de carregar-lo, obriu el monitor sèrie i mostrarà l'adreça IP com es mostra a continuació.

Escriviu aquesta adreça IP al navegador, us mostrarà la sortida tal com es mostra a continuació. Haureu d’actualitzar la pàgina de nou si voleu veure el valor actual de la qualitat de l’aire a PPM.

Hem configurat un servidor local per demostrar el seu funcionament. Podeu consultar el vídeo següent. Però per controlar la qualitat de l’aire des de qualsevol part del món, heu de reenviar el port 80 (utilitzat per a HTTP o Internet) a la vostra adreça IP local o privada (192.168 *) del vostre dispositiu. Després del reenviament de ports, totes les connexions entrants es reenviaran a aquesta adreça local i podreu obrir la pàgina web que es mostra a sobre només introduint l'adreça IP pública de la vostra Internet des de qualsevol lloc. Podeu reenviar el port iniciant la sessió al router (192.168.1.1) i trobar l’opció per configurar el reenviament de ports.
