Los sensores MQ nos permiten tomar lecturas de distintos gases que puede haber en el aire, algunos de ellos extremadamente peligrosos y/o nocivos y dificilmente detectables sin hacer uso de la tecnología, por lo que la utilidad de estos pequeños- y en la mayoria de los casos economicos- sensores es enorme.
Existen distintos modelos de sensores MQ, cada uno de ellos especializado en detectar uno o varios gases determinados, veamos una lista de los sensores MQ más populares y que tipo de gases son capaces de detectar:
Modelo | Gas detectado |
---|---|
MQ-2 | Gases combustibles (Metano, propano... ) |
MQ-3 | Alcohol |
MQ-4 | Gas natural y metano |
MQ-5 | Gas natural |
MQ-6 | Propano |
MQ-7 | Monóxido de carbono |
MQ-8 | Hidrógeno |
MQ-9 | CO y gases combustibles |
MQ-131 | Ozono |
MQ-135 | NH3, Benceno, Alcohol y humo |
MQ-136 | H2S |
MQ-811 | Dioxido de carbono |
Pese al abanico de modelos todos ellos se conectan y usan de la misma forma, por lo que este tutorial es común para todos ellos.
Todos los sensores MQ-x cuentan con 6 patillas de un grosor superior al de un pin habitual.
Este es el pin out de estos sensores:
Conectando cada pin a dónde esta indicado y la salida (marcada cómo "to analogic input pin") a la entrada analógica de cualquier microcontrolador (o a un pin analógico de Arduino) podríamos tomar medidas del sensor. De esta forma la salida del sensor nos estaría dando la cantidad de gas medido.
Ten en cuenta que esta forma de medir no nos dará directamente un resultado en partes por millón, sino que ultimamente tendremos un valor proporcional a la cantidad de gas que está leyendo el sensor dentro de la resolución de nuestro microcontrolador. Dicho de otra manera, supongamos que estamos usando Arduino para realizar estas lecturas. Los pines analógicos de Arduino pueden devolver un valor que va desde 0 (cuando reciben 0V) hasta 1023(cuando reciben 5V). El sensor nos va a devolver una tensión proporcional a la lectura que está tomando dentro de un margen de detección, es decir, si nuestro sensor es capaz de leer desde 20ppm hasta 50.000ppm Arduino nos motrará 0 cuando la lectura sea menor de 20ppm y 1023 cuando el sensor esté detectando 50.000ppm o más. Un poco más adelante veremos cómo convertir este valor en una medida que podamos emplear (en ppm)
Otra opción que podría resultar interesante sería leer el sensor de forma digital en lugar de analógica, es decir fijar un umbral a partir del cual la salida cambia de ser un 0 a ser un 1 y podemos decir que existe presencia de ese gas. Esto no puede hacerse directamente desde el sensor, pero podemos conseguirlo con un sencillo montaje:
Con el potenciómetro podemos ajustar el umbral a partir del cuál el sensor devolverá un 1.
Antes de empezar a tomar medidas fiables de estos sensores tenemos que hacer un proceso de puesta en marcha y calibración de los mismos, este proceso consta de dos partes: El quemado y la calibración propiamente dicha.
La primera fase es la de quemado, para ello tenemos que dejar nuestro sensor conectado a su alimentación (las patillas 5V y GND) durante 24 de forma ininterrumpida.
A continuación explicaremos el proceso de calibración. Este proceso unicamente es necesario si queremos lecturas analógicas muy precisas, consiste en detectar que desviación tiene nuestro sensor respecto a la realidad y aplicarlo a la hora de calcular las lecturas.
Para ello todas las librerías que utilizamos llevan siempre un metodo llamado getRzero, cuya misión es devolvernos el valor de la resistencia del sensor. Al estar trabajando en valor analógicos cualquier resitencia interna del sensor se traduce en un margen de error en la lectura.
Supongamos que usamos Arduino y que tenemos la salida de nuestro sensor conectado al pin A0, ahora cargariamos un sketch cómo este:
A continuación buscariamos el fichero .h de nuestra librería (Estará en la carpeta libraries de Arduino, en una carpeta que se llamará igual que la librería.), abrimos el fichero con cualquier editor de texto plano (notepad, gedit...etc) y buscamos una línea en la que aparezca #define RZERO sustituimos el valor que pone a continuación por el que nos ha devuelto Arduino por su consola ¡y listo!
Si llevar la precisión hasta el limite no es algo necesario para tí puedes saltarte estos pasos y asumir que 0 se corresponde con el valor mínimo que el sensor es capaz de leer y 1023 con el máximo. De esta forma unicamente tienes que mapear los limites de sensibilidad del sensor a los limites de resolución del microcontrolador que estas utilizando, veamos un ejemplo y despúes veamos cómo ser haría:
Supongamos que estamos usando un sensor que puede leer desde 20ppm hasta 10.000, y que lo estamos leyendo con un Arduino que devuelve valores analógicos de entre 0 y 1023. En este caso podemos asumir que cuando Arduino lea 0 el valor será igual o menos a 20ppm y cuando lea 1023 será porque tenemos una concentración igual o superior a 10.000. Ahora lo que necesitamos es pedirle a Arduino a que se corresponden los valores intermedios y eso podemos hacerlo mapeando las lecturas de la siguiente forma:
int lectura; void setup(){ Serial.begin(9600); } void loop(){ lectura = analogRead(A0); lecturaEnPPM = map(lectura, 0, 1023, 20, 1023); Serial.println(lecturaEnPPM); }
Aquí os dejamos una lista de librerías para cada sensor, algunas las hemos creado nosotros y tenemos la intención de seguir mejorandolas y haciendo librerías para el resto de sensores.
MQ135 |
MQ-07 (En desarrollo) |
MG-811(En desarrollo) |
Todas ellas tienen los siguientes métodos y funciones que podemos emplear:
Devuelve la lectura en unidades de partes por millón
Devuelve la lectura en unidades de partes por millón aplicando un factor de corrección en función de la humedad y la temperatura
Devuelve un valor de 0 que depende de la resitencia interna del sensor y que se utiliza para calibrarlo (consultar el apartado de calibración)
Devuelve un valor de 0 aplicando un factor de corrección en función de la humedad y la temperatura. Este valor depende de la resitencia interna del sensor y que se utiliza para calibrarlo (consultar el apartado de calibración)
Algunas librerías cuentan con más funciones, pero aquí hemos descrito las que son comunes a todas.
Esperamos que este tutorial te haya resultado útil, ¡ya puedes incluir sensores de gas en tus proyectos!