Está en la página 1de 9

JUEVES, JUNIO 7 2018

INICIO
          

INGENIERIA

INFORMÁTICA
LUIS LLAMAS  

Ingeniería, informática y diseño


ZONA GEEK Inicio

PROGRAMACION Ingenieria

DISEÑO/3D Informática

TUTORIALES ARDUINO TUTORIALES ARDUINO INTERMEDIOS
Buscar 
ACERCA DE MI

DETECTOR DE GASES CON ARDUINO


Zona Geek 

CONTACTO

Y LA FAMILIA DE SENSORES MQ
Programacion
NOS VEMOS EN
Diseño/3d 
    

Acerca de mi
21 OCTUBRE, 2016
     
ENCUENTRA LO QUE TE INTERESA Contacto

NUESTRAS SECCIONES
INFORMÁTICA

INGENIERIA

¿QUÉ ES UN SENSOR DE GASES MQ?


Los sensores de gases MQ son una familia de dispositivos diseñados para detectar la presencia
de distintos componentes químicos en el aire. Podemos conectar estos dispositivos a un autómata o
procesador como Arduino.

Existe una gran variedad de sensores MQ. Cada modelo está diseñado para detectar una o más
PROGRAMACION
sustancias, pensadas para un uso especí co, como por ejemplo detección gases in amables, calidad
del aire o detección de alcohol en aire respirado.

Los sensores de gases MQ suelen proporcionarse con una placa de medición estándar con el
comparador LMC662 o similar, que permite obtener la lectura tanto como un valor analógico, como
un valor digital cuando se supera un cierto umbral regulado a través de un potenciómetro ubicado en
la placa.

Los sensores de gases deben ser calibrados antes de obtener una medida precisa. Aun calibrados
estos sensores no disponen de la garantía necesaria para formar parte de un sistema de seguridad. TUTORIALES ARDUINO

Anuncio: Tus propias PCBs a media en PCBWAY

ZONA GEEK
No usar estos sensores en aplicaciones de las que dependa la seguridad de personas o

 equipamientos.

Pese a sus limitaciones, los sensores de gases tipo MQ son muy usados en proyectos de
electrónica casera con Arduino. Por ejemplo, podemos hacer encender o apagar un ventilador en
función de la calidad del aire, hacer un pequeño detector de alcoholemia, o una alama que suene al
detectar humos.

PRECIO
DESCUBRE LAS ÚLTIMAS ENTRADAS
Los sensores de gas MQ son dispositivos relativamente baratos. El precio varía de un modelo a
otro pero, en general, oscila entre 1 a 1.5€, en vendedores internacionales de eBay y AliExpress.
ENTRADAS RECIENTES
LIBRERÍA DE ARDUINO TRIANGLESOLVER
5 JUNIO, 2018

¿CÓMO FUNCIONA UN SENSOR DE GASES?


Los sensores MQ están compuestos por un sensor electro-químico que varía su resistencia al
estar en contacto con las sustancias.

Los sensores de gases son dispositivos con alta inercia, es decir, la respuesta necesita tiempos
largos para estabilizarse tras un cambio de concentración de los gases medidos. Ello es debido a la
necesidad física de que el gas abandone el material sensible, lo cual es un proceso lento.

Todos los modelos MQ disponen de un calentador necesario para elevar la temperatura del
sensor, y que sus materiales adquieran la sensibilidad. Mientras el calentador no alcance la
temperatura de funcionamiento, la lectura del sensor no será able.

El tiempo de calentamiento depende de cada modelo de sensor. En la mayoría de modelos es NODEMCU, LA POPULAR PLACA DE DESARROLLO CON
ESP8266
su ciente para con unos pocos minutos pero algunos modelos requieren hasta 12 y 48 horas hasta
1 JUNIO, 2018
obtener mediciones estable.

Por otro lado, cada modelo necesita su propia tensión para alimentar el calentador. En muchos
modelos esta tensión es de 5V, pero algunos modelos tienen condicionantes especiales para la
alimentación.

El consumo de los sensores MQ puede ser elevado debido al calor necesario para funcionar el
calentador, que puede llegar hasta 800 mW en algunos modelos. Esto es superior a la potencia que
puede suministrar el regulador de Arduino, por lo que será necesario proporcionar una fuente de
alimentación externa.

A continuación, tenéis una tabla de resumen con los distintos modelos de sensores disponibles,
los gases a los que son sensibles, y algunos datos sobre el calentador.

No obstante, consultar detalladamente el Datasheet de cada sensor MQ particular antes de


ARREGLAR MICROSOFT SURFACE QUE NO HACE ZOOM
emplearlo para detallar sus especi caciones técnicas, especialmente la tensión de alimentación del CON LOS DEDOS
calentador, el tiempo de calentamiento, y la curva de sensibilidad del sensor. 29 MAYO, 2018

