a-Paul Rilevatore di Gas nocivi a basso costo fatto con Arduino

a-Paul Rilevatore di Gas nocivi a basso costo fatto con Arduino

Il progetto è nato con l’idea di realizzare un rilevatore di GAS nocivi a basso costo da tenere in casa, i gas rilevati sono i più comuni che si posso sviluppare in casa, Alcohol, Metano, GPL etc..  . Nello specifico il sensore che ho utilizzato è un MQ-2 in grado di rilevare i gas della tabella sottostante:

CO 200 ~ 10000 ppm
Alcohol 100 ~ 2000 ppm
CH4 5000 ~ 20000 ppm
Propane 200 ~ 5000 ppm
LPG 200 ~ 5000 ppm
Butane 3000 ~ 5000 ppm
Smoke 200 ~ 10000 ppm
H2 300 ~ 5000 ppm

Arduino è la scelta più logica visto il bassissimo costo. Lo step successivo era trovare un contenitore che fosse bello da tenere in casa. Per il momento ho trovato due soluzioni a basso costo. Una bella ma difficile da trovare e una un po’ meno bella ma economica e facile da trovare.

La soluzione 1 è una cassa per PC a forma di testa di Robot trovata in uno store Cinese. Ecco alcune foto della varie fasi di adattamento della cassa per PC.

Ecco come si presenta appena spacchettata:

Aperta per togliere il cavo audio, le casse e i led monocolore dagli occhi, adesso ne rimane solo l’involucro:

Inseriti i LED RGB negli occhi al posto di quelli monocolore e incollato il sensore di gas MQ-2 su uno dei supporti:

Rimosso uno dei quattro supporti per poter inserire agevolmente Arduno, fatti i vari collegamenti. Io ho fatto due buchi per  il cavo di alimentazione e il cavo usb, quello per lo spinotto USB si può tranquillamente non fare, basta inserire Arduino già programmato. Quello di alimentazione si può evitare anche perché nel fondo è presente il buco del cavo audio da dove si potrebbe far passare il cavo di alimentazione.

Ed ecco il progetto finito..

Due occhi verdi che lampeggiano fin tanto che nessun gas è rilevato, due occhi rossi e un fastidioso cicalino che suona se un gas è rilevato.

La seconda soluzione è l’uso di un semplice profumassero di ambiente di facile reperibilità di cui evito di scrivere la marca per problemi di Copyright, dalle foto però lo riconoscerete.

Tarato e collaudato ecco il filmato finale:

Lista materiale che serve con relativi prezzi:

01 Aruduino (dai 7 ai 25 euro dipende se originale o no il mio non è originale)
01 Buzzer (2 euro)
01 Sensore MQ-2 (circa 7 euro)
02 LED RGB o tre led di colore diverso  (1 Euro)
03 Resistenze da 220 (1 euro)
01 Alimentatore (5 euro)
Cavetti DUPONT (1 euro)
Contenitore (dipende da cosa usate)

Spesa totale circa da 25 Euro in sù

Ecco lo schema elettrico:

Codice:

// a-Paul ver. 1.0 by Paolo Tuttoilmondo

//IMPOSTAZIONE PIN
int buzzerPin = 7; // Pin Digitale 7 per il Buzzer
const int mq2Pin= 1; // Pin Analogico 1 per MQ-2
#define LEDR 8 // LED Rosso collegato al pin digitale 9
#define LEDG 9 // LED Verde collegato al pin digitale 10
#define LEDY 10 // LED Giallo collegato al pin digitale 11

//INIZIALIZZAZIONE SENSORI
int smoke_level; // Inizializzazione MQ-2 Sensore fumi
void setup(){
pinMode(LEDR, OUTPUT); // imposta il pin digitale come output
pinMode(LEDG, OUTPUT); // imposta il pin digitale come output
pinMode(LEDY, OUTPUT); // imposta il pin digitale come output
pinMode(buzzerPin,OUTPUT); // Impostazione Buzzer
pinMode(mq2Pin, INPUT); //the smoke sensor will be an input to the arduino
Serial.begin(9600); // For debugging
//digitalWrite(LEDY, HIGH);
//delay(20000);
}

void loop()
{
smoke_level= analogRead(mq2Pin); // Impostazione variabile MQ2
Serial.println(smoke_level); // Stampa sulla seriale il valore del gas per Dubug
if(smoke_level < 70){ // Cosa succede per valori di gas bassi inferiori a 100
digitalWrite(buzzerPin, LOW); // Spegne il cicalino
digitalWrite(LEDY, LOW);
digitalWrite(LEDR, LOW); // Spegne il LED Rosso
digitalWrite(LEDG, LOW); // Spegne il LED Verde
delay(1000); // Attesa 1 Sec
digitalWrite(LEDG, HIGH); // Accende il LED Verde
delay(1000); // Attesa
}
if(smoke_level > 70 && smoke_level < 100){ // Cosa succede per valori di gas bassi inferiori a 100
digitalWrite(buzzerPin, LOW); // Spegne il cicalino
digitalWrite(LEDG, LOW);
digitalWrite(LEDR, LOW); // Spegne il LED Rosso
digitalWrite(LEDY, LOW); // Spegne il LED Verde
delay(1000); // Attesa 1 Sec
digitalWrite(LEDY, HIGH); // Accende il LED Verde
delay(1000); // Attesa
}
if(smoke_level > 100){
digitalWrite(buzzerPin, HIGH);
digitalWrite(LEDG, LOW); // accende il LED
digitalWrite(LEDY, LOW);
digitalWrite(LEDR, HIGH); // accende il LED
}
}

