Come costruire un monitor di gas con Arduino

Questo post è, in realtà, la seconda parte di un articolo in due parti su come realizzare tre semplici progetti di base, di grande utilità e versatilità, per la rivelazione fai-da-te di gas inquinanti indoor o outdoor.

In questa seconda parte dell’articolo, illustriamo, in particolare, come costruire con Arduino un allarme stand-alone per concentrazione di gas eccessiva (primo progetto); e, sempre con Arduino, un misuratore di gas interfacciato a un PC (secondo progetto). Il progetto di un misuratore di gas stand-alone è stato invece illustrato nella prima parte dell’articolo, che trovate cliccando qui.

Tutti i progetti fanno uso dei sensori di gas low-cost della serie MQ. La relazione tra la tensione in uscita da tali sensori e la concentrazione di gas è: maggiore è la concentrazione di gas, maggiore è la tensione di uscita; più bassa è la concentrazione di gas, più bassa è la tensione di uscita. Tuttavia, questa relazione non è lineare, se non in prima approssimazione e per variazioni di pochi punti percentuali.

Allarme per concentrazione eccessiva

Un allarme ottico e sonoro per livelli indoor eccessivi di un gas può venire realizzato facilmente con Arduino. In pratica, se il livello del gas è al di sotto di una soglia impostata via software, è acceso un led verde, se la supera si accende un led rosso e un buzzer emette un segnale acustico.

Dunque, è possibile realizzare un allarme stand-alone per vari gas: ad es. per il metano (sensore MQ-5), che non è un inquinante ma a determinate concentrazioni pone il rischio di esplosioni; per il fumo (sensore MQ-2), realizzando così un sensore di fumo con allarme; e così via con altri gas. Un progetto in tal senso, presentato sul sito web Instructables e su quello di Arduino (link in bibliografia) prevede l’uso di:

  • un sensore di gas (ad es. MQ-5: gas naturale, metano, Gpl, etc.)
  • la relativa scheda elettronica di amplificazione (a volte venduta a parte)
  • una scheda Arduino Uno o Genuino Uno
  • un buzzer
  • un cavo USB
  • due led (uno verde e uno rosso)
  • 3 resistenze da 221 ohm
  • una breadbord
  • cavetti “jumper” maschio-femmina

I collegamenti della scheda su cui è montato il sensore di gas e degli altri componenti del sistema sono molto semplici e sono illustrati dalla figura qui sotto. Una volta effettuati tali collegamenti, basta collegare la scheda Arduino Uno al computer con un cavo USB.

Lo schema di collegamento dei vari componenti del sistema. (fonte: Arduino)

In pratica, l’uscita dalla piccola scheda di amplificazione del segnale su cui è montato il sensore MQ fornisce un segnale analogico (A0), che può essere letto con un ingresso analogico dell’Arduino, o un’uscita digitale, (D0) che può essere letta con un ingresso digitale di Arduino. Nel nostro caso, ci interessa l’uscita analogica, che va inviata a uno dei vari ingressi analogici della scheda Arduino.

A questo punto, occorre caricare sulla scheda Arduino lo “sketch” – ovvero le righe di comando – che trovate sul sito di Instructables (per il rivelatore di gas metano e Gpl) e di Arduino (per il rivelatore di fumo) e che potete copiare con un “copia e incolla” in Arduino IDE, il software open-source di sviluppo di Arduino, che possiamo scaricare facilmente dal sito di Arduino.

Seleziona la scheda Arduino che stai usando in “Strumenti -> Scheda”, altrimenti ti darà un errore durante il caricamento del codice. A volte anche la porta COM selezionata sarà diversa da quella di default quindi vai a “Strumenti -> Porta” e imposta la porta COM del computer che hai collegato alla scheda.

A volte il sensore non fornisce un valore accurato, pertanto prova a cambiare il valore della soglia del gas nel programma. Se si esegue un test con un accendino (senza fiamma), la quantità di butano rilasciata è molto inferiore, quindi potrebbero essere necessari 2 o 3 secondi per rilevarla. Idem se si usa una sigaretta nel caso si voglia testare un sensore di fumo per impostarne la soglia via software o hardware.