Modelo Sustancias detectadas Calentador

MQ-2 Metano, butano, GLP, humo 5V

MQ-3 Alcohol, Etanol, humo 5V

MQ-303A Alcohol, etanol, humo 0.9V

MQ-4 Metano, gas natural comprimido (GNP) 5V

MQ-5 Gas natural, GLP 5V

MQ-6 Butano, GLP 5V

MQ-306A Butano, GLP 0.9V


CONFIGURAR IP ESTÁTICA EN RASPBERRY PI
MQ-7 Monóxido de carbono Alternado 5V y 1.4V 27 MAYO, 2018

MQ-307A Monóxido de carbono Alternado 0.2 y 0.9V

MQ-8 Hidrógeno 5V

MQ-9 Monóxido de carbono, gases in amables Alternado 5V y 1.5V

MQ-309A Monóxido de carbono, gases in amables Alternado 0.2 y 0.9V

MQ-131 Ozono 6V

MQ-135 Benceno, alcohol, humo, calidad del aire 5V

MQ-136 Ácido sulfhídrico 5V

MQ-137 Amoniaco 5V

Benceno, tolueno, alcohol, acetona, INSTANT MESHES, SOFTWARE DE RETOPOLOGÍA 100%


MQ-138 5V QUAD
propano, formaldeido, hidrógeno
23 MAYO, 2018

MQ-214 Metano, gas natural 5V

MQ-216 Gas natural, gas carbón 6V

MG-811 Dióxido de cargono 6V

AQ-104 Calidad del aire *

AQ-2 Gases in amables, humo

AQ-3 Alcohol, Benceno

AQ-7 Monóxido de carbono

* Conviene ampli cación


CONSTRUIR UN ROBOT CON CADENAS CONTROLADO POR
ARDUINO

ESQUEMA DE MONTAJE
19 MAYO, 2018

El esquema eléctrico es sencillo. Alimentamos el módulo conectando GND y 5V a los pines


correspondientes de Arduino.

Ahora si queremos usar la lectura digital, conectamos la salida DO a una de las entradas digitales
de Arduino.

Opcionalmente, podemos calibrar el umbral de disparo de la salida digital con el potenciómetro


instalado en el módulo.

La conexión vista desde Arduino quedaría así,

Si quisiéramos emplear el valor analógico, simplemente conectaríamos la salida AO del sensor a


una entrada analógica de Arduino.

EJEMPLOS DE CÓDIGO

LECTURA DIGITAL
El siguiente ejemplo muestra la lectura digital del sensor. El código es muy, simplemente
utilizamos una entrada digital para comprobar el estado del sensor, empleando el puerto serie para
informar de la detección. En un ejemplo real, realizaríamos las acciones oportunas ante una
detección.

1 const int MQ_PIN = 2;


2 const int MQ_DELAY = 2000;
3
4 void setup()
5 {
6 Serial.begin(9600);
7 }
8
9
10 void loop()
11 {
12 bool state= digitalRead(MQ_PIN);
13
14 if (!state)
15 {
16 Serial.println("Deteccion");
17 }
18 else
19 {
20 Serial.println("No detectado");
21 }
22 delay(MQ_DELAY);
23 }

LECTURA ANALÓGICA
En el siguiente ejemplo realizamos la lectura analógica del sensor. Al igual que el anterior, es
código es muy sencillo. Simplemente empleamos una entrada analógica cualquiera para leer la salida
analógica del sensor, y mostramos el resultado por puerto serie.

1 const int MQ_PIN = A0;


2 const int MQ_DELAY = 2000;
3
4 void setup()
5 {
6 Serial.begin(9600);
7 }
8
9 void loop()
10 {
11 int raw_adc = analogRead(MQ_PIN);
12 float value_adc = raw_adc * (5.0 / 1023.0);
13
14 Serial.print("Raw:");
15 Serial.print(raw_adc);
16 Serial.print(" Tension:");
17 Serial.println(value_adc);
18
19 delay(MQ_DELAY);
20 }

LEER LA CONCENTRACIÓN
En el siguiente ejemplo, empleamos la lectura analógica para determinar la concentración del gas
normalmente en ppm (partes por millón), pero algunos sensores usan otras unidades como mg/L o
bpm (partes por billón)

El Datasheet de cada sensor proporciona unas grá cas que permiten obtener la concentración
del gas a partir de la relación entre la resistencia del sensor R0 y la resistencia medida Rs. También es
necesario conocer la resistencia Rl empleada en el módulo para realizar la lectura del sensor MQ.

Por ejemplo, la siguiente imagen muestra las curvas de concentración de cada gas medido en un
sensor MQ-2

Tendréis que tomar como referencia las curvas de concentración del Datasheet del sensor que

 estéis usando.

