- Componenti richiesti
- Nova PM Sensor SDS011 per la misurazione di PM2.5 e PM10
- Nozioni di base del modulo display OLED da 0,96 pollici
- Preparazione del sensore MQ-7 per misurare il monossido di carbonio (CO)
- Calcolo dell'indice di qualità dell'aria
- Schema elettrico
- Costruzione del circuito del sistema di monitoraggio della qualità dell'aria sulla scheda Perf
- Configurazione IO di Adafruit
- Spiegazione del codice per
- Involucro stampato in 3D per sistema di monitoraggio AQI
- Testare il sistema di monitoraggio AQI
Con l'arrivo dell'inverno, l'aria che incombe su di noi si addensa con il fumo e le emissioni gassose dei campi in fiamme, delle fabbriche industriali e del traffico veicolare, bloccando il sole e rendendo difficile la respirazione. Gli esperti dicono che gli alti livelli di inquinamento atmosferico e la pandemia di COVID-19 possono essere un mix pericoloso che può avere gravi conseguenze. La necessità di un monitoraggio in tempo reale della qualità dell'aria è molto evidente.
Quindi, in questo progetto, costruiremo un sistema di monitoraggio della qualità dell'aria ESP32 utilizzando il sensore Nova PM SDS011, il sensore MQ-7 e il sensore DHT11. Utilizzeremo anche un modulo display OLED per visualizzare i valori di qualità dell'aria. L' indice di qualità dell'aria (AQI) in India si basa su otto inquinanti, PM10, PM2,5, SO2 e NO2, CO, ozono, NH3 e Pb. Tuttavia, non è necessario misurare tutti gli inquinanti. Quindi misureremo la concentrazione di PM2,5, PM10 e monossido di carbonio per calcolare l'indice di qualità dell'aria. I valori AQI verranno pubblicati su Adafruit IO in modo che possiamo monitorarli da qualsiasi luogo. In precedenza abbiamo anche misurato la concentrazione di gas GPL, Fumo e Ammoniaca utilizzando Arduino.
Componenti richiesti
- ESP32
- Sensore PM Nova SDS011
- Modulo display OLED SPI da 0,96 '
- Sensore DHT11
- Sensore MQ-7
- Cavi per ponticelli
Nova PM Sensor SDS011 per la misurazione di PM2.5 e PM10
Il sensore SDS011 è un sensore di qualità dell'aria molto recente sviluppato da Nova Fitness. Funziona in base al principio della diffusione laser e può ottenere una concentrazione di particelle tra 0,3 e 10 μm nell'aria. Questo sensore è costituito da una piccola ventola, una valvola di ingresso dell'aria, un diodo laser e un fotodiodo. L'aria entra attraverso la presa d'aria dove una sorgente luminosa (Laser) illumina le particelle e la luce diffusa viene trasformata in segnale da un fotorilevatore. Questi segnali vengono quindi amplificati ed elaborati per ottenere la concentrazione di particelle di PM2,5 e PM10. In precedenza abbiamo utilizzato Nova PM Sensor con Arduino per calcolare la concentrazione di PM10 e PM2,5.
Specifiche del sensore SDS011:
- Uscita: PM2.5, PM10
- Intervallo di misurazione: 0,0-999,9 μg / m3
- Tensione di ingresso: da 4,7 V a 5,3 V.
- Corrente massima: 100 mA
- Corrente di sonno: 2 mA
- Tempo di risposta: 1 secondo
- Frequenza di uscita dati seriali: 1 volta / secondo
- Risoluzione del diametro delle particelle: ≤0.3μm
- Errore relativo: 10%
- Intervallo di temperatura: -20 ~ 50 ° C
Nozioni di base del modulo display OLED da 0,96 pollici
OLED (Organic Light Emitting Diode) è un tipo di diodo a emissione di luce realizzato utilizzando composti organici che eccitano quando la corrente elettrica può fluire attraverso di essi. Questi composti organici hanno la loro luce quindi non richiedono alcun circuito di retroilluminazione come i normali LCD. Per questo motivo, la tecnologia di visualizzazione OLED è efficiente dal punto di vista energetico e ampiamente utilizzata nei televisori e in altri prodotti di visualizzazione.
Sul mercato sono disponibili vari tipi di OLED in base al colore del display, al numero di pin, alle dimensioni e al controller IC. In questo tutorial, utilizzeremo il modulo OLED Monochrome Blue a 7 pin SSD1306 da 0,96 pollici che è largo 128 pixel e lungo 64 pixel. Questo OLED a 7 pin supporta il protocollo SPI e il controller IC SSD1306 aiuta l'OLED a visualizzare i caratteri ricevuti. Ulteriori informazioni su OLED e il suo interfacciamento con diversi microcontrollori seguendo il link.
Preparazione del sensore MQ-7 per misurare il monossido di carbonio (CO)
Il modulo sensore di gas monossido di carbonio MQ-7 CO rileva le concentrazioni di CO nell'aria. Il sensore può misurare concentrazioni da 10 a 10.000 ppm. Il sensore MQ-7 può essere acquistato come modulo o solo come sensore da solo. In precedenza abbiamo utilizzato molti tipi diversi di sensori di gas per rilevare e misurare vari gas, puoi anche verificarli se sei interessato. In questo progetto, stiamo utilizzando il modulo sensore MQ-7 per misurare la concentrazione di monossido di carbonio in PPM. Di seguito è riportato lo schema del circuito per la scheda MQ-7:
Il resistore di carico RL svolge un ruolo molto importante nel far funzionare il sensore. Questo resistore cambia il suo valore di resistenza in base alla concentrazione di gas. La scheda sensore MQ-7 viene fornita con una resistenza di carico di 1KΩ che è inutile e influisce sulle letture del sensore. Quindi, per misurare i valori di concentrazione di CO appropriati, è necessario sostituire il resistore da 1KΩ con un resistore da 10KΩ.
Calcolo dell'indice di qualità dell'aria
L'AQI in India è calcolato sulla base della concentrazione media di un particolare inquinante misurata su un intervallo di tempo standard (24 ore per la maggior parte degli inquinanti, 8 ore per monossido di carbonio e ozono). Ad esempio, l'AQI per PM2,5 e PM10 si basa sulla concentrazione media nelle 24 ore e l'AQI per il monossido di carbonio si basa sulla concentrazione media su 8 ore). I calcoli AQI includono gli otto inquinanti che sono PM10, PM2,5, biossido di azoto (NO 2), anidride solforosa (SO 2), monossido di carbonio (CO), ozono troposferico (O 3), ammoniaca (NH 3), e piombo (Pb). Tuttavia, tutti gli inquinanti non vengono misurati in ogni luogo.
Sulla base delle concentrazioni ambientali misurate nelle 24 ore di un inquinante, viene calcolato un sottoindice, che è una funzione lineare della concentrazione (ad esempio il sottoindice per PM2,5 sarà 51 alla concentrazione 31 µg / m3, 100 alla concentrazione 60 µg / m3 e 75 a una concentrazione di 45 µg / m3). Il peggior sottoindice (o il massimo di tutti i parametri) determina l'AQI complessivo.
Schema elettrico
Lo schema del circuito per il sistema di monitoraggio della qualità dell'aria basato su IoT è molto semplice e viene fornito di seguito:
Il sensore SDS011, DHT11 e il sensore MQ-7 sono alimentati con + 5V mentre il modulo display OLED è alimentato con 3,3V. I pin del trasmettitore e del ricevitore di SDS011 sono collegati a GPIO16 e 17 di ESP32. Il pin di uscita analogica del sensore MQ-7 è collegato a GPIO 25 e il pin di dati del sensore DHT11 è collegato al sensore GPIO27. Poiché il modulo display OLED utilizza la comunicazione SPI, abbiamo stabilito una comunicazione SPI tra il modulo OLED e ESP32. I collegamenti sono mostrati nella tabella seguente:
S.No |
Pin del modulo OLED |
Pin ESP32 |
1 |
GND |
Terra |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
Perno SDS011 |
Pin ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
Pin DHT |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Dati |
27 |
S.No |
Pin MQ-7 |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Costruzione del circuito del sistema di monitoraggio della qualità dell'aria sulla scheda Perf
Come puoi vedere dall'immagine principale, l'idea era di utilizzare questo circuito all'interno di un involucro stampato in 3D. Quindi il circuito completo mostrato sopra è saldato su una scheda perf. Assicurati di utilizzare cavi per lasciare una distanza sufficiente per montare l'OLED e i sensori. La mia scheda perf saldata a OLED e il modulo sensore è mostrato sotto.
Configurazione IO di Adafruit
Adafruit IO è una piattaforma dati aperta che ti consente di aggregare, visualizzare e analizzare dati in tempo reale sul cloud. Utilizzando Adafruit IO, puoi caricare, visualizzare e monitorare i tuoi dati su Internet e abilitare l'IoT del tuo progetto. Puoi controllare i motori, leggere i dati dei sensori e creare fantastiche applicazioni IoT su Internet utilizzando Adafruit IO.
Per utilizzare Adafruit IO, crea prima un account su Adafruit IO. Per fare ciò, vai al sito Web di Adafruit IO e fai clic su "Inizia gratuitamente" in alto a destra dello schermo.
Dopo aver terminato il processo di creazione dell'account, accedi all'account e fai clic su "Visualizza chiave AIO" nell'angolo in alto a destra per ottenere il nome utente dell'account e la chiave AIO.
Quando fai clic su "Chiave AIO", verrà visualizzata una finestra con la chiave AIO IO e il nome utente di Adafruit. Copia questa chiave e il nome utente, verranno utilizzati nel codice.
Ora, dopo aver ottenuto i tasti AIO, crea un feed per memorizzare i dati del sensore DHT. Per creare un feed, fare clic su "Feed". Quindi fare clic su "Azioni", quindi selezionare "Crea un nuovo feed" dalle opzioni disponibili.
Successivamente, si aprirà una nuova finestra in cui è necessario inserire il Nome e la Descrizione del feed. La scrittura di una descrizione è facoltativa.
Fare clic su "Crea" dopo questo; verrai reindirizzato al feed appena creato.
Per questo progetto, abbiamo creato un totale di sei feed per i valori PM10, PM2,5, CO, temperatura, umidità e AQI. Segui la stessa procedura di cui sopra per creare il resto dei feed.
Dopo aver creato i feed, ora creeremo una funzione dashboard IO di Adafruit per visualizzare i dati del sensore su una singola pagina. Per questo, prima crea una dashboard e poi aggiungi tutti questi feed in quella dashboard.
Per creare un dashboard, fare clic sull'opzione Dashboard, quindi fare clic su "Azione" e quindi fare clic su "Crea un nuovo dashboard".
Nella finestra successiva, inserisci il nome della dashboard e fai clic su "Crea".
Quando il dashboard viene creato, ora utilizzeremo i blocchi IO di Adafruit come Gauge e Slider per visualizzare i dati. Per aggiungere un blocco, fare clic sul "+" nell'angolo in alto a destra.
Quindi seleziona il blocco "Indicatore".
Nella finestra successiva, seleziona i dati del feed che desideri visualizzare.
Nel passaggio finale, modifica le impostazioni del blocco per personalizzarlo.
Ora segui la stessa procedura di cui sopra per aggiungere blocchi di visualizzazione per il resto dei feed. La mia dashboard IO Adafruit aveva questo aspetto:
Spiegazione del codice per
Il codice completo per questo progetto è fornito alla fine del documento. Qui stiamo spiegando alcune parti importanti del codice.
Il codice utilizza i SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, e DHT.h librerie. Le librerie SDS011, Adafruit_GFX e Adafruit_SSD1306 possono essere scaricate da Library Manager nell'IDE di Arduino e installate da lì. Per questo, apri l'IDE di Arduino e vai a Sketch <Include Library <Manage Libraries . Ora cerca SDS011 e installa la libreria SDS Sensor di R. Zschiegner.
Allo stesso modo, installa le librerie Adafruit GFX e Adafruit SSD1306 di Adafruit. Adafruit_MQTT.he DHT11.h possono essere scaricati dai collegamenti forniti.
Dopo aver installato le librerie sull'IDE di Arduino, avvia il codice includendo i file delle librerie necessari.
#includere
Nelle righe successive, definire la larghezza e l'altezza del display OLED. In questo progetto, ho utilizzato un display OLED SPI 128 × 64. È possibile modificare lo SCREEN_WIDTH , e SCREEN_HEIGHT variabili in base al vostro display.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Quindi definire i pin di comunicazione SPI a cui è collegato il display OLED.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Quindi, crea un'istanza per il display Adafruit con la larghezza e l'altezza e il protocollo di comunicazione SPI definito in precedenza.
Display Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Quindi includi le credenziali WiFi e Adafruit IO che hai copiato dal server Adafruit IO. Questi includeranno il server MQTT, il numero di porta, il nome utente e la chiave AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Quindi impostare i feed IO di Adafruit per memorizzare i dati del sensore. Nel mio caso, ho definito sei feed per memorizzare diversi dati del sensore, vale a dire: AirQuality, Temperature, Humidity, PM10, PM25 e CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Ora all'interno della funzione setup () , inizializza il monitor seriale a una velocità di trasmissione di 9600 per scopi di debug. Inizializza anche il display OLED, il sensore DHT e il sensore SDS011 con la funzione begin () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Il ciclo for all'interno della funzione di configurazione viene utilizzato per raccogliere i valori fino a un numero definito e quindi impostare il contatore a zero.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Lettura dei valori del sensore:
Ora all'interno della funzione loop, usa il metodo millis () per leggere i valori del sensore ogni ora. Ciascun sensore di gas emette un valore analogico compreso tra 0 e 4095. Per convertire questo valore in tensione, utilizzare la seguente equazione: RvRo = MQ7Raw * (3.3 / 4095); dove MQ7Raw è il valore analogico dal pin analogico del sensore. Inoltre, leggere le letture PM2.5 e PM10 dal sensore SDS011.
if ((unsigned long) (currentMillis - previousMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); errore = my_sds.read (& p25, & p10); if (! errore) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Conversione dei valori:
I valori di PM2,5 e PM10 sono già in µg / m 3 ma è necessario convertire i valori di monossido di carbonio da PPM a mg / m 3. La formula di conversione è fornita di seguito:
Concentrazione (mg / m 3) = Concentrazione (PPM) × (Massa molecolare (g / mol) / Volume molare (L))
Dove: la massa molecolare di CO è 28,06 g / mol e il volume molare è 24,45 l a 25 ° C
Concentrazione INmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Calcolo della media su 24 ore:
Quindi, nelle righe successive, calcolare la media di 24 ore per PM10, la lettura di PM2,5 e la media di 8 ore per le letture di monossido di carbonio. Nella prima riga di codice, prendi il totale corrente e sottrai il primo elemento nell'array, ora salvalo come nuovo totale. Inizialmente, sarà Zero. Quindi ottenere i valori del sensore e aggiungere la lettura corrente al totale e aumentare l'indice del numero. Se il valore dell'indice è uguale o maggiore di numReadings, reimposta l'indice su zero.
totalPM10 = totalPM10 - letturePM10; letturePM10 = p10; totalPM10 = totalPM10 + letturePM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Infine, pubblica questi valori su Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Humidity.publish (umidità)) {delay (30000); ………………………………………………………. ……………………………………………………….
Involucro stampato in 3D per sistema di monitoraggio AQI
Successivamente, ho misurato le dimensioni della configurazione usando il mio nonio e ho anche misurato le dimensioni dei sensori e dell'OLED per progettare un involucro. Il mio design era simile a questo qui sotto, una volta fatto.
Dopo essere stato soddisfatto del progetto, l'ho esportato come file STL, l'ho tagliato in base alle impostazioni della stampante e infine l'ho stampato. Anche in questo caso il file STL è disponibile per il download da Thingiverse e puoi stampare il tuo involucro usandolo.
Terminata la stampa, ho proceduto con l'assemblaggio del progetto allestito in un recinto permanente per installarlo in una struttura. Dopo aver effettuato il collegamento completo, ho assemblato il circuito nel mio involucro e tutto era a posto, come puoi vedere qui.
Testare il sistema di monitoraggio AQI
Una volta che l'hardware e il codice sono pronti, è il momento di testare il dispositivo. Abbiamo utilizzato un adattatore esterno 12V 1A per alimentare il dispositivo. Come puoi vedere, il dispositivo visualizzerà la concentrazione di PM10, PM2,5 e monossido di carbonio sul display OLED. La concentrazione di PM2.5 e PM10 è in µg / m 3 mentre la concentrazione di Monossido di Carbonio è in mg / m 3.
Queste letture verranno pubblicate anche su Adafruit IO Dashboard. Il massimo di tutti i parametri (PM10, PM2.5 e CO) sarà l'AQI.
I valori AQI degli ultimi 30 giorni verranno visualizzati sotto forma di grafico.
In questo modo è possibile utilizzare i sensori SDS011 e MQ-7 per calcolare l'indice di qualità dell'aria. Il funzionamento completo del progetto si trova anche nel video linkato di seguito. Spero che il progetto ti sia piaciuto e che sia stato interessante crearne uno tuo. Se hai domande, lasciale nella sezione commenti qui sotto.