Infine come si può notare dalla figura qui sotto, la scheda del sensore ha un potenziometro incorporato che consente di regolare la sensibilità del sensore con cui si desidera rilevare il gas se, invece dell’uscita analogica (A0), si sfrutta quella digitale (D0), in modo tale che ad es. suoni un allarme e/o si accenda un led quando la concentrazione del gas raggiunge una determinata soglia impostata grazie al potenziometro.

Il potenziometro presente su tutte le schede che montano i sensori della serie MQ.

Misuratore interfacciato a un computer

A questo punto, non dovrebbe esservi difficile capire come si può realizzare un semplice misuratore di gas inquinanti interfacciato a un computer. Nella sua versione più spartana, avete semplicemente bisogno del sensore e della sua elettronica di amplificazione, di una scheda Arduino o Genuino, di un cavo USB per la connessione al computer e di un po’ di cavetti. I collegamenti da fare li conoscete già.

Ciascuno dei sensori di gas emette un valore analogico che può andare da 0 a 1023. Per acquisire questo dato ogni tot secondi e per convertire il valore analogico in tensione, puoi usare uno sketch già pronto come quello mostrato nella figura qui sotto creato da Seeed Studio (ad es. cercando su Google “sketch for mq reading with Arduino”) oppure crearne uno da solo, magari modificando uno simile che hai già dalla biblioteca di Arduino o che hai trovato sul web.

Sketch per l’acquisizione dei dati dal sensore MQ (fonte Seeed Studio, link al codice qui)

In questo esempio, il sensore è collegato al pin A0 della scheda Arduino. Viene visualizzata la tensione letta dal sensore. Questo valore può essere utilizzato come soglia di riferimento per rilevare qualsiasi aumento / diminuzione della concentrazione di gas che ci interessa (come ad es. nel caso di un allarme).

Una volta che lo sketch utilizzato invia i valori di tensione al vostro computer potete – a meno che non sappiate fare un programma per realizzare un grafico in tempo reale – graficare real-time con MegunoLink Pro i dati forniti dal vostro rivelatore di gas. MegunoLink, infatti, è un semplice e utilissimo strumento di interfaccia personalizzabile per fare i grafici con i dati forniti da una scheda Arduino.

La finestra di MegunoLink può essere riconfigurata per adattarsi alla propria applicazione. Inoltre, si possono aggiungere dei controlli “virtuali” alla scheda. I grafici possono essere facilmente copiati negli Appunti come immagini. Ed i dati numerici di ogni grafico possono venire esportati in Excel o in altro software per ulteriori analisi. Si può scaricare la versione free per una prova gratuita.

Nella figura qui sotto si può vedere un grafico che abbiamo ottenuto con MegunoLink usando un sensore di gas MQ-5 (propano, butano, etc.). Il picco corrisponde a un accendino che viene premuto per qualche secondo a pochi centimetri dal sensore per far fuoriuscire un po’ di gas al quale è sensibile. Come si nota, il grafico fornito da questo software è molto “pulito” e gradevole esteticamente, dunque eccellente come “monitor”.

Grafico che abbiamo ottenuto aprendo a pochi cm il gas di un accendino per 1 secondo. L’uscita in tensione dal sensore balza, quasi istantaneamente, da circa 350 mV a oltre 2 V.

La scheda entry-level Arduino Uno ha 6 ingressi analogici (mentre la Mega ne ha ben 16). Ciò significa che sarà possibile collegarvi altrettanti sensori indoor per misurare altrettanti gas. Nel caso si intendano collegare dei sensori outdoor, invece, occorre lasciare un ingresso libero per collegarvi un sensore di temperatura e umidità per Arduino, che trovate facilmente nei siti web già citati.

Il convertitore analogico-digitale contenuto nella scheda Arduino Uno ha una risoluzione di 10 bit. Ciò vuol dire che ha 2 elevato alla 10 (cioè 1024) divisioni della tensione di riferimento (5V). Perciò, il minimo incremento di voltaggio apprezzabile è dato da 5 : 1024 = 0,0049 V, o circa 5 mV. Se il sensore da noi usato ha ad es. una tensione di uscita di circa 100 mV, ciò corrisponde a un incremento del 5%.

