Última modificación el 9 julio, 2021

Contenidos

El sensor de CO2 MH-Z19B es fantástico. Un sensor de CO2 barato, preciso (para el precio que tiene) y muy fácil de usar. Sin duda, uno de los sensores más utilizados con Arduino, ESP8266, EPS32 y similares.

También el sensor de CO2 MH-Z19C (aunque un poco especial) es un buen sensor, siempre y cuando sepas lo que hay que saber sobre él y qué es lo que le hace especial.

En este artículo encontrarás todo lo que quieras saber sobre estos dos sensores (y si no lo encuentras, pídelo en los comentarios).

Quizá llamarle biblia, en este momento, sea un poco pretencioso, pero te doy mi palabra de que llegará a serlo. Dale tiempo…

Este artículo está vivo y nunca para de crecer. Suscríbete a la Newsletter y no te pierdas nada.

Datos generales del sensor de CO2 MH-Z19B y MH-Z19C y MH-Z19D

El sensor de CO₂ MH-Z19B

El sensor de gas de dióxido de carbono MH-Z19B es un sensor inteligente, de pequeño tamaño, para uso general, que utiliza el principio de infrarrojos no dispersos (NDIR) para detectar la presencia de CO₂ en el aire.

Tiene buena selectividad, larga vida útil y otras características, como compensación de temperatura integrada.

Dispone de salida serie, analógica y PWM simultánea y es fácil de usar.

Es un sensor de alto rendimiento que combina la tecnología fiable de detección de gas por absorción de infrarrojos, con un buen diseño y un precio atractivo.

Parámetros del sensor MH-Z19B

ModeloMH-Z19B
Gas detectadoDióxido de carbono
Voltaje de funcionamiento4.5 ~ 5,5 V DC
Corriente media< 60m A (@ alimentación de 5V)
Corriente máxima150 mA (suministro @ 5V)
Nivel de interfaz3.3 V (compatible con 5V)
Rango de medición0~2000 ppm
0~5000 ppm
Señal de salidaSerial (UART) – TTL nivel 3.3 V – Salida analógica PWM
Tiempo de precalentamiento3 minutos
Tiempo de respuestaT90<120s
Temperatura de funcionamiento0 ~ 50 °C
Humedad de funcionamiento0 a 90% RH (sin condensación)
Dimensiones33 mm×20 mm×9 mm (Largo*Ancho*Alto)
Peso5 gramos
Vida> 5 años

Características del MH-Z19B

Cámara de gas con chapado en oro, resistente al agua y a la corrosión
Alta sensibilidad, bajo consumo de energía
Excelente estabilidad
Compensación de temperatura, excelente salida lineal
Larga duración

Aplicaciones del sensor MH-Z19B

HVAC de equipos de refrigeración
Equipos de vigilancia y de calidad del aire
Sistemas de aire fresco
Equipos de purificación de aire
Hogar Inteligente
Escuelas y centros educativos

El sensor de CO2 MH-Z19C

El sensor MH-Z19C es muy parecido al MH-Z19B aunque tiene algunas cosas que le hacen un poco especial…

