La compañía Hanwei electronics fabrica una familia de sensores de gas de muy bajo coste diseñados para detectar la presencia de distintos componentes químicos presentes en el aire y que son muy fáciles de conectar eléctricamente a nuestro equipo de control. Son muy utilizados en el mundo Arduino y encontraréis muchos artículos en internet con sistemas que los utilizan, aunque muchos de ellos son incompletos o con simplificaciones tan grandes que los hacen totalmente inutilizables.

 

Imagen 2900

 

Antes de nada. En este artículo sólo trataremos estos sensores desde el punto de vista puramente académico. NO PRETENDEMOS CONSTRUIR EQUIPOS PROFESIONALES DE DETECCIÓN DE GASES. El uso profesional de estos sensores debe estar avalado por fuertes comprobaciones y medidas de certificación que exceden totalmente de nuestros objetivos.

 

La construcción de estos sensores sigue siempre un mismo esquema electrónico, que mostramos a continuación:

 

MQ7 Esquema Electronico

 

El módulo tiene un conector de cuatro pines. Dos se utilizan para la alimentación (+5V ó VCC y GND), el tercero para generar una salida analógica del valor leído (AO ó AOUT) y el cuarto para generar una salida digital (DO ó DOUT) que se excita cuando se alcanza un determinado valor de lectura.

 

Imagen 2896

 

MQ3 1

 

El corazón del módulo es el sensor. Básicamente una cápsula con una resistencia de caldeo que se alimenta con la tensión de 5V para lograr la temperatura necesaria y un material que varía su resistencia en función de la concentración del componente químico que queremos detectar presente en el aire. La resistencia de caldeo está conectada en serie con una resistencia de 5,1Ω, aunque este punto a efectos de la utilización del sensor no es relevante. Lo mencionamos porque no hay que confundir esta resistencia con una segunda muy importante (la resistencia de carga RL) que veremos más adelante.

 

Imagen 2903

 

Imagen 2897

 

La capsula del sensor hemos dicho que se comporta como una resistencia cuyo valor varía en función de la concentración de gas presente en el aire. A esta resistencia la vamos a llamar Rs. En combinación con una segunda resistencia de 1KΩ construimos un divisor de tensión alimentado a 5V. A esta segunda resistencia la llamaremos resistencia de carga RL. El esquema sería el siguiente:

 

Imagen 2894

 

Por lo tanto, midiendo la tensión en el pin de salida AO, podemos calcular el valor de la resistencia del sensor en cada momento. En los divisores de tensión sabemos que se cumple que Vout = Vin ( R2 / (R1 + R2) ). En nuestro caso, tenemos que la tensión Vad = 5 ( 1000 / (RS + 1000) ). Despejando en esta fórmula tendremos que:

 

Rs = ( 5000 / Vad ) - 1000  (fórmula 1)

 

Además de la salida analógica, los sensores MQ tienen también una salida digital.  El funcionamiento de la misma es muy sencillo. La salida de tensión obtenida se mete en el pin menos de la entrada de un amplificador operacional. El pin más del amplificador se alimenta con un valor de tensión que podemos variar con ayuda del potenciómetro. De esta manera, cuando la salida de tensión obtenida del sensor es mayor que el valor regulado por el potenciómetro, la salida del amplificador se pone a uno (excitamos la salida digital). Si el valor de tensión obtenido en el sensor es menor que el valor regulado por el potenciómetro, la salida del amplificador se pone a cero.

 

Todos los sensores MQ disponen de un led que se excita con la salida del amplificador operacional facilitando así una identificación óptica de que se ha superado el nivel de presencia de gas. Algunos sensores MQ tienen también un led para indicar la presencia de tensión de alimentación, aunque otros sensores de esta familia no lo traen.

 

Ya tenemos todos los ingredientes de hardware para obtener una salida de tensión variable en función de la presencia de un determinado gas usando un sensor MQ que puede ser leída muy fácilmente por nuestro microprocesador utilizando cualquiera de las entradas analógicas disponibles. Y también podemos obtener fácilmente una salida digital que nos indica cuando hemos superado un determinado umbral de presencia de ese gas que regulamos con ayuda de un potenciómetro y que también puede ser leída muy fácilmente por nuestro microprocesador utilizando una de sus entradas digitales.

 

Hasta aquí las buenas noticias. Ahora empiezan las menos buenas.

 

El uso de los sensores MQ se complica cuando queremos saber cual es la concentración de un determinado gas en el aire. O, dicho de otra forma, cuando queremos convertir la medida de voltaje obtenido en la salida analógica en concentraciones (partes por millón, miligramos por litro) de Co, LPG, butano, CH4, etc.

 

Primera dificultad. La medida depende de la temperatura y humedad del aire.

 