Las grá cas se disponen en escala logarítmica para ambos ejes y, en general, son
aproximadamente rectas bajo estas escalas. Por lo que la concentración resultará,

Para determinar la concentración necesitaremos la recta que la aproxima, para lo cuál debemos
coger dos puntos cuales quiera de las grá cas P0 = {X0, Y0} y P1 = {X1, Y1}, resultando la ecuación de
la recta

Siendo

[one_half]
[/one_half]

[one_half_last]
[/one_half_last]

1 const int MQ_PIN = A0; // Pin del sensor


2 const int RL_VALUE = 5; // Resistencia RL del modulo en Kilo ohms
3 const int R0 = 10; // Resistencia R0 del sensor en Kilo ohms
4
5 // Datos para lectura multiple
6 const int READ_SAMPLE_INTERVAL = 100; // Tiempo entre muestras
7 const int READ_SAMPLE_TIMES = 5; // Numero muestras
8
9 // Ajustar estos valores para vuestro sensor según el Datasheet
10 // (opcionalmente, según la calibración que hayáis realizado)
11 const float X0 = 200;
12 const float Y0 = 1.7;
13 const float X1 = 10000;
14 const float Y1 = 0.28;
15
16 // Puntos de la curva de concentración {X, Y}
17 const float punto0[] = { log10(X0), log10(Y0) };
18 const float punto1[] = { log10(X1), log10(Y1) };
19
20 // Calcular pendiente y coordenada abscisas
21 const float scope = (punto1[1] - punto0[1]) / (punto1[0] - punto0[0]);
22 const float coord = punto0[1] - punto0[0] * scope;
23
24 void setup()
25 {
26 Serial.begin(9600);
27 }
28
29 void loop()
30 {
31 float rs_med = readMQ(MQ_PIN); // Obtener la Rs promedio
32 float concentration = getConcentration(rs_med/R0); // Obtener la concentración
33
34 // Mostrar el valor de la concentración por serial
35 Serial.println("Concentración: ");
36 Serial.println(concentration);
37 }
38
39 // Obtener la resistencia promedio en N muestras
40 float readMQ(int mq_pin)
41 {
42 float rs = 0;
43 for (int i = 0;i<READ_SAMPLE_TIMES;i++) {
44 rs += getMQResistance(analogRead(mq_pin));
45 delay(READ_SAMPLE_INTERVAL);
46 }
47 return rs / READ_SAMPLE_TIMES;
48 }
49
50 // Obtener resistencia a partir de la lectura analogica
51 float getMQResistance(int raw_adc)
52 {
53 return (((float)RL_VALUE / 1000.0*(1023 - raw_adc) / raw_adc));
54 }
55
56 // Obtener concentracion 10^(coord + scope * log (rs/r0)
57 float getConcentration(float rs_ro_ratio)
58 {
59 return pow(10, coord + scope * log(rs_ro_ratio));
60 }

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección

 tutoriales de Arduino

Anuncio:

 Arduino,Arduino intermedio,Gases,Sensores

PREVIOUS

 RELOJ Y CALENDARIO EN ARDUINO CON LOS RTC DS1307 Y DS3231


NEXT

 DETECTOR DE METALES CON ARDUINO Y SENSOR INDUCTIVO

TAMBIÉN TE PUEDE GUSTAR

LIBRERÍA DE ARDUINO
TRIANGLESOLVER

LIBRERÍA DE ARDUINO
PROPERTYCHANGE
BRAZO ROBÓTICO CONTROLADO POR
ARDUINO: PRESUPUESTO

LEER, GRABAR, O EMULAR TAGS NFC


CON ARDUINO Y PN532

CONTROLA HASTA 12 SENSORES


TÁCTILES CAPACITIVOS CON ARDUINO
Y MPR121

ESP8266, LA ALTERNATIVA A ARDUINO


CON WIFI

20 ¡DEJA UN COMENTARIO!...

15  5  0 

15

 newest  oldest

Leonardo

Hola Luis! Muy buen material.. Muchas felicitaciones por todo tu trabajo!
Permitime hacerte dos consultas.. Es correcto colocar X0 en 100? Dado que se muestra que está
fuera de rango dicho punto en la grá ca. Como efectuaste la regresión logaritmica?
Saludos! Leonardo

Reply  1 year ago 

luisllamas

Porque son los valores para mi sensor, una vez calibrado. Disculpa, culpa mía por no haberlo
explicado bien. He cambiado los valores para que parezcan los del Datasheet del MQ-2 sin
calibración, y añadido dos comentarios en la entrada para que quede más claro. Respecto a la
regresión logarítmica y la calibración solo puedo decir… ¡u , que mal recuerdo tengo de este
sensor! Con un medidor de gases de combustión (de los que se usan para medir el rendimiento
de una caldera), ajustando con una hoja Excel, .. no había forma de que ninguno de los dos dieran
un punto… Read more »

