Mar 092015
 

Quest’oggi vediamo come creare in modo estremamente semplice un piccolo progettino per rilevare le fughe di gas metano / GPL. Ho nel cassetto tutti i componenti necessari presi da uno di quei kit “37 in 1” che trovate in rete in varie versioni, nel particolare ho un rilevatore di gas metano come questo, e  aluni buzzer che userò per emettere un segnale sonoro al verificarsi di una fuga di gas. Come sempre la prima cosa da farsi è procurarsi la piedinatura dei componenti a nostra disposizione ed i datasheet. Il sensore MQ4 che ho riesce a rilevare da 200 a 10000 pmp di gas naturale. Il bello di questo sensore è che è alimentato da una tensione di 5V (sia alternata che continua) che in uscita è sottoposta ad una resistenza variabile per cui il valore restituito può essere letto in maniera diretta da uno degli ingressi analogici di Arduino Uno. Ciò rende il collegamento estremamente semplice. La piedinatura del sensore la potete vedere nella figura qui vicino: ci sono 6 pin distribuiti su due righe da tre in maniera specularepiedinatura_sensore_metano, da una parte abbiamo due A ed una H, dall’altra due B ed una H. A e B sono del tutto intercambiabili per cui potete anche invertirli senza alcun problema. Si noti che le due A comunicano fra loro all’interno del sensore, allo stesso modo le due B comunicano fra di loro per cui non è indispensabile collegare tutti i pin. Per semplicità decidiamo un ordine di collegamento per cui uniamo la linea A all’alimentazione 5V. Allo stesso modo colleghiamo la H fra le due A sempre alla 5V; di fatto ci troviamo nella situazione in cui tre pin attigui di uno dei due lati sono collegati tutti alla linea a 5V. Sull’altro versante colleghiamo H a massa e le B da una parte ad un resistore di carico da 10K che a sua volta è collegato a massa e che fa da partitore di tensione, dall’altra andiamo all’ingresso analogico di Arduino, in particolare io nell’esempio che vedete più sotto ho utilizzato l’ingresso numero zero. La resistenza di lettura secondo il datasheet va da 10k a 60kΩ. Qui sotto vi riporto uno schema colorato che dovrebbe rendere più semplice la comprensione del cablaggio di questo sensore. Per quanto riguarda la parte software non dobbiamo far altro che leggere la tensione sull’ingresso analogico zero di Arduino (ho scelto lo zero ma siete liberi di modificarlo). Nei test che ho fatto ho avuto delle letture basali, ossia senza perdite di gas, fra i 220 e 240 in casa. Interessante notare che fuori all’aria aperta ottengo valori fra 140 e 150. A tal proposito faccio notare, come deducibile anche dal datasheet, che questo sensore è si particolarmente sensibile alla presenza di metano e GPL, ma mostra anche una leggera sensibilità a fumo, monossido di carbonio, alcool e H2 per cui in un certo senso misura la “qualità” dell’aria.

Da notarsi che una volta alimentato il circuito non abbiamo da subito il valore base ma ci vogliono diversi minuti prima che questo si stabilizzi. Appoggiando invece il sensore a circa 5 centimetri dal fornello della cucina, una volta sensore gaspaperto il gas in pochissimo tempo la lettura passa a 900 e oltre mentre una volta richiusa la perdita ci vuole del tempo prima che il valore si ristabilisca, in parte perchè il gas stesso si deve disperdere. Faccio notare che il sensore è sensibile all’umidità temperatura e concentrazione di ossigeno nell’aria, motivo per cui per ottenere delle misure più accurate occorre tener conto quantomeno di temperatura ed umidità: l’ossigeno minimo è del 2% ma a quelle condizioni non ha più importanza se ci sia o meno del gas in aria, sareste comunque belli che stecchiti.

Di per se il prototipo è già funzionante ma non possiamo certo accontentarci di inviare la lettura sulla porta seriale. L’ideale sarebbe collegare un relè ad un’elettrovalvola che in caso di superamento di una certa soglia blocca la conduttura del gas e/ o attiva un sistema di ventilazione forzata. Fate molta attenzione che questi dispositivi possono produrre scintille durante il loro funzionamento e in ambienti saturi di gas possono provocare esplosioni, pertanto non devono essere installati in ambienti a rischio di saturazione ma devono stare in luoghi perennemente arieggiati.