Segunda dificultad. La función que relaciona concentraciones de gas con voltaje obtenido a la salida no es lineal y en la documentación técnica no se incluye la ecuación de la curva.

 

Tercera dificultad. La resistencia de dos sensores diferentes para una misma concentración de gas no siempre es la misma.

 

Cuarta dificultad. Un sensor reacciona a la presencia de más de un gas. Y además lo hace variando de forma diferente su resistencia en función del gas que esté presente en el aire. Por ejemplo el sensor MQ2 reacciona a la presencia de LPG, propano, butano, metano, alcohol e hidrógeno.

 

Quinta dificultad. La resistencia de caldeo tiene un consumo relativamente alto. Unos 750mW que tendremos que tener muy en cuenta cuando construyamos nuestro circuito electrónico.

 

Suena desalentador. Pero, con un poco de paciencia, podemos descubrir que podemos usar los sensores MQ en nuestros proyectos educativos. Y, no debe olvidársenos, que son muy baratos y sencillos de conectar con nuestro microprocesador desde el punto de vista eléctrico. Vamos a ir paso a paso.

 

En primer lugar, vamos a conectar nuestro sensor MQ a nuestro Arduino. Vamos a ver un ejemplo con el sensor MQ3 que está especialmente indicado para detectar la presencia del alcohol en el aire. Alimentaremos el sensor con cinco voltios usando los pines VCC y GND. A continuación uniremos el pin de la salida analógica del sensor (AO) con uno de los pines de entrada analógica de nuestro equipo Arduino. Por ejemplo, el pin AD2 (la entrada analógica 2) de nuestro Arduino.

 

Imagen 2895

 

Las entradas analógicas de los equipos arduino van desde 0 a 1023, siendo cero el valor correspondiente a una entrada de 0V y 1023 el valor correspondiente a una entrada de 5V. El resto de valores mantiene la linealidad. Así pues podemos utilizar una variable de tipo entero (la llamaremos iMQ3) para recoger el valor leído por nuestra entrada analógica. La sentencia de código será:

 

iMQ3 = analogRead(2);

 

A continuación, convertiremos la lectura a valores de voltaje. Puesto que 5V son 1023 unidades, cada unidad es 5/1023 de voltio (0,004888 Volts). Crearemos una variable (fMQ3) para recoger el valor en voltios de la lectura, que en este caso debe ser del tipo float porque necesitamos decimales. Observar que usamos 5.0 y 1023.0 para asegurarnos que el compilador entienda que estamos usando valores float en la operación. La sentencia de código será:

 

fMQ3 = iMQ3 * 5.0 / 1023.0;

 

Ahora podemos aplicar la fórmula 1 que hemos visto antes para calcular el valor de la resistencia del sensor en función de la tensión leída a la salida. Para guardarla usaremos una nueva variable float (fMQ3R). La sentencia de código será:

 

fMQ3R = ( 5000.0 / fMQ3) - 1000.0;

 

Como en el caso de que la lectura analógica fuera cero, la variable fMQ3 valdría también cero, debemos modificar un poco nuestra sentencia de código para evitar una división por cero. En este caso, si la tensión de salida es 0 significa que tenemos que tener una resistencia muy alta en el sensor, así que le asignamos un valor muy grande directamente (8MΩ, por ejemplo). Así que el código debería quedar así:

 

if (fMQ3 == 0) { fMQ3R = 8000000;}
else { fMQ3R = ( 5000.0 / fMQ3) - 1000.0;}

 

Ya tenemos la forma de obtener el valor de la resistencia del sensor en cada momento. Nos resultará sencillo comprobar el valor de la lectura usando la consola. Así que ya estamos en condiciones de obtener el primer valor importante en nuestro camino para descubrir la concentración de gas. Como dijimos con anterioridad no todos los sensores ofrecen un mismo valor de resistencia para un mismo valor de concentración de gas y además este tipo de sensor está muy condicionado por la temperatura y humedad donde se encuentre ubicado. Por eso, lo primero que es necesario hacer, es llevar a cabo una calibración de nuestro sensor.

 

Calibrar el sensor significa que deseamos averiguar el valor de resistencia del sensor para un valor conocido de concentración. El valor más fácil de medir es la ausencia de concentración de gas (aire limpio). Así que colocaremos nuestro equipo en su lugar cuando el aire esté limpio del gas que queremos medir (es decir, bien ventilado) y apuntaremos la medida de resistencia obtenida. Ese valor lo llamaremos fMQR3o y puede ser diferente para cada sensor que tengamos que utilizar. Por ese motivo, lo que haremos es crear una constante en nuestro código y asignarle el valor encontrado. En nuestro caso es 27k4Ω. Así que nuestro código será:

 