Arduino stazione di analisi della qualità dell’aria

Questo vuole essere un progetto per realizzare una completa stazione di analisi dell’aria a basso costo. Il progetto è in continua evoluzione. In questa prima versione ho aggiunto sensori per controllare la temperature, l’umidità, l’inquinamento acustico e gas nocivi quali, metano, butano etc.. Ho aggiunto anche un modulo per avere date e ora.

Schema elettrico:

Codice:

// Stazione Analisi Aria ver. 1.0 by Paolo Tuttoilmondo

#include <dht11.h> //Libreria sensore temperatura e umidità
#include <LiquidCrystal_I2C.h> //Libreria display 16×2
#include <DS1302.h> //Libreria orologio

//VARIABILI
int IniTempVariable = 0; // Viaribile temperatura iniziale
int IniUmiVariable = 0; // Viaribile unidità iniziale
//int PostTempVariable = 0; // Viaribile temperatura per rilevare eventuali variazioni
//int PostUmiVariable = 0; // Viaribile umidità per rilevare eventuali variazioni
int Annuncio = 0; // Variabile per nascondere annuncio iniziale
int threshold = 500; // Variabile che imposta la soglia per il calcolo dell’inquinamento acustico
int volume; // Variabile volume per la sezione inquinamento acustico

//IMPOSTAZIONE PIN
int buzzerPin = 9; // Pin Digitale 9 per il Buzzer
const int sensorPin= 1; // Pin Analogico 1 per MQ-2
#define SCK_PIN 2 // Pin Digitale 2 per l’orologio SCK
#define IO_PIN 3 // Pin Digitale 3 per l’orologio I/O
#define RST_PIN 4 // Pin Digitale 4 per l’orologio RST
#define DHT11_PIN 7 // Pin Digitale 7 per il DHT-11 Temperaturà e Umidità

//INIZIALIZZAZIONE SENSORI
dht11 DHT11; // Inizializzazione DHT-11 Temperaturà e Umidità
LiquidCrystal_I2C lcd(0x27,16,2); // Inizializzazione Display
DS1302 rtc(RST_PIN, IO_PIN, SCK_PIN); // Inizializazione libreria orologgio
int smoke_level; // Inizializzazione MQ-2 Sensore fumi
void setup(){
lcd.init(); // Avvio lcd
pinMode(buzzerPin,OUTPUT); // Impostazione Buzzer
//Serial.begin(9600); // For debugging

// Configura Chip Orologgio
rtc.halt(false);
// Viene disattiva la protezione alla scrittura
rtc.writeProtect(false);
pinMode(sensorPin, INPUT);//the smoke sensor will be an input to the arduino
pinMode(buzzerPin, OUTPUT);//the buzzer serves an output in the circuit
}
lcd.backlight(); //Accensione Display
lcd.init();
lcd.setCursor(0,0);
lcd.print(“Analiz. Aria di”);
lcd.setCursor(0,1);
lcd.print(“P. Tuttoilmondo”);
delay(1000);
void loop()
{
//lcd.backlight(); //Accensione Display
delay(1000);
volume = analogRead(A0);
int chk = DHT11.read(DHT11_PIN);
smoke_level= analogRead(sensorPin);
if(smoke_level > 100){
digitalWrite(buzzerPin, HIGH);
}
if(smoke_level < 100){
digitalWrite(buzzerPin, LOW);
}

lcd.init();
lcd.setCursor(0,0);
lcd.print(rtc.getDOWStr());
lcd.setCursor(0,1);
lcd.print(rtc.getDateStr());
lcd.print(” “);
lcd.print(rtc.getTimeStr());
lcd.init();
lcd.setCursor(0,0);
lcd.print(“Temp. “);
lcd.print((char)223);
lcd.print(“C = “);
lcd.print(DHT11.temperature);
lcd.setCursor(0,1);
lcd.print(“Umidita’ % = “);
lcd.print(DHT11.humidity);
lcd.init();
lcd.setCursor(0,0);
lcd.print(“Rumore DB: “);
lcd.print(volume);
if(volume>=threshold){
lcd.setCursor(0,1);
lcd.print(“Inq. Acus. ALTO”);
}
else{
lcd.setCursor(0,1);
lcd.print(“Inq. Acus. BASSO”);
}
lcd.init();
if(smoke_level < 100){
lcd.setCursor(0,0);
lcd.print(“Livello Gas: “);
lcd.print(smoke_level);
lcd.setCursor(0,1);
lcd.print(“Nessun GAS”);
}
if(smoke_level > 100){
lcd.setCursor(0,0);
lcd.print(“Livello Gas: “);
lcd.print(smoke_level);
lcd.setCursor(0,1);
lcd.print(“Attenzione GAS”);
}
delay(2000);
}