Sensor de humo o gas con Raspberry Pi
Si queremos analizar algún tipo de gas con una Raspberry Pi, podremos hacerlo muy sencillo con los sensores MQ, sólo necesitaremos saber en todo caso qué sensor obtener dependiendo de los gases a analizar y listo, veremos en este post cómo conectarlo y obtener los valores. Como siempre, al final guardaremos los datos obtenidos en una base de datos de MySQL para visualizarlo desde Grafana!
Lo dicho, primero será saber qué sensor MQ usaremos, en este post nos basaremos en un MQ2 que analiza Metano, LPG y Humo, pero que sepáis que también tenemos entre otros el MQ3 para obtener Alcoho, Etanol y Humo, con el MQ4 podremos obtener Metano y gas natural comprimido o CNG, MQ5 para gas natural y LPG, con el MQ6 obtendremos LPG y gas butano, con el MQ7 monóxido de carbono, con el MQ8 Hidrogeno, el MQ9 para monoxido de carbono y gases inflamables, MA131 para Ozono, MQ135 para Benceno, Alcoho y Humo, MQ136 Ácido sulfhídrico, MQ137 para Amonia, MQ138 nos daría los valores de Benceno, Tolueno, Acetona, Propano, Alcohol y gas formaldehido… y así hasta decidir qué sensor barato vamos a adquirir para detectar los gases que nos interesan. Lo dicho, en este post nos basamos en un MQ-2.
A parte del sensor, necesitaremos también un conversor Analógico-Digital, yo uso un MCP3008 y además un conversor de niveles lógicos 3.3 a 5V. Vemos en la imagen cómo hacer el conexionado de los GPIO de la Raspberry hacia el sensor. Por cierto el sensor puede ser regulado si lo necesitasemos con un destornillador, pero vaya, normalmente viene bien, es probar…
Y en el lado del software, supongamos que tenemos una Raspbian funcionando, nos descargamos un maravilloso script de tutRPi de GitHub y probamos a ejecutarlo, así de sencillo:
[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","USUARIO","CONTRASEÑA","BASE_DE_DATOS")
cursor = db.cursor()
cursor.execute("""INSERT INTO gases (LPG, CO, humo) VALUES (%s, %s, %s) """,( perc["GAS_LPG"], perc["CO"], perc["SMOKE"]))
db.commit()
time.sleep(60)
[/sourcecode]
Lo dicho este script almacena en una tabla llamada gases que tiene 4 columnas, 3 de ellas son gases (LPG, CO y humo) y otra es la fecha, os dejo el código por si alguien lo necesita y tener una tabla idéntica para el script anterior:
[sourcecode]CREATE TABLE `gases` (
`LPG` FLOAT NULL DEFAULT NULL,
`CO` FLOAT NULL DEFAULT NULL,
`humo` 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]
Y ya en nuestro Grafana, podremos en un Dashboard añadir un Panel de tipo Graph por ejemplo y hacer consultas a la BD de MySQL para dibujar las métricas de los gases que estamos analizando. Queda chulisimo, no?? Os dejo por si necesitáis las Querys que estoy haciendo:
[sourcecode]SELECT humo as value, "Humo" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM gases WHERE $__timeFilter(fecha) order by time_sec asc
SELECT LPG as value, "LPG" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM gases WHERE $__timeFilter(fecha) order by time_sec asc
SELECT CO as value, "CO" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM gases WHERE $__timeFilter(fecha) order by time_sec asc[/sourcecode]
Listo! Espero que os haya sido interesante, ya habéis visto en el blog otros tipos de sensores para conectar a una Raspberry Pi y conocer el estado de nuestro entorno! a disfrutar!!!