Conexión de un sensor de CO2 Modelo MH-Z19B utilizando la salida analógica Vo

Doy la bienvenida a todos los que estén interesados ​​en la calidad del aire interior y quieran controlarla y administrarla.

Yo mismo me interesé recientemente en este tema y decidí sentir el sensor de CO2 MH-Z19 B con mis propias manos. Me inspiraron muchos artículos, por ejemplo, el lado oscuro del MH-Z19 .



Sin embargo, en ninguna parte (incluso en las instrucciones) no encontré cómo trabajar con el pin Vo ...

Llamé la atención sobre esto: en el artículo Descripción general del sensor infrarrojo de CO2 MH-Z19 , se menciona este punto:

  • Vo - voltaje de salida 3.3V, no más de 10mA

Algunas tiendas en línea, como el " Sensor de dióxido de carbono CO2 MH-Z19B " , brindan información similar:

  • Vo - voltaje de salida 3.3V, no más de 10mA

(como copia al carbón)

Pero las instrucciones ( aquí ) indican un poco más:

  • Salida analógica Vo (0.4 ~ 2 V) o (0 ~ 2.5V)

Y si cava más, las instrucciones ( aquí ) indican aún más en detalle:

  • Vo (Pin2) - Salida analógica (0.4 ~ 2 V) (se puede personalizar el rango 0 ~ 3V)

Rápidamente busqué en Google y ... ¡no encontré nada sobre esta salida! Extraño, pensó Stirlitz, conectó rápidamente esta salida a la entrada analógica del ESP8266 (para Arduino, esto también es relevante) y comenzó a investigar.

Conclusiones:

  1. El voltaje en la salida analógica varía de 0.4xx a 2.002v.
  2. La salida analógica repite el voltaje de la señal digital de ppm.
  3. Cuando los comandos UART cambian el rango de ppm 2k, 5k, 10k, el rango de conversión de Vo cambia en consecuencia.
  4. El valor máximo de Vo = 2.001v no cambia dependiendo del rango, ya que el rango de conversión, debe establecer el valor máximo en ppm (2/5 / 10k).
  5. El valor mínimo de Vo varía según el rango (?), Y el rango en sí comienza a 400 ppm.
  6. Si selecciona el valor real del controlador ADC, puede obtener una coincidencia decente entre el voltaje y el nivel de ppm. En el rango de hasta 2k, el error entre la señal digital UART y la conversión analógica de Vo no excede varias unidades de ppm.
  7. Primero puede configurar el sensor usando el convertidor USB-TTL o usando Arduino + (deshabilite la autocalibración y cambie 400 ... 2000ppm al rango de "inicio") y luego trabaje con él como una señal analógica.

Cómo me convertí:

[...] const word cADC00v = 3; // ADC = 3 .  0.0v const word cADC04v2k = 235; // ADC = 235 .  400ppm @2k const word cADC04v5k = 174; // ADC = 174 .  400ppm @5k const word cADC04v1k = 153; // ADC = 153 .  400ppm @10k const word cADC20v = 646; // ADC = 646 6.  2.0v word ADC = analogRead(A0); //  10  ADC 0...1023 long Vin = map(ADC, cADC00v, cADC20v, 0, 2001); //  0..3,3v  ,   2,001v long ppm_2k_04_2 = map(ADC, cADC04v2k,cADC20v, 400, 2000); //  Vo  ppm   2k long ppm_5k_04_2 = map(ADC, cADC04v5k,cADC20v, 400, 5000); //  Vo  ppm   5k long ppm_10k_04_2 = map(ADC, cADC04v1k,cADC20v, 400,10000); //  Vo  ppm   10k [...] 

Números "mágicos" recogidos experimentalmente. Sucedió tanto más rápido como con mayor precisión. Al intentar calcular con mucha precisión, matemáticamente, en realidad resultó un gran error.

¿Por qué funciona para mí (0.4 ... 2.0v y no 0 ... 2.5v)? No lo sé. El sensor fue comprado hace un par de días, producción 26 de septiembre de 2019. El rango de hasta 5k ppm está grabado en el estuche.

¿Por qué lo necesito? (la respuesta a "así que habría hecho mal ...")

Bueno ... hay personas a las que les gusta tener un soldador en sus manos, pero no son amigos de los controladores. Para ellos, la salida analógica es al menos encender / apagar el ventilador y, al máximo, un control suave de la velocidad de escape / admisión / recuperación.

Específicamente, para mí: en la habitación de al lado, un sistema de ventilación ha estado funcionando durante 2 años, que hice en un controlador industrial libremente programable. Porque el controlador es industrial, entonces el sistema de programación es específico, no estoy seguro de que pueda escribir su propio protocolo de intercambio UART en él. Sí, hay un puerto serie RS484 que funciona bien en ModBus, pero este puerto está ocupado por el sistema de despacho.

Pero hay una entrada analógica libre que se puede configurar en 0-10V. Y así, teniendo solo alrededor de $ 30, puede actualizar el sistema de ventilación para ahorrar energía de manera inteligente (ventile solo cuando sea necesario y exactamente lo que necesite).

PS: código SoftSerial.readBytes (mhzBuffer, 9); en mi ESP8266 se negó a trabajar. Mató unas cinco horas de su vida. Lo discutieron aquí , pero lo leí más tarde. Escribí mi función en el estilo de if (SoftSerial.available() { x=SoftSerial.read(); } .

Source: https://habr.com/ru/post/483826/


All Articles