La qualità dell'aria che respiriamo dovrebbe essere un fattore di primaria importanza per tutti. E' ben noto che le particelle di polvere nell'aria non fanno dormire chi soffre d'asma, ma i livelli di alcuni gas sono ugualmente dannosi. Questo progetto misura il livello dei gas inquinanti dell'aria ed emette un suono di allarme quando la loro concentrazione supera un certo livello come, ad esempio, quando qualcuno accende una sigaretta.
Il sensore
Il sensore utilizzato in questo progetto, il TGS2600 dell'azienda giapponese Figaro, specializzata in sensori di gas, risponde a basse concentrazioni di vari gas incluso il metano, il monossido di carbonio, l'etanolo, l'idrogeno e l'isobutano. Quest'ultimo è spesso usato come propellente nelle bombolette per aerosol. Si noti che il sensore non fa distinzione tra questi gas. Il TGS2600 non è un sensore di gas in sé, ma piuttosto un sensore di gas nell'aria, il che significa che non funziona correttamente se il livello di ossigeno è troppo basso. Poiché esso reagisce a cambiamenti della qualità dell'aria, eccelle nel rilevare il fumo di sigaretta, per esempio. Sebbene il TGS2600 rilevi tutti i tipi di gas, ce ne sono alcuni che non riesce a percepire. Ad esempio i vapori di silicone, altamente corrosivi. Il TGS2600, alloggiato in un piccolo contenitore di metallo (vedi figura 1), è basato su un elemento resistivo composto da biossido di stagno (SnO2). Per reagire alle variazioni delle concentrazioni di gas ha bisogno di essere riscaldato.
Nel suo interno è inglobato un elemento riscaldatore. Per questo motivo il sensore ha bisogno di alcuni secondi per risultare pronto all'uso, dopo l'accensione. Quando viene alimentato per la prima volta, o dopo un periodo d'inattività di diverse settimane o più, il tempo di avvio ammonta a circa 15-20 minuti. L'elemento resistivo (RGAS o RS) all'interno forma la parte "superiore" di un partitore di tensione. Poiché la sua resistenza è controllata dalla composizione dell'aria ambientale, il segnale di uscita è disponibile nella parte "inferiore" del partitore di tensione, RL, che deve essere collegata esternamente. La resistenza del sensore in aria pulita è detta RO ed è il valore di riferimento. Di conseguenza RS è inversamente proporzionale all'inquinamento atmosferico. I livelli della temperatura d'ambiente e dell'umidità relativa influenzano la sensibilità del dispositivo, ma se il sensore è utilizzato nell'intervallo compreso tra 10°C e 50°C, non è necessaria la sua compensazione.
Il circuito di monitoraggio dell'inquinamento atmosferico
L'utilizzo del TGS2600 nel circuito è semplice: un microcontrollore con un ADC è tutto quello che serve (vedi schema elettrico di cui in figura 2). Dal momento che si desidera che i dati siano disponibili in rete, si è utilizzato un microcontrollore basato su ESP32.
I prototipi realizzati sono di due tipi: il primo è costruito su una scheda sperimentale, il secondo su un apposito circuito stampato (PCB). La prima versione consiste in un modulo Pico Kit ESP32, un display OLED da 0.96", un pulsante, un cicalino e, naturalmente, il sensore. La versione su PCB è quasi identica tranne il display OLED, in quanto utilizza una pagina web per visualizzare i dati. In più, sono stati aggiunti tre diodi LED per mostrare lo stato della connessione di rete wireless (vedi figura 3).
Il Firmware
Fondamentalmente, tutto ciò che il software deve fare è misurare la tensione su R2, che è legata a RL di cui abbiamo parlato prima. Con il valore di R2 noto (10 kΩ come da schema elettrico) il valore di RS può essere facilmente calcolato. Quindi, una volta che RO è noto, con il rapporto RS/RO si può calcolare il valore dell'inquinamento atmosferico. Il problema è che il valore di RO è sconosciuto. Per ricavarlo occorre effettuare una calibrazione in ambiente ideale, con "aria pulita". Il valore dell'inquinamento atmosferico calcolato è mostrato su un grafico a linee sul piccolo display OLED oppure caricato sulla piattaforma ThingSpeak Internet of things (IoT), dove le misure possono essere visualizzate con un grafico a linee su un periodo di tempo molto lungo. Il display OLED mostra solo le ultime 20 misurazioni. Queste vengono confrontate con un valore di soglia. Quando l'inquinamento atmosferico scende sotto questa soglia, si attiva il cicalino. Secondo la scheda tecnica del sensore, un rapporto RS/RO di 0.85 è un valore di soglia di allarme abbastanza ragionevole. Esso è visibile sul display sotto forma di una linea orizzontale tratteggiata. Premendo il pulsante, l'allarme si arresta. Sono visibili anche alcune informazioni sulla connessione Wi-Fi corrente, insieme al valore della soglia.
Configurazione e calibrazione
Per rendere il sistema più performante è possibile aggiungere la funzionalità di webserver. Ciò consente di effettuare la configurazione attraverso una pagina web, ospitata nello stesso ESP32. In questa pagina, la soglia di allarme può essere impostata assieme alle impostazioni di ThingSpeak, ossia l'API necessaria a caricare i dati. La rete Wi-Fi del dispositivo può essere configurata anche in questo contesto. La parte più importante della pagina, tuttavia, è quella adibita alla calibrazione del sensore, con l'impostazione della resistenza di riferimento dell'aria pulita, RO. Per effettuare tale operazione, il sensore dovrebbe essere collocato in un ambiente pulito. La scheda tecnica del sensore consiglia un periodo di sette giorni. Alla scadenza si può premere il tasto "Calibra".
Modalità di funzionamento in modalità di access point
La prima installazione del dispositivo ESP32 richiede la modalità in Access Point (AP). Si deve attivare tale modalità alimentando il modulo e mantenendo il pulsante premuto; il LED2 "AP" dovrebbe accendersi. Tramite un computer, uno smartphone o un tablet si acceda all'indirizzo IP 192.168.4.1 per visualizzare la pagina Web di configurazione del sistema di rilevazione dell'inquinamento. Adesso è possibile configurare la rete Wi-Fi e gli altri parametri menzionati prima. La comunicazione tra la pagina web e il modulo ESP32 avviene tramite chiamate XMLHttpRequests asincrone. Quando la pagina è caricata, una richiesta HTTP è inviata all'ESP32. Alla ricezione di questa, il microcontrollore invia una risposta contenente la configurazione corrente.
ThingSpeak
Le misurazioni della qualità dell'aria si possono caricare sulla piattaforma IoT ThingSpeak. Occorre creare un canale con un campo dati, grazie alla chiave API "Write" che deve essere inserita
sulla configurazione della pagina web di ESP32 . Se impostate correttamente, le misurazioni vengono caricate a ogni intervallo. Inoltre, quello inviato è il valore medio calcolato sull'intero intervallo. Per mandare i dati a ThingSpeak, viene prima inviata al sito web una richiesta HTTP contenente il valore del sensore. ThingSpeak risponde, quindi, con il numero di voci del canale, o con zero (0) se la richiesta fallisce. Una delle ragioni per cui una richiesta non va a buon fine è perché la chiave API è stata inserita in modo errato o quando le richieste vengono inviate troppo velocemente (ThingSpeak limita l'intervallo a 15 secondi per un utilizzo gratuito). L'intervallo minimo di caricamento del sistema è di un minuto.
Unico sketch
Entrambe le versioni di questo progetto (breadboard o PCB) usano lo stesso sketch di Arduino. Per distinguere tra le versioni viene usata la definizione del preprocessore. Questa è la prima riga del codice:
#define USEDISPLAY
Occorre rimuoverla o commentarla per la versione PCB. Deve essere installata una libreria aggiuntiva chiamata U8g2lib (https://github.com/olikraus/u8g2) per le operazioni di visualizzazione. Serve per disegnare il testo e il grafico a linee sul display. Per caricare il software su ESP32 deve essere installato il core di Arduino ESP32 (https://github.com/espressif/arduino-esp32). Occorre anche installare lo strumento SPIFFS per caricare la pagina web sul file system di ESP32 (https://github.com/me-no-dev/arduino-esp32fs-plugin). Quando tutto è impostato correttamente, il Pico Kit ESP32 può essere selezionato dal menù "Schede". Si possono, dunque, caricare la pagina Web e lo sketch sul modulo ESP32.
Elenco componenti
- Resistenze
- R1, R2 = 10 Kohm;
- R3, R4 = 1 Kohm;
- R5, R6, R7 = 220 ohm;
- Condensatori
- C1 = 100nF;
- Semiconduttori
- D1 = BAT85;
- IC1 = TGS2600;
- LED1, LED2, LED3 = rosso, 3mm diametro;
- T1 = BS170;
- Varie
- BUZ1 = PS1420P02CT;
- K1, K2 = morsetto a 17 vie passo 0.1" per l'ESP Pico Kit;
- S1 = pulsante tattile 6x6 mm, montaggio su PCB.
Weblinks
[1] U8g2lib graphics library: https://github.com/olikraus/u8g2
[2] ESP32 Arduino core: https://github.com/espressif/arduino-esp32
[3] SPIFFS upload tool: https://github.com/me-no-dev/arduino-esp32fs-plugin
Air Pollution Monitor, bare PCB: www.elektor.com/air-pollution-monitor-170182-1
ESP32 Pico Kit: www.elektor.com/esp32-pico4
TGS2600 Air Contaminants Sensor: www.elektor.com/tgs2600-air-sensor
0.96“ 128x64 OLED Display, 6-pin: www.elektor.com/oled-display-for-arduino
Lo trovo interessante perché vedo che può rilevare il micidiale monossido di carbonio. Esso è un gas velenoso (mortale) ed è insidioso a causa del fatto che è inodore e insapore. La cronaca è purtroppo ricca di episodi di persone morte a causa di questo gas, soprattutto in inverno quando si accendono le stufe per scaldarsi o quando si lascia l’auto accesa (per riscaldarsi) all’interno di un luogo chiuso.
Interessante questa realizzazione, volevo leggere lo sketch ma non lo trovo.. ci sarà una seconda puntata o son cecato io? 🙂
Salve.
Per usufruire dei completi contenuti degli articoli Elektor ci sono due strade:
– abbonarsi alla rivista Elektor
– oppure, abbonarsi a Elettronica Open Source. Indipendentemente dalla tipologia di abbonamento sottoscritto, gli abbonati avranno la possibilità di accedere gratuitamente ai contenuti della rivista Elektor. Grazie alla collaborazione avviata con l’autorevole magazine internazionale, vi forniremo gratuitamente una GREEN membership Card (validità 1 anno).
Qui i link inerenti:
https://it.emcelettronica.com/la-prestigiosa-rivista-elektor-in-italiano
https://it.emcelettronica.com/elektor-green-membership-card-in-regalo-per-i-nostri-abbonati
Ok, questo ulteriore vantaggio dell’abbonamento EOS me l’ero perso.
Iscrizione al sito Elektor appena effettuata
Mi chiedevo la stessa cosa. Magari è l’estratto di un articolo più completo reperibile altrove. Andrebbe bene anche il semplice download del sorgente, ad interpretarlo ci pensiamo noi! 😀
Altra domanda, ma la PCB non è predisposta per il collegamento dell’oled, giusto? Se ne parla nella descrizione e anche nello schema vedo l’header K5, ma nella board non ci sono pad predisposti.
Trovo questo progetto utilissimo. E’ interessante sapere che possiamo fare affidamento su sensori per il monitoraggio dell’aria che respiriamo.
Ciao,
articolo interessante ma volevo avere qualche informazione in più:
Si parla di inquinamento atmosferico e monitoraggio dell’aria ma vorrei sapere se questo sensore è adatto ad un sistema che va “montato” sopra una persona che si muove in città prevalentemente a piedi o in bicicletta. L’idea è valutare la qualità dell’aria che si sta respirando nei tratti di strada più affollati e fare uno studio sui effettivi livelli di inquinamento. Da qualche parte ho letto che il livello di inquinamento di un paese va anche in base all’estensione superficiale di quello stesso paese.
Mi consigliate questo sensore o ci sono sensori più adatti al mio progetto?