
Sensor de fum o gas amb Raspberry Pi
Si volem analitzar algun tipus de gas amb una Raspberry Pi, podrem fer-ho molt senzill amb els sensors MQ, només necessitarem saber en tot cas quin sensor obtenir depenent dels gasos a analitzar i llest, veurem en aquest post com connectar-lo i obtenir els valors. Com sempre, al final guardarem les dades obtingudes en una base de dades de MySQL per visualitzar-lo des de Grafana!
El que s'ha dit, primer serà saber quin sensor MQ farem servir, en aquest post ens basarem en un MQ2 que analitza Metano, LPG i Fum, però que sàpiga que també tenim entre d'altres el MQ3 per obtenir Alcoho, Etanol i Fum, amb el MQ4 podrem obtenir Metà i gas natural comprimit o CNG, MQ5 per a gas natural i LPG, amb el MQ6 obtindrem LPG i gas butà, amb el MQ7 monòxid de carboni, amb el MQ8 Hidrogen, el MQ9 per a monoxid de carboni i gasos inflamables, MA131 per a Ozó, MQ135 per a Benzè, Alcoho i Fum, MQ136 Àcid sulfhídric, MQ137 per a Amonia, MQ138 ens donaria els valors de Benzè, Tolueno, Acetona, Propà, Alcohol i gas formaldehid… i així fins a decidir quin sensor barat vam adquirir per detectar els gasos que ens interessen. El que s'ha dit, en aquest post ens basem en un MQ-2.
A banda del sensor, necessitarem també un conversor Analògic-Digital, jo utilitzo un MCP3008 i a més un conversor de nivells lògics 3.3 a 5V. Veiem a la imatge com fer el connexionat dels GPIO de la Raspberry cap al sensor. Per cert el sensor pot ser regulat si ho necessitessin amb un destornillador, però vagi, normalment ve bé, és provar…
I a la banda del programari, suposem que tenim una Raspbian funcionant, ens descarreguem un marrec script de tutRPi de GitHub i provem d'executar-lo, així de senzill:
[sourcecode]git clone https://github.com/tutRPi/Raspberry-Pi-Gas-Sensor-MQ
cd Raspberry-Pi-Gas-Sensor-MQ
python example.py[/sourcecode]
Y si lo modificamos un poco… cada uno como necesite y guste… en mi caso ya sabéis este script lo ejecutaré cuando inicie la Raspberry Pi mediante cron, cada 60 segundos meterá en una tabla de una base de datos los valores que obtenga del sensor. Luego vamos a ver cómo lo visualizamos con Grafana… Así me quedaría el script:
[sourcecode]
from mq import *
import sys, time
mq = MQ();
while True:
perc = mq.MQPercentage()
print perc["GAS_LPG"]
print perc["CO"]
print perc["SMOKE"]
import MySQLdb
db = MySQLdb.connect("DIRECCION_IP_SERVIDOR_MYSQL","USUARI","CONTRASENYA","BASE_DE_DATOS")
cursor = db.cursor()
cursor.execute("""INSERT INTO gases (LPG, CO, fum) VALUES (%s, %s, %s) """,( perc["GAS_LPG"], perc["CO"], perc["SMOKE"]))
db.commit()
time.sleep(60)
[/sourcecode]
El dit aquest script emmagatzema en una taula anomenada gasos que té 4 columnes, 3 d'elles són gasos (LPG, CO i fum) i una altra és la data, us deixo el codi per si algú ho necessita i tenir una taula idèntica per a l'script anterior:
[sourcecode]CREATE TABLE 'gases' (
'LPG' FLOAT NULL DEFAULT NULL,
'CO' FLOAT NULL DEFAULT NULL,
'fum' FLOAT NULL DEFAULT NULL,
'fecha' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COLLATE =' latin1_swedish_ci’
ENGINE = InnoDB
ROW_FORMAT = COMPACT
;[/sourcecode]
I ja al nostre Grafana, podrem en un Dashboard afegir un Panell de tipus Graph per exemple i fer consultes a la BD de MySQL per dibuixar les mètriques dels gasos que estem analitzant. Queda xulíssim, no?? Us deixo per si necessiteu les Querys que estic fent:
[sourcecode]SELECT humo as value, "Fum" as metric, UNIX_TIMESTAMP(data) as time_sec FROM gasos WHERE $__timeFilter(data) order by time_sec asc
SELECT LPG as value, "LPG" as metric, UNIX_TIMESTAMP(data) as time_sec FROM gasos WHERE $__timeFilter(data) order by time_sec asc
SELECT CO as value, "CO" as metric, UNIX_TIMESTAMP(data) as time_sec FROM gasos WHERE $__timeFilter(data) order by time_sec asc[/sourcecode]
Llist! Espero que us hagi estat interessant, ja heu vist al blog altres tipus de sensors per connectar una Raspberry Pi i conèixer l'estat del nostre entorn! a gaudir!!!