const float fMQ3Ro = 27400;

 

Aquí tenemos que hacer una aclaración. Hemos repetido varias veces que nuestro ámbito es el educativo y por eso hemos propuesto un método de trabajo para calcular nuestra Ro muy 'casero' consistente en comprobar el estado de nuestro sensor en el lugar donde lo queremos usar. En internet se puede encontrar otras soluciones. Por ejemplo, que durante los diez primeros minutos de conectar nuestro equipo estemos realizando medidas, calculemos la media y aceptemos este valor como Ro. El lector deberá hacer lo que considere mejor si no considera nuestra solución válida para su caso.

 

Si leemos con detenimiento la hoja de datos del sensor, veremos que nos dice que para que el sensor se estabilice y podamos tener una lectura fiable, debe estar al menos 24 horas en funcionamiento para que la resistencia de caldeo alcance la estabilidad en lo referente a su temperatura. Puesto que, como ya dijimos, nuestro trabajo está orientado a la formación, no es necesario poner a prueba nuestra paciencia y con menos tiempo será más que suficiente.

 

Una vez que tenemos calculada la resistencia de calibración de nuestro sensor ya podemos pasar a estudiar el procedimiento para averiguar la concentración de gas que se corresponde con la medida que estamos recibiendo de la resistencia del sensor. Para calcularlo no tenemos otra herramienta que consultar la tabla de sensibilidad que podemos encontrar en la especificación técnica del sensor.

 

Nota del autor: Si algún lector conoce la ecuación de la curva mostrada en estas gráficas y nos la hace llegar, le estaremos muy agradecidos.

 

Imagen 2902

 

La escala de la curva no es lineal sino de tipo logarítmico. Para el que tenga dudas de lo que esto significa, podéis consultar el siguiente enlace de la wikipedia para encontrar más información: https://es.wikipedia.org/wiki/Escala_logarítmica

 

En el eje y tenemos los valores de lectura del sensor. Es muy importante tener en cuenta que utiliza el cociente del valor de resistencia medido, dividido por el valor de resistencia de calibración. Dicho de otra forma, aceptamos que la resistencia de calibración es la obtenida en un aire limpio y, a partir de ese valor, la concentración de gas la deducimos por lo que haya variado la resistencia con respecto al valor del aire limpio.

 

En el eje x tenemos los valores de concentración de gas. En nuestro caso mg/L de alcohol porque estamos viendo el ejemplo del sensor MQ3. El rango de valores posibles es de 0,1 a 10 mg/L.

 

Cuando tenemos aire limpio la resistencia Rs es igual a Ro y, por lo tanto, su cociente es 1. Si buscamos en la gráfica el valor 1 en el eje y, veremos que en el eje x obtenemos una lectura de concentración de gas es de 0,4mg/L (el valor de presencia de alcohol en el aire limpio).

 

Cuanto mayor sea la resistencia de nuestro sensor el cociente Rs / Ro aumenta y, como podemos ver en la gráfica, la concentración de gas en el aire es menor. Es decir mayores concentraciones de gas en el aire nos proporcionan lecturas de valores menores de resistencia.

 

Desgraciadamente, la especificación técnica del sensor no incluye la ecuación de la curva (no nos lo iban a poner fácil). Así que no tenemos más remedio que dar un salto en el vacío. Tenemos que tomar tantos puntos de la curva como podamos y calcular a ojo los valores de x e y de ese punto. Cuando tengamos un número suficiente de puntos podemos utilizar algunos de los programas de cálculo presentes en el mercado para calcular la ecuación de la curva. O sea, que se pueden calcular unos valores con poca calidad y eso contando con una vista de lince para obtener los valores desde la gráfica. Al proceso para obtener la ecuación de la curva a partir de una serie de puntos concidos de la misma se le llama regresión. Existen varias formas de obtener la regresión (lineal, cuadrática, exponencial, logarítmica, etc.) En la web Wolfram-Alpha encontramos un herramienta gratuita que nos ofrece la ecuación de la curva a partir de la introducción de puntos conocidos aplicando diversos métodos.

 

Así que, valor y al toro, a saltar. Vamos a usar una de las fórmulas que aparecen en el libro 'Sensores y actuadores. Aplicaciones con Arduino' de los autores Leonel Corona, Griselda Abarca y Jesús Mares del grupo editorial Patria:

 

mg/L = 0,354 ( Rs/Ro) (-1,518)

 

Al igual que Groucho Marx, si no le gusta esta fórmula tengo más. En internet he encontrado esta otra:

 

mg/L = 0,4091 (Rs/Ro)( -1,497)

 

