- Componenti richiesti:
- Schema del circuito e spiegazione:
- Spiegazione di lavoro:
- Spiegazione del codice:
- "; webpage + =" Air Quality is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
Il codice seguente chiamerà una funzione denominata sendData e invierà le stringhe di dati e messaggi alla pagina Web da mostrare.
sendData (cipSend, 1000, DEBUG); sendData (pagina web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Il codice seguente stamperà i dati sul display LCD. Abbiamo applicato varie condizioni per il controllo della qualità dell'aria e il display LCD stamperà i messaggi in base alle condizioni e il cicalino emetterà anche un segnale acustico se l'inquinamento supera i 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Infine la funzione sottostante invierà e mostrerà i dati sulla pagina web. I dati memorizzati nella stringa denominata "pagina web" verranno salvati nella stringa denominata "comando" . L'ESP leggerà quindi il carattere uno per uno dal "comando" e lo stamperà sulla pagina web.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (comando); // invia il carattere letto all'esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// L'esp ha dati quindi mostra il suo output nella finestra seriale char c = esp8266.read (); // legge il carattere successivo. risposta + = c; }} if (debug) {Serial.print (risposta); } risposta di ritorno; }
- Test e risultati del progetto:
In questo progetto realizzeremo un sistema di monitoraggio dell'inquinamento atmosferico basato sull'IoT in cui monitoreremo la qualità dell'aria su un server web utilizzando Internet e attiveremo un allarme quando la qualità dell'aria scende oltre un certo livello, ovvero quando ce ne sono quantità sufficienti nell'aria sono presenti gas nocivi come CO2, fumo, alcool, benzene e NH3. Mostrerà la qualità dell'aria in PPM sull'LCD e sulla pagina Web in modo che possiamo monitorarla molto facilmente.
In precedenza abbiamo costruito il rilevatore GPL utilizzando il sensore MQ6 e il rilevatore di fumo utilizzando il sensore MQ2, ma questa volta abbiamo utilizzato il sensore MQ135 come sensore di qualità dell'aria che è la scelta migliore per il monitoraggio della qualità dell'aria in quanto può rilevare i gas più nocivi e può misurarne la quantità con precisione. In questo progetto IOT, puoi monitorare il livello di inquinamento da qualsiasi luogo utilizzando il tuo computer o cellulare. Possiamo installare questo sistema ovunque e possiamo anche attivare alcuni dispositivi quando l'inquinamento supera un certo livello, ad esempio possiamo accendere la ventola di scarico o inviare SMS / e-mail di avviso all'utente.
Componenti richiesti:
- Sensore di gas MQ135
- Arduino Uno
- Modulo Wi-Fi ESP8266
- LCD 16X2
- Breadboard
- Potenziometro 10K
- Resistenze da 1K ohm
- Resistenza da 220 ohm
- Cicalino
Puoi acquistare tutti i componenti di cui sopra da qui.
Schema del circuito e spiegazione:
Prima di tutto collegheremo ESP8266 con Arduino. ESP8266 funziona a 3,3 V e se gli dai 5 V da Arduino non funzionerà correttamente e potrebbe subire danni. Collega il VCC e il CH_PD al pin 3.3V di Arduino. Il pin RX di ESP8266 funziona su 3.3V e non comunicherà con Arduino quando lo collegheremo direttamente ad Arduino. Quindi, dovremo creare un partitore di tensione che convertirà i 5V in 3,3V. Questo può essere fatto collegando tre resistori in serie come abbiamo fatto nel circuito. Collegare il pin TX di ESP8266 al pin 10 di Arduino e il pin RX di esp8266 al pin 9 di Arduino tramite le resistenze.
Il modulo Wi-Fi ESP8266 consente ai tuoi progetti di accedere a Wi-Fi o Internet. È un dispositivo molto economico e rende i tuoi progetti molto potenti. Può comunicare con qualsiasi microcontrollore ed è il dispositivo più all'avanguardia nella piattaforma IOT. Scopri di più sull'utilizzo di ESP8266 con Arduino qui.
Quindi collegheremo il sensore MQ135 con Arduino. Collega il VCC e il pin di terra del sensore al 5V e la massa di Arduino e il pin analogico del sensore all'A0 di Arduino.
Collega un buzzer al pin 8 di Arduino che inizierà a suonare quando la condizione si avvererà.
Infine, collegheremo LCD con Arduino. I collegamenti del display LCD sono i seguenti
- Collegare il pin 1 (VEE) a terra.
- Collegare il pin 2 (VDD o VCC) al 5V.
- Collegare il pin 3 (V0) al pin centrale del potenziometro 10K e collegare le altre due estremità del potenziometro a VCC e GND. Il potenziometro viene utilizzato per controllare il contrasto dello schermo dell'LCD. Anche il potenziometro di valori diversi da 10K funzionerà.
- Collega il pin 4 (RS) al pin 12 di Arduino.
- Collega il pin 5 (lettura / scrittura) alla massa di Arduino. Questo pin non viene utilizzato spesso, quindi lo collegheremo a terra.
- Collega il pin 6 (E) al pin 11 di Arduino. I pin RS ed E sono i pin di controllo utilizzati per inviare dati e caratteri.
- I seguenti quattro pin sono pin dati che vengono utilizzati per comunicare con Arduino.
Collega il pin 11 (D4) al pin 5 di Arduino.
Collega il pin 12 (D5) al pin 4 di Arduino.
Collega il pin 13 (D6) al pin 3 di Arduino.
Collega il pin 14 (D7) al pin 2 di Arduino.
- Collegare il pin 15 al VCC tramite la resistenza da 220 ohm. Il resistore verrà utilizzato per impostare la luminosità della retroilluminazione. Valori maggiori renderanno la retroilluminazione molto più scura.
- Collegare il pin 16 a massa.
Spiegazione di lavoro:
Il sensore MQ135 può rilevare NH3, NOx, alcol, benzene, fumo, CO2 e alcuni altri gas, quindi è un sensore di gas perfetto per il nostro progetto di monitoraggio della qualità dell'aria. Quando lo collegheremo ad Arduino, rileverà i gas e otterremo il livello di inquinamento in PPM (parti per milione). Il sensore di gas MQ135 fornisce l'uscita sotto forma di livelli di tensione e dobbiamo convertirlo in PPM. Quindi, per convertire l'output in PPM, qui abbiamo utilizzato una libreria per il sensore MQ135, spiegata in dettaglio nella sezione "Spiegazione del codice" di seguito.
Il sensore ci dava un valore di 90 quando non c'era gas nelle vicinanze e il livello di sicurezza della qualità dell'aria è 350 PPM e non dovrebbe superare i 1000 PPM. Quando supera il limite di 1000 PPM, inizia a causare mal di testa, sonnolenza e aria stagnante, viziata e soffocante e se supera oltre 2000 PPM può causare un aumento della frequenza cardiaca e molte altre malattie.
Quando il valore sarà inferiore a 1000 PPM, il display LCD e la pagina Web visualizzeranno "Aria fresca". Ogni volta che il valore aumenterà di 1000 PPM, il cicalino inizierà a emettere un segnale acustico e il display LCD e la pagina Web visualizzeranno "Poor Air, Open Windows". Se aumenterà di 2000, il cicalino continuerà a suonare e il display LCD e la pagina Web visualizzeranno "Pericolo! Spostati all'aria aperta ”.
Spiegazione del codice:
Prima di iniziare la codifica per questo progetto, dobbiamo prima calibrare il sensore di gas MQ135. Ci sono molti calcoli coinvolti nella conversione dell'output del sensore in valore PPM, abbiamo già fatto questo calcolo nel nostro precedente progetto di rilevatore di fumo. Ma qui stiamo usando la libreria per MQ135, puoi scaricare e installare questa libreria MQ135 da qui:
Usando questa libreria puoi ottenere direttamente i valori PPM, semplicemente usando le due righe seguenti:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Ma prima dobbiamo calibrare il sensore MQ135, per calibrare il sensore caricare il codice indicato di seguito e lasciarlo funzionare per 12-24 ore e quindi ottenere il valore RZERO .
#include "MQ135.h" void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Collega il sensore al pin A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); ritardo (1000); }
Dopo aver ottenuto il valore RZERO . Inserisci il valore RZERO nel file della libreria che hai scaricato "MQ135.h": #define RZERO 494.63
Ora possiamo iniziare il codice vero e proprio per il nostro progetto di monitoraggio della qualità dell'aria.
Nel codice abbiamo prima di tutto definito le librerie e le variabili per il sensore di gas e il display LCD. Utilizzando la Software Serial Library, possiamo creare qualsiasi pin digitale come pin TX e RX. In questo codice, abbiamo impostato il pin 9 come pin RX e il pin 10 come pin TX per ESP8266. Quindi abbiamo incluso la libreria per l'LCD e abbiamo definito i pin per lo stesso. Abbiamo anche definito altre due variabili: una per il pin analogico del sensore e l'altra per la memorizzazione del valore air_quality .
#includere
Quindi dichiareremo il pin 8 come il pin di uscita a cui abbiamo collegato il buzzer. l comando cd.begin (16,2) avvierà l'LCD per ricevere i dati, quindi imposteremo il cursore sulla prima riga e stamperà il 'circuitdigest' . Quindi posizioneremo il cursore sulla seconda riga e stamperemo 'Sensor Warming' .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensor Warming"); ritardo (1000);
Quindi imposteremo la velocità di trasmissione per la comunicazione seriale. Diversi ESP hanno velocità di trasmissione diverse, quindi scrivilo in base alla velocità di trasmissione del tuo ESP. Quindi invieremo i comandi per impostare l'ESP per comunicare con Arduino e mostrare l'indirizzo IP sul monitor seriale.
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 stampare l'output sulla pagina web nel browser web, dovremo utilizzare la programmazione HTML. Quindi, abbiamo creato una stringa denominata pagina web e memorizzato l'output in essa. Stiamo sottraendo 48 dall'output perché la funzione read () restituisce il valore decimale ASCII e il primo numero decimale che è 0 inizia da 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; String webpage = "
Sistema di monitoraggio dell'inquinamento atmosferico IOT
"; pagina web + =""; webpage + =" Air Quality is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
Il codice seguente chiamerà una funzione denominata sendData e invierà le stringhe di dati e messaggi alla pagina Web da mostrare.
sendData (cipSend, 1000, DEBUG); sendData (pagina web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Il codice seguente stamperà i dati sul display LCD. Abbiamo applicato varie condizioni per il controllo della qualità dell'aria e il display LCD stamperà i messaggi in base alle condizioni e il cicalino emetterà anche un segnale acustico se l'inquinamento supera i 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Infine la funzione sottostante invierà e mostrerà i dati sulla pagina web. I dati memorizzati nella stringa denominata "pagina web" verranno salvati nella stringa denominata "comando" . L'ESP leggerà quindi il carattere uno per uno dal "comando" e lo stamperà sulla pagina web.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (comando); // invia il carattere letto all'esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// L'esp ha dati quindi mostra il suo output nella finestra seriale char c = esp8266.read (); // legge il carattere successivo. risposta + = c; }} if (debug) {Serial.print (risposta); } risposta di ritorno; }
Test e risultati del progetto:
Prima di caricare il codice, assicurati di essere connesso al Wi-Fi del tuo dispositivo ESP8266. Dopo il caricamento, apri il monitor seriale e mostrerà l'indirizzo IP come mostrato di seguito.
Digita questo indirizzo IP nel tuo browser, ti mostrerà l'output come mostrato di seguito. Sarà necessario aggiornare nuovamente la pagina se si desidera visualizzare l'attuale valore della qualità dell'aria in PPM.
Abbiamo configurato un server locale per dimostrarne il funzionamento, puoi controllare il video qui sotto. Ma per monitorare la qualità dell'aria da qualsiasi parte del mondo, è necessario inoltrare la porta 80 (utilizzata per HTTP o Internet) al tuo indirizzo IP locale o privato (192.168 *) del tuo dispositivo. Dopo il port forwarding, tutte le connessioni in entrata verranno inoltrate a questo indirizzo locale e potrai aprire la pagina web mostrata sopra semplicemente inserendo l'indirizzo IP pubblico di Internet da qualsiasi luogo. Puoi inoltrare la porta accedendo al tuo router (192.168.1.1) e trovare l'opzione per impostare il port forwarding.