Tale incremento è senz’altro sufficiente per scopi didattici e per realizzare un allarme per concentrazioni elevate. Potrebbe però non soddisfarci se vogliamo monitorare in modo più preciso i livelli di gas nel tempo. In tal caso, possiamo orientarci in un secondo tempo su una scheda Arduino (o Genuino) con una risoluzione di 12 bit, come ad esempio la Arduino Due o la Arduino Zero.

Come determinare facilmente le “PPM”

Dunque, il vostro rivelatore di gas è già pronto per fornire delle rozze misure relative: ad esempio, per far vedere come i valori di un inquinante aumentino quando ci si avvicina a una sorgente, oppure quando si passi da un ambiente indoor a uno outdoor, o quando la concentrazione indoor di un determinato gas aumenta per un qualsivoglia motivo. Tuttavia, a livello di valore assoluto, non sappiamo nulla.

Infatti, i valori mostrati ora sul grafico sono quelli di tensione in uscita dal sensore. Ma come trasformarli in parti per milione (ppm)? L’esempio che segue mostra un modo per conoscere la concentrazione approssimativa di gas in ppm nel caso del sensore MQ-9. Come dalla scheda tecnica dei sensori MQ-9, le equazioni sottostanti utilizzate sono testate per condizioni standard e non sono calibrate. Il valore fornito può quindi variare in base al cambiamento di temperatura o umidità.

Tenendo il sensore del gas in un ambiente “pulito”, carica sul software di sviluppo di Arduino (chiamato Arduino IDE) la sketch , o “programma” con le istruzioni per Arduino, mostrata qui sotto – e creata sempre da Seeed Studio – facendo naturalmente un semplice “copia e incolla” dal sito che la fornisce:

Sketch per determinare l’R0 del nostro sensore MQ (fonte Seeed Studio, link al codice qui)

Naturalmente, se il sensore è della serie MQ ma non è l’MQ-9, devi adattare la sketch, cosa non difficile se ne capisci la “filosofia” sottostante leggendola: in pratica, devi sostituire il valore “9.9” con uno opportuno, dato dal rapporto RS/R0 per il tipo di sensore MQ usato e relativo all’aria (Air). Ad esempio, nel caso del sensore MQ-9 lo si trova “a colpo” guardando l’ultima figura di questa pagina, relativa alla sua curva di sensibilità caratteristica: si vede chiaramente che il rapporto RS/R0 per l’aria è circa 9,9.

A questo punto, apri il monitor seriale di Arduino IDE. Annota il valore di R0 ottenuto, perché questo deve essere usato nel prossimo sketch. Si sottolinea di annotare il valore di R0 solo dopo che la lettura si stabilizza. Sostituisci poi la R0 mostrata nel codice qui sotto con il valore di R0 misurato sperimentalmente con la procedura precedente. Esponi infine il sensore a uno dei gas a cui il sensore è sensibile.

Sketch per determinare il rapporto RS/R0 per il gas di interesse (fonte Seeed Studio, link qui)

Ora possiamo ottenere la concentrazione di gas dalla figura sottostante.

La curva di sensibilità del sensore MQ-9, come fornita dal relativo datasheet.

Secondo la figura, possiamo vedere che la concentrazione minima che possiamo misurare è 200 ppm e quella massima è 10000 ppm; in altre parole, possiamo ottenere una concentrazione di gas tra lo 0,02% e l’1%. Tuttavia, non possiamo fornire “a colpo” una formula neppure approssimata perché la relazione tra il rapporto RS/R0 e la concentrazione, evidentemente, non è lineare.

Approssimando la curva in figura con un’equazione opportuna, potete implementare la conversione automatica da tensione in volt a concentrazione in ppm a livello di software, cioè ad es. in una sketch di Arduino. Ed in merito alle influenze di temperatura e umidità, se si desidera determinare o confrontare con precisione i valori relativi o assoluti, è necessario considerare anche la misurazione di quei parametri per compensare, come mostrato nel relativo grafico del datasheet, e ciò complica le cose.

Vai alla prima parte dell’articolo cliccando qui.

Se incontrate delle difficoltà durante la realizzazione dei progetti, potete rivolgervi al FabLab più vicino oppure alla community di Arduino, che conta migliaia di appassionati in Italia.

 

Riferimenti bibliografici



Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *