Sensores de CO2: MH-Z19

Objetivos

 

  • Presentar el sensor MH-Z19 sensor de CO2 NDIR.
  • Ver sus carcateristicas.
  • Mostrar su conexión via puerto serie.
  • Preparar un primer programa de uso.
  •  

    Material requerido

     

     Vista principal Un Arduino MEGA
     Sensor de CO2 Un Sensor HX-Z19
     Breadboard Un par de protoboards

    Mas sobre Sensores de C02

     

    Controlar  las concentraciones de CO2 en nuestro entorno de trabajo o estudio es algo que cada día se revela mas imprescindible, porque hay estudios (Supuestamente serios, aunque nunca se sabe) que muestran que un aumento injustificado de esta concentración indica en primer lugar una mala ventilación lo que ya de por si puede generar problemas de concentración en trabajadores o estudiantes, y por otro lado, relaciona el aumento de CO2 y la falta de ventilación, con una mayor probabilidad de contraer el dichoso virus.

    Todo esto ha llevado a que la comunidad europea siempre dispuesta a legislar cosas, esté preparando un borrador de una ley para pedir que en aulas y oficinas se controle esta concentración de modo que se pueda considerar aceptable entre 400 y 600 ppm de CO2 pero se encienda una luz amarilla a partir de 800 ppm y si llegamos a los 1.000 ppm se encienda una luz roja y en principio se evacue la sala hasta que las concentraciones disminuyan a niveles aceptables.

    En sesiones anteriores ya vimos que el sensor CCS811 era un sistema de medida de gases tipo VOC (Volatile Organic compounds) y que medía una serie de gases desaconsejables para la salud humana (En largas exposiciones) y que estimaba el contenido de CO2 en base a las medida de los VOCs,  pero no era un sensor puro de CO2 y eso nos lleva a preguntarnos hasta qué punto la estimación que hace es suficientemente precisa.

    Y claro cuando nos entra la duda, no hay mas remedio que volver a las fuentes y buscar un sensor de CO2 puro que a ser posible sea poco sensible a otros gases que pudieran despistar nuestras medidas y actualmente hay en el mercado un para de sensores de este tipo (Y coste aceptable) que los hacen ideales para medir con buenas garantías la cantidad de CO2 en nuestro entorno.

    Estos sensores son el MG811 similar a los de la serie MQ que ya hemos visto en otras ocasiones y el segundo es el MH-Z19.

    Así que ni corto ni perezoso me compré unos cuantos sensores de cada y empecé las pruebas. La primera fue en la frente: Los MG811 , que había comprado a dos proveedores diferentes, porque uno es perro viejo, no funcionaban en absoluto y os conviene tener cuidado con esto si vais a comprarlos por Internet, porque la mayor parte de estos, por lo que he podido comprobar leyendo por ahí, vienen con una mierda de circuito que solo saca la salida digital contra el comparador que regulas con el potenciómetro de ajuste incluido, pero no te pasan la señal analógica debidamente amplificada.

  • El resumen es que toda la partida de estos sensores son virtualmente inútiles. Como cuestan una pasta y parece que el sensor incluido es correcto, estamos montando unas placas con el diseño feten para intentar aprovechar los sensores y conseguir que la catástrofe acabe en problema y no en tragedia. Os iré informando de como va la cosa. De momento esperando las placas y los componentes para las pruebas.  [/fancy-ul] [/three-fourth]
  •  

    La segunda opción parecía mas prometedora con los sensores MH-Z19 que han bajado mucho de precio y que prometen una buena sensibilidad a precio razonable, son precisos y muy fáciles de usar por lo que vamos a dedicar esta sesión a conocerlos un poco para aquellos que queráis hacer medidas precisas de CO2.

    El sensor MH-Z19<

     

    Este sensor utiliza el principio NDIR ( Non Dispersive Infra Red) para medir con notable precisión la concentración de CO2 en el aire. El sensor es básicamente un tubo abierto que recoge el aire en la zona, con un diodo infrarrojo en un extremo y un receptor de luz en el otro extremo.

    Sensor de CO2

    Como el CO2 absorbe la luz infrarroja, la cantidad de luz que se recibe en el detector es  inversamente proporcional a la concentración de CO2 en el aire y no depende gran cosa de que haya otros gases, o de la humedad relativa (A diferencia de otro tipo de sensores ) y además dispone de un sistema interno para compensar las variaciones de temperatura. Aquí os dejo la hoja de normas del HX-Z19

  • El motivo por el que el CO2 es un gas invernadero tan potente, se debe a que permite que la luz visible cruce la atmosfera hasta tierra, donde esta se calienta y emite parte de este calor en forma de radiación infrarroja que el CO2 atmosférico bloquea y evita que se disperse en el espacio de forma inofensiva.  [/fancy-ul] [/three-fourth]
  •  

    Sensor de CO2 HX-Z19

    De hecho,si miras por la ventana lateral del sensor verás un destello de luz roja cada vez que el sistema realiza una medida.

    Otra virtud del MH-Z19 es que es muy fácil de usar. Dispone de tres métodos directos, el primero es una puerta serie por la que envía sin mas las medidas de CO2 ambiental a 9.600 baudios y que es de lo más fácil de recibir en Arduino. El MH-Z19 entrega directamente la concentración de CO2 en ppm (Partes por millón) sin otras complicaciones

    El segundo método es una señal modulada en pulsos (PWM) que nos indica la concentración de dióxido de Carbono y que es también bastante fácil de leer en nuestros queridos Arduinos.

    El tercer método es leer una señal analógica proporcional a la concentración de CO2 que tienes que calibrar en función de las medidas que te va dando y que tiene poco sentido usar ya que nos entrega una salida perfecta a través de la puerta serie,

    Y hay un tercer método que consiste en leer mediante un convertidor analógico a digital de nuestros Arduinos la salida Vo, que nos entrega una señal analógica proporcional a la concentración de dióxido de carbono.

    En este caso, como somos vagos, vamos a utilizar el método de la puerta serie porque nos encanta eso de que nos de las lecturas directas sin trabajar más.

    Conectando nuestro Arduino al MH-Z19

     

    El patillaje del sensor es tal que así:

    Patillaje

    La única cuestión que comentar es que es lo bastante ancho como para que no te quepa en una protoboard y necesites dos vinculadas con esas muescas tan simpáticas que tienen en los laterales.

    Para el montaje, vamos a necesitar una puerta serie que lea la señal del sensor y por eso, voy a usar un Arduino MEGA que dispone de 3 puertas COM, fácilmente accesibles y el diagrama de conexión es así de sencillo

    Arduino MEGA MH-Z19
    19 RX1 TX
    18 TX1 RX
    GND GND
    5V Vin

    Esquema de conexion

    Para empezar con el programa, tenemos que descargarnos la librería del MH-Z19.zip,  pulsando el botón verde a la derecha que dice descargar y ahora instalar la librería por el procedimiento habitual, y en la ventana que te sale señálale el fichero que acabas de descargar.

    Menu de arduino
     

    Pasando al programa

     

    Empezamos incluyendo la librería

    #include <MHZ19.h> ;

    Y después creamos una instancia del sensor pasándole un puntero a la puerta serie en la que esta instalado (En mi caso Serial1 del MEGA):

    MHZ19 mhz(&Serial1);

    El setup() es de lo más sencillo, solo fíjate en que una cosa es el puerto Serial que usamos para comunicarnos con la consola y otro es el puerto Serial1 que usamos para conectar el MEGA al sensor y que por defecto debe estar a 9600 baudios

    void setup()
    {    Serial.begin(115200);
         Serial.println(F("Starting..."));
    
         Serial1.begin(9600);
    }

    Ahora pasamos ya al loop y empezamos por probar si el sensor esta disponible (Por si es defectuoso o tu cableado chapucero) En caso afirmativo podemos leer los valores del sensor y en caso contrario lanzamos un mensaje de error

    MHZ19_RESULT response = mhz.retrieveData();
    
    if (response == MHZ19_RESULT_OK)
    {   Serial.print(F("CO2: "));
        Serial.println(mhz.getCO2());
        Serial.print(F("Temperature: "));
    }
    else
    {   Serial.print(F("Error, code: "));
        Serial.println(response);
    }

    Como puedes ver, no es nada complicado, ¿verdad? Aquí os dejo una muestra de la concentración de CO2 en mi oficina en la que se aprecia bastante bien cuando le soplo aire exhalado:

    Podemos también añadir lecturas de temperatura con:

    Serial.print(F("Temperature: "));
    Serial.println( mhz.getTemperature()) ;

    Pero esto devuelve la temperatura en grados Fahrenheit lo que es incomprensible para los europeos y podemos convertirlo a grados centígrados con:

    float F = mhz.getTemperature() ;
    float C = (F -32) * 5 / 9.0 ;
    Serial.println(C) ;

    Con lo vemos en seguida que calcula fatal la temperatura (A no ser que yo esté haciendo alguna estupidez, que bien podría ser). Aquí os dejo el programa completo:

    Programa completo: CO2_HX-Z19

     

    Y aquí tenéis un pequeño video con el resultado

     

    Deja una respuesta