Reply  1 year ago 

Leonardo

Muchísimas gracias Luis! Estoy pasando por una situación muy semejante, estoy haciendo
una especie de datalogger sobre un tipo de estufa rusa.. creo que almacenaré los datos del
ADC para procesarlos fuera y no perder las mediciones.. Muchísimas gracias nuevamente y
felicitaciones por tu trabajo.. Da muchísimo gusto leer tus artículos, realmente hubiera sido
muy bueno haberlos tenido de soporte varios años atrás.. Saludos desde Argentina!

Reply  1 year ago

Sebastián

Demasiado agradecido por tu labor. Estaré atento a tus proyectos y recomendaré este sitio. De
nuevo gracias.
Reply  1 year ago

Santy Media

Muy Agradecido!! Gran Trabajo!!

Reply  1 year ago

Andres Scabuso

Eternamente agradecido. Realmente me sirvio demasiado.

Reply  1 year ago

luisllamas

Si, hasta 800mW. Estos sensores lleva un calentador y consumen una barbaridad. En general, tienes
que usar alimentación independiente.

Reply  9 months ago

Sebastian

Hola alguno sirve para gas refrigerante de aire acondicionado?

Reply  6 months ago

Javi

Hola, hay una errata en el codigo,

donde dice…….lectura analogica;

bool raw_adc = analogRead(MQ_PIN);

es…..

oat raw_adc = analogRead(MQ_PIN);

Reply  6 months ago 

Luis

Bueno, en realidad debería decir int. Pero tienes razón, había una errata, se había quedado el bool
del ejemplo digital. Ya está arreglado. Gracias!

Reply  6 months ago

PigmaDominguez

Hola buen día, muy interesante tu post, ¿Me podrias Apoyar a calibrar el sensor mq-135?, Empiezo a
trabajar con el sensor Mq135 y necesito leer Amoniaco.

No entiendo bien lo de la regresión y seguir la gra ca del Datasheet.

espero me puedas apoyar.

Reply  5 months ago

LourdesT

hola que tal? buen material, como jaste los valores de R0 y RL?

Reply  4 months ago

Grimaldo

Saludos, Luis. Te quiero consultar si este sensor sirve para detectar concentraciones de CO2 de 5%
del total de gas en un ambiente cerrado, si es able o necesito otro sensor que sea mas especí co.
Gracias, Saludos.

Reply  4 months ago

Emanuel

Hola Luis, excelente material, muy buen trabajo, te hago una consulta
Como Calculaste o de donde sacaste los Valores de RL_VALUE y R0 :
const int RL_VALUE = 5; // Resistencia RL del modulo en Kilo ohms
const int R0 = 10; // Resistencia R0 del sensor en Kilo ohms

Reply  4 months ago

Ernesto

necesito hacer el programa de sensor de gas con lectura análogica de arduino uno que indique la
concentración de gases mediante 4 leds.
de diferente color 1 verde(seguro), dos amarillos(primera y segunda precaucion), y rojoy cuando este
en rojo que encienda la alarma. alguien que me ayude?

Reply  3 months ago 


Luis

Hola! En esta entrada tienes como emplear un sensor detector de gas y en esta
https://www.luisllamas.es/encender-un-led-con-arduino/ como encender un LED. ¡Buena suerte!

Reply  2 months ago

Miguel

Luis. Felicidades !!
Tengo una duda.

Podemos almacenar los datos de un sensor (por ejemplo monoxido de nitrogeno) en ua targeta SD o
similar. Para luego descargar los datos medidos??

Reply  1 month ago 

Luis

Claro que sí! Échale un ojo a la entrada sobre tarjetas SD y Arduino


https://www.luisllamas.es/tarjeta-micro-sd-arduino/

Reply  1 month ago

ziceck

Qué concentración es la que está leyendo? en la grá ca se muestran varias, pero no entendí la
concentración de que gas es la que se calcula en el ejemplo.

Reply  20 days ago

Gustavo

hola casi no se de esto me podrían ayudar con la función de transferencia de el sensor mq-9 o saber
cuantas pmm tengo por cada mini voltio o algo asi

Reply  19 days ago

Excepto notación expresa, los contenidos de


este sitio se ofrecen bajo licencia Creative
Commons License BY-NC-SA.

Más información

LIBRERÍA DE ARDUINO TRIANGLESOLVER


5 JUNIO, 2018

NODEMCU, LA POPULAR PLACA DE DESARROLLO CON


ESP8266
1 JUNIO, 2018
ARREGLAR MICROSOFT SURFACE QUE NO HACE ZOOM
CON LOS DEDOS
29 MAYO, 2018

Copyright ©2018, Todos los derechos reservados

Aviso legal

Política de cookies Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Más información en Leer más Aceptar