Sensore di GAS con Arduino
Realizzare un sensore di gas con Arduino è veramente una cosa molto semplice, così come molti altri schemi. Arduino infatti costituisce da solo una base perfetta per la costruzione di innumerevoli circuiti, dai più semplici ai più complicati. Disponendo di un valido sistema di sviluppo e di numerose porte I/O sia analogiche che digitali, Arduino permette di sviluppare in pochissimo tempo.
Per il circuito sensore di gas si è pensato di utilizzare il sensore MQ2, a basso costo ed in grado di reagire a butano, propano, metano ,alcool, idrogeno, fumo. Un trimmer, un led ed un micro buzzer a 5v completano il circuito.
Il sensore MQ2 si presenta dotato di 6 terminali. Due di essi riguardano il riscaldatore (H) gli altri 4 rappresentano gli elementi sensori veri e propri e sono interscambiabili. Il circuito di alimentazione e raccolta del segnale è molto semplice. Al riscaldatore va applicata una tensione di 5V con un assorbimento di circa 150mA. Una parte (o A o B) va collegata anch’essa a 5V mentre dal sensore d’uscita verrà prelevata la tensione che indica il grado di concentrazione del gas rilevato. Maggiore sarà la concentrazione del gas e maggiore sarà la tensione d’uscita. In parallelo all’uscita è presente un trimmer da 47K che permetterà di controllare e fissare la sensibilità dello strumento.
Come ingresso analogico verrà utilizzato A0 su Arduino, mentre per l’uscita digitale che comanderà il buzzer si è scelta la 2. Per il led lampeggiante la 13.
Lo sketch è di seguito riportato:
long previousMillis=0;
const int ledPin = 13;
const int Buzzer = 2;
int ledState = LOW;
// Indica il valore della tensione di alimentazione
float Vcc=5;
void setup() {
// inizializza la seriale
Serial.begin(9600);
// inizializza le due uscite digitali
pinMode(Buzzer, OUTPUT);
pinMode(ledPin, OUTPUT);
// Porta a LOW il led
digitalWrite(ledPin, LOW);
}
void loop() {
// Memorizza nella variabile current Millis il valore del timer
unsigned long currentMillis = millis();
float vol;
// Legge il valore di tensione dal sensore MQ2
float sensorValue = analogRead(A0);
// Aggiusta il valore della lettura secondo la tensione di alimentazione
vol=sensorValue/1024*Vcc;
// Invia alla seriale il valore ottenuto, utile per debugging
Serial.println(vol,2);
// Se la lettura > della tensione di alimentazione/2 allora allarme!
if (vol>(Vcc/2)) {
digitalWrite(Buzzer, HIGH);
delay(100);
digitalWrite(Buzzer, LOW);
// Ritardo che diminuisce all'aumentare della concentrazione rilevata. Il beep diventa più veloce
delay((5-vol)*150);
}
// Fa lampeggiare il led 1 volta circa ogni secondo
else if (currentMillis - previousMillis > 1000) {
previousMillis = currentMillis;
// se il LED è sento lo accende e viceversa
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
Il programma permette di accendere il buzzer e fargli fare un breve beep ogni volta che la la concentrazione del gas rilevato dal sensore supera una certa soglia. Tale soglia è impostata come Vcc/2 ma potete sperimentare anche valori diversi, tenendo conto che in ogni caso con il trimmer si andrà ad influenzare la sensibilità del sensore e conseguentemente anche la sua tensione di uscita. Tale beep diventa più veloce più è alta la concentrazione, dando così un’idea grossolana della quantità di gas rilevata.
Una volta acceso il tutto il sensore necessita di qualche minuto per stabilizzarsi. Lasciato passare questo tempo si agisce sul trimmer in modo da zittire il buzzer (o farlo suonare se gà era muto). Si deve trovare in pratica quella posizione che zittisce il buzzer da una situazione di sonorità. Più tale posizione è vicina a quella dove il buzzer inizia a suonare più è elevata la sensibilità del circuito, ma anche la sua instabilità. Dopo un po’ di prove troverete certamente la posizione adatta ai vostri scopi.
Buon divertimento.
|