In questo articolo mi limiterò all’uso di un buzzer per segnalare la presenza di gas, in particolare pensavo di fare in modo che emetta un suono ogni tot tempo e che questo suono si intensifichi come frequenza all’aumentare della concentrazione di gas. Potremmo fare in modo che in assenza di rilevazioni emetta un piccolo bip dopo tot minuti, in modo da non essere fastidioso ma che sia comunque percettibile. Questo periodo deve essere invece accorciato tanto più quanto è il gas rilevato aumenta, sino ad avere un suono quasi continuo. Il buzzer ha un funzionamento quasi banale, nel modulo a mia disposizione ci sono un pin di alimentazione 5V, la massa ed un pin per inviare il segnale acceso / spento. Utilizzando una sapiente alternanza di segnali on / off è possibile generare suoni di diversa frequenza, infatti si vengono a formare delle onde quadre più o meno ravvicinate con conseguente variazione della frequenza. Il modulo a mia disposizione è come questo ma fate estrema attenzione perchè in questi kit “37 in 1” la documentazione è assai scarsa, vi sono kit simili con moduli differenti, alcuni dei quali sembrano identici ma presentano piccole differenze. E’ proprio il caso del buzzer a mia disposizione. In quasi tutti i kit guardandolo dall’alto con i pin verso il basso, trovate al centro l’alimentazione a 5V, a sinistra la massa e a destra il segnale. Nel mio questi ultimi due sono invertiti, me ne sono accorto dalla serigrafia sul modulo stesso che non corrispondeva a quella della documentazione in mio possesso e fornita con i moduli. Fatta questa doverosa avvertenza, non dobbiamo far altro che collegare la massa, i 5v ed un pin  digitale di Arduino, io ho usato l’11, ma qualunque altro può andar bene. L’uso del buzzer è banale, se tenete alta l’uscita a cui l’avete collegato avrete un suono, altrimenti il silenzio. La velocità con cui cambiate fra i due stati determina la formazione di onde quadre di diverse ampiezze con conseguente variazione della frequenza e tipo di suono (più acuto o più basso). Nella foto a lato vi mostro il cablaggio di entrambi i componenti. Si vede sia il buzzer con i cavi blu (gnd), rosso (5V) e verde (segnale) che il sensore di gas con i cavi rossi sui pin H, gialli sui pin A e verdi sui B (ricordandoci che A e B sono intercambiabili). rilevatoregasebuzzerOra non dobbiamo far altro che scrivere uno sketch semplice, semplice che ci ripotrta a terminale il valore misurato ed emette un suono tanto più ravvicinato quanto più è alta la concentrazione di gas. Il software è davvero molto semplice. Non fà altro che leggere il valore analogico del sensore ed in base ad alcune soglie preimpostate emette un suono tramite il buzzer a determinati intervalli di tempo che si accorciano con l’aumentare del valore letto. E’ stato interessante notare come durante la scrittura di questo articolo si è acceso il termosifone in vicinanza al sensore che ha cominciato a leggere valori più elevati, a sufficienza da far cambiare la soglia ed emettere segnali acustici più ravvicinati. Inizialmente avevo provato ad usare una formula matematica un po’ empirica per correlare i valori letti con la vicinanza dei segnali sonori, ma non sono riuscito a trovare un giusto equilibrio fra la sensibilità quando la soglia è pericolosamente alta e la necessità di mantenere i segnali distanziati quando la concentrazione di gas è bassa. Ho usato perciò delle soglie fisse all’interno del listato. Sono valori basati sulla semplice osservazione empirica in vicinanza al fornello della cucina, ma non vi è una reale correlazione con le soglie di pericolosità per cui NON mettete le vostra vita in mano a questo sketch. Per qualcosa di più preciso occorre misurare anche temperatura ed umidità oltre che tarare il sensore con concentrazioni note di gas, ma quest’ultimo punto mi è difficile da riprodurre.

#define AnalogGasPin 0
#define BuzzerPin 11
int sensorValue;
int soglia;
unsigned long basetime;
int time;
void setup()
{
  Serial.begin(9600);         // sets the serial port to 9600
  pinMode(BuzzerPin,OUTPUT);  // used for buzzer signal
  BuzzerSound(100,2,1); // welcome message :-)
  basetime=millis();
}

void loop()
{
  delay(500);
  sensorValue = analogRead(AnalogGasPin);       // read analog input pin 0
  time=(millis()-basetime)/1000; // seconds elapsed

  if(sensorValue<200) soglia=5000;
  else if(sensorValue<240) soglia=500;
  else if(sensorValue<270) soglia=240;
  else if(sensorValue<300) soglia=60;
  else if(sensorValue<320) soglia=30;
  else if(sensorValue<350) soglia=12;
  else if(sensorValue<400) soglia=8;
  else if(sensorValue<450) soglia=5;
  else if(sensorValue<500) soglia=3;
  else if(sensorValue<600) soglia=2;
  else if(sensorValue<700) soglia=1;
  else soglia=0;
 
  Serial.print("Sensore: ");
  Serial.print((int)sensorValue, DEC);
  Serial.print(" - Secondi: ");
  Serial.print(time, DEC);  
  Serial.print(" - Soglia: ");
  Serial.println((int)soglia, DEC);    
  
  if(time>soglia)
  {
   BuzzerSound(80,1,2);  
   basetime=millis();
   Serial.println("SOUND");
  }
 
}

void BuzzerSound(int cicli, int delay1,int delay2)
{
 for(int i=0;i<cicli;i++)//output sound of one frequency
 {
  digitalWrite(BuzzerPin,HIGH);//make a sound
  delay(delay1);//delay 1ms
  digitalWrite(BuzzerPin,LOW);//silient
  delay(delay2);//delay 1ms
 }   
}

Ci sono altre piccole accortezze a cui stare attenti. Ad esempio il consumo del sensore MQ4 non è propriamente irrisorio. Il datasheet indica 750mW anche se a dirla tutta ho trovato datasheet diversi, dello stesso (apparentemente) componente e della stessa ditta, che indica <900mW. Comunque sia 750mW a 5V corrispondono a 150mA, ben sopportabili dall’uscita 5V di Arduino ma nel caso di progetti più complessi potrebbe essere necessario fare due conti sugli assorbimenti di corrente. Un’altra cosa che volevo segnalare prima di concludere questo articolo, è che come dicevo il sensore ci mette un paio di minuti per stabilizzarsi, nella realtà la fase di stabilizzazione completa richiede 24 ore per cui se intendete creare un progetto più preciso dovrete effettuare le misurazioni dopo questo lasso di tempo.