¿Confusos por el hecho de que haya más de una fórmula? Recordemos que estamos obteniendo la ecuación de la curva por una aproximación mediante la utilización de múltiples puntos fruto de la observación. Por ese motivo hay varias fórmulas, porque en realidad ninguna es exacta. Cada una pretende acercarse lo más posible a la representación de la realidad observada. Para entenderlo mejor, vamos a poner en una tabla los valores de lectura Rs/Ro, los valores correspondientes de concentración valorados por mí viendo la curva, el valor que obtendríamos con la primera ecuación y el valor que obtendríamos con la segunda ecuación. En cada una de las tres columnas hay errores: en la segunda los que han provocado mis ojos, en las otras dos los que provoca la 'aproximación' que ofrece la regresión utilizada para calcular la ecuación.

 

Imagen 2904

 

Como ejemplo, vamos a calcular la curva del sensor MQ3 utilizando las herramientas para hacer la regresión que nos ofrece Office-Excel 2017.

 

El primer paso, es construir una tabla con la mayor cantidad posible de puntos que consigamos determinar:

 

Imagen 302 

 

A continuación seleccionamos toda la tabla y usamos la opción Insertar -> Gráfico de dispersión.

 

Imagen 303

 

Seleccionamos el gráfico de puntos y se colocará en nuestra hoja.

 

Imagen 304

 

Seleccionamos los puntos, haciendo click con el ratón encima de alguno de ellos.

 

Imagen 305

 

Y desde el menú contextual seleccionamos la opción 'Agregar línea de tendencia'.

 

Imagen 306

 

En el panel que se abre a la derecha, podemos escoger el tipo de regresión que queremos utilizar.

 

Imagen 307

 

A medida que usamos un método de regresión o otro, en el gráfico se va mostrando la línea de tendencia, con lo que podemos utilizar el método que mejor se acerque a nuestro objetivo. En este caso mostramos la regresión lineal que es la ecuación de una recta y, lógicamente, deja practicamente todos los puntos fuera de la misma.

 

Imagen 308

 

Si escogemos la regresión potencial obtendremos para nuestro caso un resultado mucho mejor.

 

Imagen 309

 

Si además marcamos la casilla 'presentar ecuación en el gráfico", Excel nos presenta la ecuación dentro de la gráfica.

 

Imagen 310

 

Podemos, añadir una columna en nuestra tabla utilizando la fórmula obtenida para observar los errores comparativamente con los datos obtenidos en nuestra observación visual.

 

Imagen 311

 

Para este proyecto, vamos a usar la primera de las fórmulas que vimos en el libro 'Sensores y actuadores. Aplicaciones con Arduino'. Nuestro código para almacenar el valor de la concentración de alcohol en el aire expresada en mg/L dentro de la variable fMQ3grL sería el siguiente:

 

fMQ3grL = 0.354 * ( pow( ( fMQ3R / fMQ3Ro ) , (-1.518) ) );

 

Hemos utilizado voluntariamente todos los paréntesis para facilitar la interpretación de lo que estamos poniendo en cada parte de la sentencia. En la siguiente imagen tenemos el código con todos los pasos y donde añadimos una segunda variable fMQ3grL2 para mostrar el resultado de aplicar la segunda ecuación.

 

Imagen 2906

 

Y en la siguiente imagen, una captura de pantalla de un panel de control construido con el taller IoT de Proteus . En el tercer espacio empezando por la izquierda hemos utilizado varios displays de 7 segmentos para mostrar los cinco valores de las variables que acabamos de ver. El valor en unidades de medida analógica (33), el valor correspondiente en voltios (0,2), el valor de la resistencia expresada en kΩ (30,0), el valor en gr/L obtenido aplicando la primera ecuación y el valor en gr/L obtenido aplicando la segunda ecuación.

 

Imagen 2905 

 

Con todo este material ya tenemos suficiente para que el alumno pueda empezar a practicar. Propongo algunas prácticas:

 

  1. Encontrar la ecuación de la curva de diferentes sensores MQ y aplicarla para obtener las concentraciones de diferentes gases.
    1. Curva de butano usando MQ2
    2. Curva de metano usando MQ3.
    3. Curva de CO usando MQ7
    4. Curva de los gases desprendidos por un motor de combustión usando MQ235.
  2. Para cuando no disponemos de la ecuación de la curva, calcular el valor de concentración del gas en función de la resistencia del sensor utilizando pares de puntos (x,y) para encontrar el segmento dentro del cual nos encontramos y luego dentro de ese segmento una regla de tres para obtener el valor.

 

Como siempre, nos encantaría que nos hagáis llegar vuestros comentarios y sugerencias.

 

Comparte este artículo en redes sociales

Submit to FacebookSubmit to Google PlusSubmit to TwitterSubmit to LinkedIn