Su precisión, sobre el papel, es un poco peor que la del MH-Z19B (50 ppm + 5% de la medida el MH-Z19B vs 50 ppm + 5% el MH-Z19C.

En la práctica, y según mis experimentos y observaciones, MH-Z19C es un sensor bastante más volátil. No es que sea peor que el MH-Z19B, pero a mí me gusta menos.

Winsen MH-Z19C

El sensor de CO2 MH-Z19D

El sensor MH-Z19D es prácticamente igual al MH-Z19C. Es muy reciente (junio de 2021) por lo que todavía no hay mucha información sobre él.

Este sensor es tan nuevo en el mercado que ni siquiera aparece en la web su fabricante en inglés, es necesario buscarlo en la versión en chino para encontrar algo de información (no demasiada).

Winsen MH-Z19D

Todavía no he encontrado el datasheet oficial en inglés, aquí puedes encontrar el datasheet del MH-Z19D en chino.

¿Qué versiones del sensor MH-Z19 existen?

Es difícil saber con exactitud, ya que los fabricantes chinos tienen bastante costumbre de hacer cambios en sus productos sin comunicarlos y, en ocasiones, hay un mercado paralelo de unidades remarcadas con otros nombres o referencias.

Que tenga seguridad, existen las siguientes versiones:

  1. El modelo MH-Z19 de rango 400~2000 ppm original, con una precisión de precisión 50 ppm + 5% de la medida.
  2. El modelo MH-Z19 de rango 400~5000 ppm original, con una precisión de precisión 50 ppm + 5% de la medida.
  3. Modelo MH-Z19B de rango 400~2000 ppm, que es una versión más moderna y mejorada. Esta versión tiene una precisión de 50 ppm + 3% de la medida.
  4. Modelo MH-Z19B de rango 400~5000 ppm, que es una versión más moderna y mejorada. Esta versión tiene una precisión de 50 ppm + 3% de la medida.
  5. Modelo MH-Z19B de rango 400~10000 ppm, que es una versión más moderna y mejorada. Esta versión tiene una precisión de 50 ppm + 3% de la medida.
  6. Modelo MH-Z19C de rango 400~2000 ppm. Esta versión tiene una precisión de 50 ppm + 5% de la medida.
  7. Modelo MH-Z19C de rango 400~5000 ppm. Esta versión tiene una precisión de 50 ppm + 5% de la medida.
  8. Modelo MH-Z19C de rango 400~10000 ppm. Esta versión tiene una precisión de 50 ppm + 5% de la medida.
  9. Modelo MH-Z19D de rango 400~2000 ppm. Esta versión tiene una precisión de 50 ppm + 5% de la medida.
  10. Modelo MH-Z19D de rango 400~5000 ppm. Esta versión tiene una precisión de 50 ppm + 5% de la medida.
  11. Modelo MH-Z19D de rango 400~10000 ppm. Esta versión tiene una precisión de 50 ppm + 5% de la medida.

IMPORTANTE: Los sensores MH-Z19B con placa de circuito impreso negra, todo indica que son versiones son falsas.

Si quieres saber más sobre los sensores falsos, puedes encontrar toda la información aquí: Sensores de CO2 MH-Z19B FALSOS

A lo mejor también te interesa:  ¿Qué tiene que ver el CO₂ con la Covid?

Calibración del punto cero (Zero Point Calibration)

Los sensores MH-Z19B y MH-Z19C vienen ya calibrados de fábrica y, aunque en condiciones normales no debería ser necesaria su calibración manual, te recomiendo que lo calibres cuando lo recibas y periódicamente.

Los cambios en las condiciones ambientales, como la temperatura y la humedad, la presión atmosférica, las condiciones de almacenamiento, de transporte y el propio envejecimiento del sensor, provocan que, con el paso del tiempo, sus medidas varíen (como con todos los sensores de este tipo).

Esta calibración del punto cero, se refiere al método por el que el sensor “aprende” a qué concentración de CO2 corresponde a una concentración de 400 ppm, o punto cero.

Este sensor dispone de dos métodos para realizar la calibración del punto cero: calibración manual y auto-calibración.

Calibración manual del punto cero de los sensores MH-Z19, MH-Z19B y MH-Z19C

MUY IMPORTANTE: Es fundamental que, durante el proceso de calibración manual, el sensor esté funcionando previamente durante, al menos, 20 minutos, en un entorno de CO2 estable con una concentración de CO2 de aire fresco, 400ppm (al aire libre o junto a una ventana, por ejemplo).

Calibración por hardware

Si tenemos acceso físico a las conexiones del sensor, podemos iniciar fácilmente el procedimiento de calibración del punto cero, puenteando durante 7 segundos los terminales 5 (HD) y 7 (GND).

Calibración por software

El sensor dispone de un comando, que le ordenará realizar la calibración del punto cero en ese mismo momento.

Solamente tenemos que enviar el comando 0xFF,0x01,0x87,0x00,0x00,0x00,0x00,0x00,0x78

Calibración mediante ESP Easy

Si estamos utilizando ESP Easy, entre los comandos disponibles, tenemos el comando mhzcalibratezero.

Podemos enviar el comando, por ejemplo, cargando la página http://x.x.x.x/tools?cmd=mhzcalibratezero (sustituiremos las x.x.x.x por la dirección IP de ESP Easy).

Nota: El comando debería ser mhzCMDCalibrateZero, pero, por algún motivo, no funciona (al menos en la versión actual de ESP Easy, en el momento de escribir este artículo).

Si ESP Easy no reconoce el comando mhzcalibratezero, prueba con mhzCMDCalibrateZero (lo sabrás porque ESPEasy responde con “Command unknown: mhzCMDCalibrateZero” o “Command unknown: mhzcalibratezero“).

Auto-calibración del punto cero de los sensores MH-Z19, MH-Z19B y MH-Z19C

Para evitar que el usuario tenga que realizar una calibración manual periódicamente, el sensor incorpora en su firmware una rutina de autocalibración, llamada ABC, que funciona de la siguiente manera:

Puesto que la concentración de CO2 natural en la atmosfera es de aproximadamente 400 ppm, cuando el ABC está habilitado, el sensor asume que, durante un periodo de 24 horas, la medida mínima que tome será equivalente a 400 ppm.

Esto significa que, en una habitación bien ventilada, que en algún momento del día tenga aire limpio, la medida más baja será de alrededor de 400 ppm y el sensor asumirá esa concentración (sea la que sea) como punto cero, o 400 ppm.

Dicho de otra forma, el sensor asumirá que la medida más baja de cada periodo de 24 horas será de 400 ppm.

Esta es una forma muy cómoda de mantener el sensor calibrado, utilizando el aire limpio como valor de referencia y automatizando el proceso.

Además, podemos activar y desactivar fácilmente la rutina ABC, de forma que podamos adaptar la forma de funcionamiento del sensor a nuestras necesidades particulares.

¿Debo tener el ABC activo o inactivo?

Depende de donde lo tengas funcionando.

El ABC funciona bastante bien, pero para ello el sensor tiene que estar en un sitio que se ventile al menos una vez al día (hasta llegar a esos, aproximadamente 400 ppm).

Mi consejo es que actives el ABC si el sensor está instalado en sitios como aulas, oficinas, etc, que no se utilizan durante el fin de semana y da tiempo a que el CO2 baje a nivel ambiente.

Si el sensor está instalado en sitios que no se suelen ventilar (habitaciones de interior que suelen estar muy ocupadas, o invernaderos, por ejemplo) mejor desactiva el ABC.

En una casa, depende… en mi despacho no le da tiempo a llegar a 400 ppm a diario porque lo tengo casi siempre cerrado (puerta y ventana) y paso muchas horas en él al día. En el salón sí que da tiempo porque solemos ventilar a diario y, aunque hay más personas, es más grande y suele estar la puerta abierta.

Calibración del punto alto (Span Point)

Igual que tenemos una calibración del punto más bajo que el sensor va a medir (los, aproximadamente, 400 ppm de CO2 que se encuentran en el aire exterior “limpio”), tenemos la posibilidad de calibrar el punto alto de la medición (por ejemplo, a 2000 ppm).

En mi opinión esta calibración no está al alcance de los aficionados, ya que tienes que conseguir una atmosfera estable y calibrada con exactamente 2000 ppm de CO2 y eso es tremendamente difícil sin los recursos de laboratorio adecuados.

Mi recomendación es que ni se te ocurra intentar la calibración del Span Point por tu cuenta. Lógicamente si tienes acceso al laboratorio necesario, seguramente tengas los conocimientos necesarios para hacerlo, en cuyo caso, adelante…

Si, a pesar de las advertencias, decides hacerlo, el método es muy parecido a la calibración del punto cero.

  1. Hacer primero la calibración del punto cero, como he explicado anteriormente
  2. Poner el sensor en un entorno estable a 2000 ppm
  3. Dejar que el sensor se estabilice durante un mínimo de 20 minutos
  4. Enviar al sensor el comando de Span Point Calibration

El comando a enviar es el 0x88 y lo puedes encontrar en el datasheet que te he dejado antes con sus parámetros.

Este comando no podrás enviarlo directamente desde ESP Easy.

¿Son fiables los sensores de temperatura del MH-Z19, MH-Z19B y MH-Z19C?

No, no lo son en absoluto.

Ten en cuenta que el sensor de temperatura es solamente para uso interno del sensor, para poder hacer la compensación de temperatura. Realmente su uso está indocumentado por parte del fabricante y nosotros lo estamos usando a base de ingeniería inversa de los posibles comandos y respuestas (vamos, que es un hack).

¿Hay diferentes modelos del MH-Z19, MH-Z19B y MH-Z19C según el rango de detección?

El sensor parece que es exactamente el mismo, independientemente del rango de detección. De hecho, es posible cambiar el rango de detección por software, enviando un comando al sensor.

Puedes encontrar información sobre el comando a enviar en el datasheet.

La precisión de los sensores MH-Z19, MH-Z19B y MH-Z19C hasta 2000 ppm es sorprendentemente buena. Por encima de 2000 ppm la precisión va empeorando progresivamente.

¿Dónde puedo encontrar más información sobre los sensores MH-Z19, MH-Z19B y MH-Z19C?

Existen una serie de fuentes de información, oficiales y no oficiales, muy interesantes, si quieres conseguir más información sobre el sensor.

Fuentes oficiales

La fuente oficial por antonomasia de cualquier componente electrónico es su datasheet, u hoja de datos. Es el documento en el que el fabricante incluye toda la información sobre su producto.

A lo mejor también te interesa:  ESP Easy y el modo deep sleep (ESP8266 bajo consumo)

Hojas de datos del fabricante:

Datasheet del MH-Z19 (una versión anterior al MH-Z19B) en inglés del 03-03-2015

Datasheet del MH-Z19B en inglés del 23-09-2019

Datasheet del MH-Z19B en chino del 15-10-2020

Datasheet del MH-Z19C en inglés del 04-02-2020. Está versión es problemática con la alimentación (más información aquí).

Datasheet del MH-Z19D en chino del 16-3-2021

Fuentes no oficiales

Blogs

En el blog de RevSpace tienes dos páginas con mucha información, técnica especialmente, muy útil e interesante sobre el MH-Z19 y sobre el MH-Z19B

Foros

Puedes encontrar bastante información, aunque dispersa, en el foro oficial de ESP Easy.

Código fuente

Aunque no es fácil de localizar, por estar muy dispersa, yo he aprendido mucho estudiando el código fuente que he podido encontrar para utilizar el MH-Z19B.

GitHub es una estupenda fuente de información, en este sentido.

Conexión de los sensores MH-Z19, MH-Z19B y MH-Z19C MH-Z19D

La conexión básica los sensores MH-Z19, MH-Z19B y MH-Z19C es muy fácil, solamente requiere cuatro conexiones. Dos para la alimentación y dos para la transmisión de datos.

Alimentación

Te recomiendo mirar, cuidadosamente, los requisitos de alimentación de tu sensor específico. Dependiendo de la versión, el voltaje aceptable de funcionamiento puede variar.

Según las hojas de datos del fabricante, se aceptan los siguientes voltajes de funcionamiento:

MH-Z19: De 3.6 a 5.5 Voltios CC

MH-Z19B: De 4.5 a 5.5 Voltios CC

MH-Z19C: De 4.9 a 5.1 Voltios CC

MH-Z19D: De 4.9 a 5.1 Voltios CC

Ten cuidado con el MH-Z19C (y MZ-Z19D). Conseguir una alimentación de entre 4.9 voltios y 5.1 voltios (un margen muy estrecho) desde un puerto USB puede ser “delicado” y si no tienes un multímetro para medir que el voltaje que le llega al MH-Z19C está dentro de esos márgenes, yo te recomiendo evitarlo. Además, es importante que esta tensión esté bien estabilizada.

Tienes más información aquí.

Pines

Es importante que compruebes los pines de tu sensor específico, ya que algunos usuarios han reportado variaciones.

De todas formas, no te preocupes, podrás ver en la serigrafía del sensor a qué corresponde cada uno de los pines:

Pines del MH-Z19

Pines del MH-Z19 antiguo (hace tiempo que no se comercializa).

MH-Z19

Pines del MH-Z19B

Pines del MH-Z19B. Este sensor todavía se vende, pero ha sido sustituido por el MH-Z19C

MH-Z19B

Pines del MH-Z19C

Pines del MH-Z19C. Última versión de sensor. Vendida actualmente.

MH-Z19C

Versión con conector

Existen versiones de este sensor con conector, en lugar de pines.

A continuación, puedes ver el conexionado de los pines principales.

Verás que solamente he marcado cuatro cables, y eso es porque en las pruebas que he hecho con diferentes versiones del sensor MH-Z19 (incluidos los falsos) solamente estas cuatro conexiones han coincidido en todos. El resto puede variar.

Conexiones Conector MH-Z19B

Te recomiendo que, si tienes cualquier duda, y antes de conectar, te asegures bien de cómo está cableado tu sensor específico.

Si descubres un sensor con un cableado diferente, por favor, házmelo saber para incluir la información

Precauciones

El sensor es un instrumento de medida delicado. Deberías tomar las siguientes precauciones al montarlo:

  • El sensor es sensible a la electricidad estática – Evita tocar los pines con los dedos todo lo que te sea posible.
  • Antes de tocar el sensor toca algo con la mano, que esté puesto a tierra, para descargarte de electricidad estática (una tubería del agua o calefacción, por ejemplo).
  • La carcasa no es solo una caja. Forma parte activa del sensor – Ten cuidado de no hacer fuerza sobre ella.
  • El sensor es sensible a las altas temperaturas – Suéldalo con un soldador de electrónica de no mucha potencia (unos 30w puede estar bien) y no apliques calor en los pines durante demasiado tiempo. Déjalo enfriar entre la soldadura de un pin y la siguiente.

Datos proporcionados por el sensor

El sensor proporciona tres datos con cada medida:

PPM: Es la concentración de CO2 en ese momento. Es el único dato que debe ser utilizado por el usuario.

T: Es la temperatura interna del sensor. Este es un dato interno que utiliza el sensor para ajustar las medidas de CO2, ya que son dependientes de la temperatura, y no debe ser utilizado por el usuario. Hay enormes diferencias en la temperatura reportada de unos sensores a otros.

U: Nadie sabe qué es el valor U a ciencia cierta. Lo que se sabe es que es un parámetro interno que tiene que ver con el ABC (autocalibración del punto cero) y con las concentraciones de CO₂ que el sensor ha detectado en el último ciclo de ABC, pero nada más. Algunas versiones del sensor proporcionan este valor siempre a 0.

¿Es cierto que hay MH-Z19B falsos?

Sí que los hay, desgraciadamente, por lo que hay que tener cuidado con donde se compra.

He escrito un artículo completo a ese respecto porque está afectando a mucha gente. Si vas a comprar uno de estos sensores, o ya tienes uno, no dejes de leerlo.

https://emariete.com/sensores-co2-mh-z19b-falsos/

La etiqueta del MH-Z19B

La etiqueta del MH-Z19B de papel, adherida en el lateral, muestra el modelo del sensor, el rango de medición con el que ha salido de fábrica (es posible cambiarlo posteriormente mediante un comando) y lo que parece ser una fecha (posiblemente de fabricación, calibración o control de calidad), y un código QR.

Es curioso porque en los sensores falsos está fecha no parece tener sentido. En el sensor de la fotografía, lo que suponemos que es la “fecha” indica el 25 de diciembre de 2020 (día de Navidad) y el vendedor me lo envío el 25 de diciembre de 2020.

Precauciones y cosas a tener en cuenta

Hay algunas cosas básicas con las que debes tener cuidado y, aunque la mayoría son obvias, no está de más reunirlas aquí bajo un mismo punto:

  • Evita cualquier presión, en cualquier dirección, sobre la carcasa plástica durante su soldadura, instalación y uso.
  • Cuando esté instalado en un espacio pequeño, el espacio debe estar bien ventilado, especialmente sus ventanas de difusión.
  • El módulo debe estar alejado de fuentes de calor y se debe evitar su exposición directa al sol u otras fuentes de calor.
  • El módulo debe ser calibrado periódicamente. El fabricante sugiere que se haga cada seis meses. Lógicamente esto dependerá del uso que se haga del él y el entorno en el que se utilice.
  • No utilices el sensor en un entorno polvoriento durante demasiado tiempo.
  • Comprueba muy bien los requisitos de alimentación de tu modelo concreto (consulta tu versión específica en el apartado “Conexión del MH-Z19B” de este artículo). La corriente de la fuente no debe ser inferior a 150mA. Fuera de este rango, provocará un malfuncionamiento del sensor (puede indicar una concentración de CO2 más baja de la real, o el sensor puede no funcionar correctamente).
  • Antes del procedimiento de calibración manual del punto cero, el sensor debe funcionar en un entorno de gas estable (400ppm) durante más de 20 minutos. Conecta el pin HD a nivel bajo (0V) durante más de 7 segundos.
  • No utilizar soldadura de ola o inmersión para el sensor.
  • Cuando se suelde con soldador, se debe fijar la temperatura en (350 ± 5) °C, y el tiempo de soldadura debe ser de 3 segundos máximo (suéldalo rápido, no te entretengas).
A lo mejor también te interesa:  Comparativa sensores de CO2 MH-Z19B vs Senseair S8

Análisis del sensor MH-Z19C

Variación con el voltaje de alimentación

Como vengo tiempo diciendo, no recomiendo el sensor MH-Z19C en absoluto, de forma general, y aquí voy a documentar algunos de las conclusiones a las que he llegado a través de algunas pruebas que voy a describir.

Este sensor tiene un problema importante con la alimentación, ya que el margen de voltaje de utilización es muy estrecho (de 4.9V a 5.1V según el fabricante, aunque como veremos es aún más estrecho).

Esta tensión de alimentación tan estrecha es muy difícil de mantener estable y muchos de los alimentadores USB que utilizamos proporcionan valores por encima y por debajo de este voltaje.

Además, hay otro problema añadido que, aunque se puede minimizar con un buen diseño, no resulta sencillo para el aficionado medio: Este tipo de sensores tienen un consumo relativamente alto, lo que provoca caídas en la alimentación producidas en los propios cables del circuito (es normal que estas caídas puedan ser de 0.2V~0.4V e incluyo mayores), lo que hace que sea extremadamente difícil tener una tensión de alimentación estabilizada.

En esta primera prueba he mantenido el sensor funcionando durante unas 10 horas alimentado por una fuente de alimentación de laboratorio programable que modificaba el voltaje de alimentación cada 60 segundos entre 4.5V y 5.15V en pasos de 0.5V. Esto es: alimentaba el sensor a 4.5V durante 60 segundos, pasaba a alimentarlo a 4.55V durante otros sesenta segundos, 4.6V durante otros sesenta segundos y así sucesivamente (al llegar a 5.15V pasaba a alimentarlo a 4.95V durante 5 minutos, para estabilizarlo, y volvía a iniciar el ciclo a 4.5V.

Para poder ver la desviación en las medidas de concentración de CO2 proporcionadas, según iba cambiando el voltaje de alimentación, lo he comparado con mi sensor de referencia, un Senseair S8.

En la gráfica puedes ver como la medida de CO2 reportada por el MH-Z19C (en verde) iba variando con el voltaje de alimentación (en azul) y su desviación respecto al sensor de referencia Senseair S8 (en naranja).

Puede parecer que las diferencias no son muy importantes, pero si hacemos zoom sobre un espacio de tiempo más corto:

Y si vamos aún más al detalle veremos claramente las oscilaciones del sensor MH-Z19C:

Fíjate como en el periodo de alimentación con 4.95V durante 5 minutos el MH-Z19C se va estabilizando lentamente.

Calibración de fábrica

Puede que en las gráficas anteriores te hayas fijado en las grandes diferencias de concentración de CO2 reportadas por ambos sensores.

El MH-Z19C era completamente nuevo, con su calibración de fábrica y con el ABC desactivado (desactivado en su primer minuto de funcionamiento tras conectarlo por primera vez para mantener su calibración de fábrica).

El Senseair S8, aun no habiendo sido calibrado desde hace algunas semanas, es mi sensor de referencia y no suele mostrar (haciendo medias móviles de 5 minutos) más de 80 ppm de desviación respecto a mis otros sensores fiables que tengo funcionando simultáneamente en la misma habitación (Winsen MH-Z19A, Cubic CM1106 y Senseair Sunrise).

Como ves la calibración del sensor MH-Z19C está bastante lejos del punto correcto. Lo más sorprendente es que este sensor venía con un certificado de calibración de Winsen. No parece que sea muy fiable este tipo de certificado y parece más un elemento de marketing por parte de este fabricante chino que otra cosa.

Imprescindible: Estabilizar la alimentación del MH-Z19C

De acuerdo, las diferencias que se observan en las medidas de la prueba anterior son muy sutiles, pero ahora veremos que es bastante peor de lo que parecía, y no me extraña que algunas personas no vieran problema en esas medidas. Para mí no es muy difícil saber que algo no anda bien porque he hecho muchas, muchísimas, pruebas con sensores de CO2 y he dedicado muchas, muchísimas, horas a su análisis. De forma que he hecho otra prueba “en el mundo real” para que se vea más claro lo que sucede:

En esta gráfica puedes ver las medidas del MH-Z19C (en verde) puesto a prueba junto a mi sensor Senseair S8 LP de referencia (línea amarilla) y el voltaje de alimentación del MH-Z19C (línea azul) durante un periodo de diez días.

En la primera parte el sensor está alimentado a través de un cargador USB múltiple con una capacidad de 2.5A por puerto. En la segunda, he incluido en la alimentación un estabilizador de voltaje (un step up down), pero forma que la alimentación del MH-Z19C está estabilizada a 5.0V (aunque veas que está sobre la línea de 5.2V, eso se debe a que no me tomé muchas molestias para calibrar el divisor de tensión y los pequeños “picos” de alimentación son debidos al ruido de ADC del ESP8266, que no es muy bueno).

En la primera parte puedes ver como la línea azul fluctúa (recuerda, el voltaje de alimentación del MH-Z19C) y con ella la medida de CO2, introduciendo ruido, saltos y picos inexistentes.

Te recomiendo que pulses sobre la imagen para verla más grande e incluso que hagas zoom sobre ella. Verás que tiene todo tipo de problemas: grandes picos inexistente, lentitud en las medidas, dientes de sierra, etc.

En la segunda parte, con la alimentación del MH-Z19C está estabilizada a 5.0V, la medida de CO2 se mantiene todo el tiempo cerca de la medida del Sensor de referencia.

Conclusiones con el MH-Z19C

Según mis pruebas, parece claro que el sensor MH-Z19C es un buen sensor y se puede utilizar sin problemas, siempre y cuando se estabilice la tensión de alimentación a 5.0V siempre.

Si lo alimentas con un alimentador/cargador USB tienes que poner el estabilizador YA. Estos aparatos no dan la calidad de estabilización de voltaje que el MH-Z19C necesita,

Te dejo aquí, por si te viene bien, el enlace al estabilizador de tensión en AliExpress. Es el mismo sitio donde lo he comprado yo. Por lo que cuesta, merece mucho la pena.

38 comentarios en «La biblia del sensor de CO2 MH-Z19B»

  1. Muy completa información sobre el sensor…llegará a ser más que biblia…jeje
    Comentarte que el enlace web que pones en “Hojas de datos del fabricante” sobre el MH-Z19C a mi lleva a misma hoja que el Z19B. Y lo veo a la venta en Aliexpress: https://bit.ly/3pumjhE (enlace web reducido, el original se extiende por un montón de líneas). Creo entender que las diferencias con el B está en un menor tiempo de puesta en marcha, mayor amplitud de humedad de trabajo y otros relacionado con voltajes e intensidades en mA, que no sé exactamente lo que implican…supongo que un mejor funcionamiento. También que la precisión la sube al 5%, pero a esto poca importancia le veo, pues el rango sigue siendo también +-50 ppm. Ya que es más nuevo ¿recomiendas como mejor la compra del modelo C sobre el B?.
    Saludos nuevamente

    Responder
    • Me había equivocado al enlazar a la hoja de datos del MH-Z19B y había repetido la del MH-Z19C. Ya está corregido. Muchas gracias por el aviso.

      Parece, como bien dices, que el sensor ya está a la venta. El enlace que has puesto no pinta bien (en la fotografía no es como el oficial del fabricante). Puedes encontrar aquí uno que parece que sí es el oficial:
      https://s.click.aliexpress.com/e/_AOPAxf

      Ahora que está disponible, estudiaré las diferencias con calma y ampliaré la tabla con los nuevos datos. A bote pronto, parece un paso atrás: menor precisión (5% frente a 3% del antiguo) y menor margen de voltage de funcionamiento (4.9 a 5.1 V frente a 4.5 a 5.5 V del antiguo).

      En lo que sí parece mejorar, como has apuntado, es en el tiempo de precalentamiento (de 1 minuto, frente a 3 minutos del antiguo) y el consumo algo menor. Esto puede ser interesante para los usuarios que quieren utilizarlo en formato portátil o portable con baterías.

      Todavía no recomiendo su compra, hasta saber si funcionará al 100% con ESPEasy o habrá que adaptar el código (como hubo que hacer cuando aparecieron los anteriores, porque, aunque no haya grandes diferencias, alguna si hay, y hay que hacer ajustes).
      Se, casi de rebote, de una persona que está probando el HM-Z19C con ESPEasy y, de momento, parece que le está funcionando correctamente.

      Si alguien se anima a probarlo que nos diga que tal le ha ido.

      Responder
  2. Hola Mariete,

    Gracias por toda este información. Ya te contaré como me va a mi porqué en mi vida he soldado nada, pero para este proyecto me he animado.

    Tengo una duda sobre el sensor que me ha llegado a casa respecto a la lista que pones… En la etiqueta de mi sensor pone:

    Modelo MH-Z19B de rango 0~5000 ppm

    Pero este rango no lo veo en ninguno de los sensores que has listado.

    Es concretamente éste, el del circuito impreso verde:
    https://s.click.aliexpress.com/e/_AFRbHD

    ¿Tengo uno de los buenos?
    ¡Gracias!

    Responder
    • Hola Israel.

      Estupendo, que te hayas animado. Ya nos contarás… ¡Cuidado, que el cacharreo engancha!

      Los sensores que he listado han sido todos de 5000 ppm (de todas formas, se puede cambiar por software). Acabo de cambiarlo, porque acabo de ver que el que estaba puesto ya no está disponible.

      Saber si es auténtico o no es muy difícil, a no ser que tenga la placa negra. La semana pasada me llegó uno falso (con placa negra) y voy a aprovechar para hacer un video explicando las diferencias.

      Responder
  3. Aunque ya lo comentas en un post reciente, hay una diferencia de tensión de alimentación del sensor que puede ser critica para el proyecto: menos de 4,9V y no medirá con exactitud: extracto de mi post del general:

    Ps: por cierto, lo de usar un cargador bueno no puede estar siendo porque la ESP no llega a dar lo 4,5V por el Vin para los del 19B? Porque consumir, consume menos de 0.1A

    “”
    Lo tercero es más relevante y está relacionado con el sensor: puede incluso fastidiar el proyecto a mucha gente. La cuestión es que aunque compré el MH-Z19B, después de muchos mareos con el vendedor de aliexpress, me mandó el MH-Z19C. Es fisicamente distinto… pero también electronicamente, como verás. Intenté montar el circuito con el tutorial, pero en vez de soldar lo hice con una breadboard que también habia comprado para trastear (soy muy nuevo en esto). La cuestión es que después de haberlo conectado todo… no funcionaba bien. La luz roja parpadeaba. Valores salían, incluso los conecté a Thingspeak con el tuto del compañero. Pero los valores eran muy inestables: saltaban 50 o más PPM para arriba y para abajo, y la temperatura tampoco cuadraba. Salía 2 ó 3 grados menos de lo real.

    Total, que pensaba que me habían metido un fake y me fastidiaba bastante… hasta que vi la sheet del 19C. Resulta que hay una diferencia sustancial entre el 19B y el 19C en la electrónica: mientras el 19B funciona alimentándolo con 5V+-0,5 (de 4,5 a 5,5V), el 19C necesita 5V+-0,1 (de 4,9 a 5,1V). Además al final de la sheet insiste que si el voltaje no está en ese margen… las medidas se vuelven INESTABLES. Miré lo que la ESP le estaba dando en el Vin/GND… et voila, 4,57V. Insuficiente.

    Me he estado documentando y resulta que la ESP es incapaz de dar 5V. El Vin/GND está para alimentarla con tensión “sin regular” entre 5V y 12V. Pero no para sacar 5V de allí. De hecho, el que dé tensión al conectarla con micro USB es un subproducto, no una especificación. De hecho, en cualquier proyecto que necesite 5V (motores), necesitas un alimentador específico, no se puede tirar de Vin (por lo que he ido leyendo). Con el MH-Z19B hay suerte porque su rango de entrada es más amplio (aunque está tan cerca del límite que casi seguro que a alguno no le está valiendo y le salen valores saltarines), pero con la MH-Z19C no.

    Al comprar la breadboard venía un alimentador. Conecté el MH-Z19C a los 5V (por cierto, da 4,92V, un poco bajo) y… BINGO, todo perfecto:

    https://thingspeak.com/channels/1279169/charts/1?bgcolor=%23ffffff&color=%23d62020&dynamic=true&results=60&type=line&update=15

    MUCHISIMAS GRACIAS POR TODO

    “”

    Responder
    • Hi Jesús,

      what was the response of the MH-Z19C while being undervolted? Did the measurement lamp blink? Did you receive responses on the serial port?

      I have received today a MH-Z19C where the measurement lamp blinks but gives Unknown response: 0 0 0 0 0 0 0 0 0 in espeasy (setup has worked with a MH-Z19B before).

      Thanks,
      Wolfgang

      Responder
      • Hi Wolfgang.

        I understand that what was happening to Jesus was that his sensor was giving unstable results, with jumps up and down of about 50 ppm.

        In his message, he indicates that the sensor’s lamp went on and off, as it should.

        The symptoms of what is happening to you with the unknown response are described in some messages in the main article of the CO2 meter at https://emariete.com/medidor-casero-co2/

        Additional information and some tips for using the MH-Z19C can be found at: https://emariete.com/alimentar-desde-nodemcu-wemos-mini-d1-y-arduino/

        Responder
  4. Hola Mariete, tengo yo un sensor de esos, y pinto los ppm y la temperatura en un homeassistant. Lo que he visto es que cuando abro la ventana de la estancia (ahora que hace bastante más frío fuera), casi enseguida bajan drásticamente los ppm. (no tiene sentido que tan rápido este bajando la concentración de CO2) Me parece que en realidad lo que pasa es que el sensor detecta que baja la temperatura, eso si es correcto, y el usa la temperatura para dar los ppm, pero eso no es correcto. De hecho, si cierro la ventana, cuando sube de nuevo la temperatura, se observa como suben los ppm también rápidamente. Me pregunto si no habría que corregir el valor de ppm por sw con el valor leído de T. (ahora no se me ocurre como)

    Responder
    • Hola Alex.

      Yo no he observado ese efecto en mis sensores, pero me parece una buena prueba a hacer. En cuanto tenga tiempo la haré y la documentaré aquí.

      Precisamente el sensor de temperatura interno que tienen estos sensores se supone que es para que eso no suceda y, en teoría, hacen la corrección de temperatura internamente.

      Lo que, si sabemos, con bastante seguridad, es que las corrientes de aire les afectan bastante. Comprueba si lo que le sucede no sea que cuando abres la ventana se forma una corriente de aire que le esté afectando.

      Por otro lado, los sensores son bastante rápidos en responder a la concentración de CO2 y el aire se mezcla también con mucha rapidez. Yo algunas veces cuando abro la ventana, puedo bajar de 1800 ppm a 500 ppm en muy pocos minutos (no siempre, creo que depende de dónde viene el viento).

      Acabo de hacer un experimento, ahora mismo, abriendo un poco la ventana: Fíjate como aquí cinco sensores distintos en la misma habitación (todos diferentes marcas y modelos) han bajado rápidamente de unas 1500 ppm a unas 600 ppm en menos de 10 minutos (con la bajada más brusca en los primeros 2 minutos). Fíjate sobre todo en el Senseair S8, que es el sensor de referencia, (los demás están dedicados a pruebas y ni siquiera están calibrados recientemente, excepto el CM1106, que lo calibré hace pocos días).

      La temperatura interior era de unos 25º al inicio y de 23º a los 10 minutos (tampoco bajó mucho, para que veas que la apertura de la ventana tampoco era muy grande)

      Un saludo.

      Responder
  5. Hola, excelente artículo, gracias por compartirlo.
    Tengo una duda. Hablas del código fuente del sensor y que está disperso y es difícil de encontrar. ¿Te refieres a alguna librería para poder usarlo con el IDE de Arduino? ¿Sabes si existen dichas librerías?
    Otra duda que tengo es sobre las gráficas que muestras, en éste y otros artículos, ¿con qué programa las elaboras?
    Un saludo

    Responder
    • Hola Jesús.

      Existen bastantes librerías de Arduino que soportan el MH-Z19. Como comento en el artículo, te recomiendo que mires en GitHub porque así ves la que más te guste o mejor se adapte a lo que necesitas.

      Cuando digo, “Aunque no es fácil de localizar, por estar muy dispersa, yo he aprendido mucho estudiando el código fuente que he podido encontrar para utilizar el MH-Z19B.” me refiero a que tienes que ir rebuscando en el código fuentes de muchos proyectos diferentes para ir viendo los comentarios que han escrito sus autores con información interesante o como han implementado determinadas cosas.

      Las gráficas de este artículo están hechas con Grafana.

      Un saludo.

      Responder
      • Muchas gracias Mariete, me pondré a ello, ya que me gustaría crear código para usar este sensor en un Arduino Nano sin acceso a Internet, en el que se puedan hacer las lecturas en una pantalla LCD que tengo, que es mayor que la OLED 0.91 y se ve mejor. También me gustaría ir almacenando las lecturas en una SD, para poder graficarlas.
        Agradecería cualquier consejo o sugerencia.
        Un saludo y enhorabuena por tan excelentes artículos.

        Responder
  6. Wow, this site is great news for us DIYers trying to avoid Co2-poisoning in our little workshops.

    I recently got my MH-Z19B and I am very satisfied with its performance-to-cost equation.

    However, I am trying to find out what 7-pin terminal connector is used on the PCB. I guess it is a JST something, but cannot find the exact type in any documentation.

    Any ideas, anyone?

    Responder
  7. Buenas tardes estimados. estoy apunto de terminar un proyecto en el cual estoy usando el sensor MH-Z19 y todo marcha bien, pero me gustaría saber cual es el alcance de un sensor por m2, es decir, para 2400 m2 cuantos sensores MH-Z19 necesito para monitorias toda el área?
    E estado leyendo este y otros sitios web y no e encontrado una respuesta a mi duda.

    si me pueden ayudar se los agradecería mucho.

    saludos desde Perú.

    Responder
    • Hola, Enmanuel.

      La verdad es que es una pregunta con una respuesta muy compleja y que requiere que un número de cálculos importante utilizando muchos parámetros. No es posible dar una respuesta genérica.

      Mi recomendación es que utilices el calculador que puedes encontrar aquí http://tinyurl.com/covid-estimator creado por el profesor de química y bioquímica de la Universidad de Colorado José Luis Jiménez (https://www.colorado.edu/chemistry/jose-luis-jimenez) junto con el Dr. Zhe Peng.

      Espero que te resulte de ayuda.

      Un saludo.

      Responder
      • ok muchas gracias Mariete, revisare el calculador.

        Pero según su experiencia y conocedor de este sensor, uno lo podría usar para un área de cuantos m2?

        gracias

        Responder
        • Hola, Enmanuel.

          Entiendo que te gustaría obtener una respuesta, pero, como te comenté, eso es imposible de saber sin un estudio en profundidad. Depende de tantísimos parámetros que no es posible dar una respuesta rápida.

          Siendo tu caso un área de 2400m2, te recomiendo que contactes con un profesional de la ventilación (un ingeniero especializado).

          Un saludo.

          Responder
  8. Hola, tengo un problema de caída de tensión cada vez que el MHZ19B realiza una lectura. Armé el medidor de CO2 y le coloqué un display de 16×2, un buzzer y un LED RGB. Lo arme en un protoboard con arduino 1. Al alimentar Arduino 1 con 9V desde el jack cada vez que el sensor realiza una lectura se nota un leve parapadeo en el display . Medí la corriente que consume el sensor y es variable, al tomar el valor cuando se prende el led interno consume 100 mA aprox y cuando se apaga el led interno 20 mA. El parpadeo del display es bastante pasable pero al probarlo con un Arduino Nano, que es el que quiero usar, ya es muy evidente. La única solución que encontré es probar alimentar el sensor con otra fuente de 5V y compartir los GND. Ahí al no tomar la corriente desde Arduino anda perfecto. Pero la idea es usar una sola fuente. Lo que no entiendo porque cae la tensión si Arduino entrega hasta 500 mA en las salidas 5V. Si lo alimento desde Vin realiza la misma caída de tensión.
    Saludos!

    Responder
    • Hola, Juan Manuel.

      Efectivamente, las caídas de tensión son muy frecuentes. Tanto en este artículo como, sobre todo, en el que se llama “Alimentar desde NodeMCU, Wemos Mini D1 y Arduino” (en https://emariete.com/alimentar-desde-nodemcu-wemos-mini-d1-y-arduino/) está explicado el problema y se dan varias soluciones.

      Para entender por qué sucede esto, cuando dices “Lo que no entiendo porque cae la tensión si Arduino entrega hasta 500 mA en las salidas 5V”, lo más importante está en la frase “Arduino entrega hasta 500 mA”. Por regla general puede entregar hasta 500 mA pero eso depende de varias cosas (circuito regulador utilizado, voltaje de entrada, temperatura, etc).

      La solución inmediata y más sencilla, es utilizar un estabilizador de voltaje (SEPIC o boost-buck converter) como este: https://s.click.aliexpress.com/e/_A6VUHZ

      Un saludo.

      Responder
  9. Hola, tengo un sensor Mhz19c al que le conecte un step up a la salida de 5v y GND de la placa arduino nano y con la tension regulada de 5v que obtengo alimento el sensor pero solo registro medidas de 5000ppm. Cuando saco el modulo convertidor de tension y conecto el sensor directamente al GND y 5v de la Nano la medida se normaliza. No se que puedo estar haciendo mal. Gracias, saludos

    Responder
    • Hola Miguel.

      Los step up necesitan una diferencia de voltaje entre su entrada y su salida.

      Dependiendo de cuál sea el step up, puede ser incluso de 1.2 voltios o más. Dicho de otra forma, no le puedes aplicar más de 3.8 voltios, 5-1.2=3.8, a la entrada.
      Tendrás que mirar la hoja de datos del step up concreto que estés utilizando para ver qué diferencia mínima necesita.

      En tu caso, como la tensión de entrada y la de salida están tan próximas, necesitas un “step up/down” que sube o la baja la tensión de salida para mantenerla en 5V según sea necesario´, tal y como explico en el artículo.

      Te recomiendo que pongas una placa como la que se indica en el artículo (u otra similar). Muchos usuarios la están utilizando con muy buenos resultados: https://s.click.aliexpress.com/e/_A6VUHZ

      Un saludo.

      Responder
  10. Es verdad lo que dices tengo los mismos problemas. Con una tensión de alimentación al MH-Z19C de 4.85VDC mide entre 400ppm y 403ppm (probablemente mal) y cada tanto mide 5000ppm ya me paso con dos sensores. Lo curioso es que al colocarlo nuevo funciona bien pero al cabo de unos días empieza a dar estos errores.
    Excelente información la que brindas, gracias por el esfuerzo👏👏👏
    Saludos

    Responder
    • Hola Marcelo.

      Efectivamente, cuando el voltaje de alimentación del MH-Z19C está fuera de lo indicado por el fabricante o no está perfectamente filtrado y estabilizado, el funcionamiento del sensor puede ser bastante aleatorio e inestable.

      Un saludo.

      Responder
  11. Hola, excelente la página! Y traigo una consulta, compré uno que tiene fecha de 9/3/2021, recién salido del horno para la fecha de publicación, y cuando le consulto el valor de ppm con el comando 86 me responde un byte más a lo que dice la hoja de datos, yo le envío:
    FF 01 86 00 00 00 00 00 79
    Y responde:
    FF 86 01 96 39 00 01 00 A9
    FF: Inicio
    86: comando que responde
    01: Byte más significativo de las ppm de CO2
    96: Byte menos significativo de las ppm de CO2
    39: ????, esto no sé qué es, sé que sube cuando suben las ppm y baja cuando bajan las ppm
    00: está Ok que sea 00, creo!
    01: ????, este valor va subiendo con el tiempo
    00: está Ok que sea 00
    A9: CRC, todo bien

    Alguien sabe qué son esos datos adicionales? No es ruido porque me da bien el checksum, que por cierto me da que es el complemento a 0, no el complemento a 1 como dice el datashet… o estoy haciendo algo mal que me da bien jaja.

    Por lo pronto sé que ese valor de 39 acompaña el nivel de ppm, y el valor que tengo en 1 en el ejemplo, va subiendo con el tiempo, parecería ser un contador de tiempo.

    Responder
    • Hola César.

      Por lo que veo en tu mensaje la respuesta “FF 86 01 96 39 00 01 00 A9” es correcta y coincide con lo que indica el datasheet. Son los 9 bytes que debes recibir.

      El resto de los datos no está documentado por el fabricante, pero gracias al trabajo de algunas personas se ha averiguado parcialmente a qué corresponde. Este es un rápido resumen, pero puedes encontrar más información en los enlaces incluidos en el artículo.

      r[2..3], r[4], r[5], r[6], r[7]
      r[2..3] “final” CO2 level.
      r[4] – (temperature in C) + 40
      r[6] and r[7] – if ABC turned on – counter in “ticks” within a calibration cycle and the number of performed calibration cycles.

      Un saludo.

      Responder
  12. Hola en el diseño microcontrolador y sensor se puede alimentar ambos con 5V? No se quemará la Usart del sensor por los niveles de 5v de la señal serie?
    Saludos

    Responder
    • Hola Álvaro.

      Si miras el datasheet del sensor verás que el propio fabricante indica que los pines serie son de 3.3V, compatibles con 5V, por lo que no tendrás ningún problema.

      Un saludo.

      Responder
  13. Hola, acabo de recibir mi sensor MH-Z19B, mi duda es sobre el rango, el sensor dice que tiene un rango de 0-5000, yo lo quiero utilizar para un invernadero, donde se pueden registrar valores menores a los 400ppm. Mi duda es, esos valores menores a los 400ppm si pueden ser registrados por este sensor? En este caso será necesario quitar la calibración automática? Ya que el valor menor no corresponderá a 400ppm, espero a verme dado a entender, saludos.

    Responder
    • Hola Carlos.

      Si miras el datasheet del fabricante verás que pone que el sensor puede medir por debajo de 400ppm (desde 0, según el datasheet) y de echo hace referencia a su uso en invernaderos.
      Efectivamente, tendrás que desactivar la calibración automática y calibrarlo manualmente de vez en cuando.

      Un saludo.

      Responder
    • Hola Ger.

      Yo lo suelo pegar con pegamento termofusible (lo que suelen llamar cola o pegamento caliente) pero supongo que podrás pegarlo con la mayor parte de pegamentos normales como cianocrilato (Superglue, por ejemplo) o epoxi.

      Un saludo.

      Responder

Deja un comentario