Utilizzare Arduino per creare un semplice rilevatore di gas (MQ5)
Ci affidiamo sempre più alla qualità costruttiva dei materiali delle nostre cucine e bruciatori, e la possibilità di una fuga di gas sembra remota. Col passare del tempo questi componenti potrebbero usurarsi aumentando in qualche modo il rischio di fuoriuscita di gas.
Autocostruirsi un sistema di rilevamento è piuttosto semplice ed economico, dato che, il costo del sensore e tipicamente inferiore ai 10€.
Questi sensori sono stabili, hanno una lunga vita di esercizio, sono molto precisi ed una elevata sensibilità con una risposta molto veloce.
Il modello MQ5 che ho acquistato è prodotto dalla Hanwei Electronics, ed è progettato per rilevare principalmente gas GPL, Metano e Idrogeno ed in misura minore rileva alcool e monossido di carbonio. Questo sensore è indicato per rilevare il gas comune, utilizzato in ambiente domestico.
Lo schema del circuito è il seguente:
Il sensore MQ5 viene alimentato dalla +5Vdc dell’Arduino anche se, come sempre, consiglio di utilizzare una fonte di energia esterna per evitare di sovraccaricare lo stadio di alimentazione della board.
L’uscita della sonda è collegata all’ingresso analogico A0, una resistenza da 10Kohm collegata a massa crea un partitore di tensione indispensabile per rilevare le variazioni di tensione generate dal sensore.
Ai pin digitali vengono collegati due led, un cicalino e uno stadio relè che permette di azionare una ventola di estrazione.
Il relè deve essere assolutamente di tipo ermetico per avvitare i piccoli archi di corrente che si manifestano durante il contatto delle lamelle del relè.
La ventola invece deve essere di tipo induttivo, priva quindi di spazzole che potrebbero generare, anche in questo caso piccolissimi ma pericolosi archi di corrente.
I led collegato al pin7 viene impiegato per indicare lo stato di preriscaldamento del sensore, necessario all’avvio per renderlo stabile evitando falsi alarmi. Il led collegato al pin8, e il cicalino collegato al pin9, vengono utilizzati per rappresentare l’eventuale allarme.
Il codice per questo circuito è il seguente:
int gas = 0; int PreRiscaldo = 0; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); //Relè-ventola pinMode(7, OUTPUT); //Riscaldamento pinMode(8, OUTPUT); //Allarme pinMode(9, OUTPUT); //Buzzer digitalWrite(7, HIGH); //attendo 5 minuti per stabilizzare la sonda for ( PreRiscaldo = 0; PreRiscaldo < 300; PreRiscaldo++) { delay(1000); } digitalWrite(7, LOW); } void loop() { //Leggo il valore di tensione generato dalla sonda gas = analogRead(0); //invio i dati al serial Monitor Serial.println(gas, DEC); //gestisco le soglie e agisco di conseguenza if ( gas > 150) { //cicalino ON analogWrite(9, 100); //allarme via led ON digitalWrite(8, HIGH); //attivo relè digitalWrite(2, HIGH); } else { //cicalino OFF analogWrite(9, 100); //allarme via led OFF digitalWrite(8, LOW); //attivo relè digitalWrite(2, LOW); } //acquisisco i dati ogni 1/2 secondo delay(500); }
Nel mio caso la funzione analogRead(0); genera un valore (dopo circa 5 minuti di funzionamento) intorno a 90, avvicinando un accendino e aprendo il gas, questo valore schizza a 800-900, provocando l’azionamento del relè e l’accensione del Led sul pin8.
Potete variare le soglie in base al vostro sensore e alle vostre esigenze di sensibilità.
Per rilevare in maniera efficiente le fughe di gas, il sensore va posizionato in prossimità del pavimento se il gas da rilevare è pesante (Gpl, Propano, Butano) o in prossimità del soffitto se il gas è leggero (vapori di Alcool, Metano, Etanolo).
Questo progetto è stato testato in modo prototipale, non è stata fata alcuna verifica reale di funzionamento, il progetto è quindi da utilizzare solo per scopi didattici. Non mi assumo responsabilità (visto il delicato campo di impiego) di nessun tipo derivate dal un funzionamento anomalo del circuito o da incidenti da esso causati.
Related posts
4 Comments
Lascia un commento Annulla risposta
Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test
Ciao Marco, complimenti per l’articolo!
Volevo farti una domanda: tu dici che la vita del sensore è molto lunga, allora ti chiedo, come mai i normali rilevatori di gas sono da sostituire ogni 5 anni appunto perchè il sensore per l’efficacia?
ciao buona serata!
Cinque anni è comunque una vita lunga per il sensore, considera che la sostituzione è necessaria perchè l’aria dell’ambiente non è pura, e quindi polvere e altri elementi possono rendere il sensore meno sensibile. In ambito domestico il sensore viene posizionato in cucina, un ambiente decisamente ostico per il sensore!
a presto
Marco
Ciao Amico io io ho da gestire un sensore di fumo etc..MQ-2..Cercando in rete ho visto questo articolo relativo alla gestione di un sensore simile…Comunque tu effettui la lettura della grandezza analogica che ovviamente dato l’ADC a 10 bit restituirà un valore compreso tra 0 e 2^10….ciò che non capisco è come fai a “gestire la soglia” dato che non dimensioni il dato analogico che ricevi? tu scrivi if(gas>150)….ma che vuol dire 150? quanto è 150?…
Ti ringrazio anticipatamente…sono molto interessato a gestire il sensore di cui ti ho detto!
Francesco
Ciao
a volte tralascio dettagli che poi risultano utili, come nella tua richiesta. Per verificare la soglia devi dare uno sguardo al datasheet del sensore (http://seeedstudio.com/wiki/images/c/ce/MQ-5.pdf) dove sono rappresentate le curve dei gas in base alla quantità presente nell’aria.
Capire quanto gas ci sia nell’ambiente utilizzando il valore di tensione in uscita del sensore, non è semplice perché intervengono fattori come temperatura e umidità che potrebbero far cambiare la curva di risposta del sensore.
Io ho scelto un valore di 150, una soglia molto bassa, in quanto mi interessa accorgermi immediatamente se nell’aria c’è la presenza di gas. (considera che nel mio caso l’Arduino mi restituisce 90 in condizioni di assenza di gas, quindi ho dedotto che 150 potesse essere un valore molto basso che mi indica la presenza minima di gas)
A presto
Marco