Descripción general del sensor infrarrojo de CO2 MH-Z19

Recientemente, los dispositivos que muestran los niveles de CO 2 han sido populares, así como artículos que dicen cómo un monitor de CO 2 puede convertirse en un sensor conectado a una computadora. Por otro lado, quiero mostrar la solución al problema.

A diferencia de los sensores de CO 2 más antiguos , el MH-Z19 no requiere voltaje específico o alta potencia y puede transmitir datos a través de UART y PWM.



  • Hd — , Hd 7 LOW. .
  • SR —
  • Tx — — 3.3
  • Rx — 3.3 ( 5, )
  • Vo — 3.3, 10

  • PWM, : 1004, 2 HIGH, — LOW, «» CO2 0 — 5000ppm ( 2000ppm ).
    Cppm = 5000 * (Thigh — 2ms)/(Thigh + Tlow — 4ms)
    , PWM — , 3.3.
  • AOT —
  • Gnd —
  • Vin — 3.6 — 5.5 ( 3.3, )


No es que no confiara en PWM, pero es mejor obtener los datos en formato digital y con una suma de verificación. UART le permite consultar niveles de CO 2 y hacer dos tipos de calibración. Dejamos la calibración a Garrus y consideramos la solicitud de datos. Para hacer esto, a una velocidad de 9600 (8 bits, stop - 1, paridad - ninguno), debe enviar los siguientes nueve bytes:
• 0xFF - el comienzo de cualquier comando
• 0x01 - el primer sensor (es solo uno)
• 0x86 - comando
• 0x00, 0x00, 0x00, 0x00, 0x00 - datos
• 0x79 - suma de verificación.

Algo así volverá:
• 0xFF - el comienzo de cualquier respuesta
• 0x86 - comando
• 0x01, 0xC1 - valor alto y bajo (256 * 0x01 + 0xC1 = 449)
• 0x3C, 0x04, 0x3C, 0xC1: la documentación dice que debería aparecer algo como 0x47, 0x00, 0x00, 0x00, pero en realidad no está claro qué.
• 0x7B: la suma de comprobación.

La suma de comprobación se calcula de la siguiente manera: se toman 7 bytes de la respuesta (todos excepto el primero y el último), se suman, invierten, aumentan en 1: 0x86 + 0x01 ... + 0xC1 = 0x85, 0x85 xo 0xFF = 0x7A, 0x7A + 1 = 0x7B.

Según la documentación, el sensor tarda unos tres minutos en ingresar al modo operativo. La primera vez después de encenderlo, producirá 5000ppm o 400ppm. Después de una soldadura particularmente diligente, puede llegar a varias horas.

El sensor responde a un cambio en la concentración de CO 2con un retraso de aproximadamente un minuto. Si excede una concentración de 5000ppm (por ejemplo, respiró fuerte durante un minuto), dará datos falsos por un tiempo, subestimando el nivel de CO 2 ; así es como incluso obtuve 80ppm.

Esto no se refleja en la documentación, pero no debe solicitar datos UART con más frecuencia que cada 10 segundos, de lo contrario, el sensor comienza a emitir algo extraño.

Es hora de las fotos. Conecte el sensor al Arduino Uno mediante Software Serial, TX / RX en A0 / A1, 5V de potencia, tierra en Gnd:



Bosquejo prestado en el que se agrega la verificación de suma de verificación
#include <SoftwareSerial.h>;

SoftwareSerial mySerial(A0, A1); // A0 -  TX , A1 -  RX

byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; 
unsigned char response[9];

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() 
{
  mySerial.write(cmd, 9);
  memset(response, 0, 9);
  mySerial.readBytes(response, 9);
  int i;
  byte crc = 0;
  for (i = 1; i < 8; i++) crc+=response[i];
  crc = 255 - crc;
  crc++;

  if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
    Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
  } else {
    unsigned int responseHigh = (unsigned int) response[2];
    unsigned int responseLow = (unsigned int) response[3];
    unsigned int ppm = (256*responseHigh) + responseLow;
    Serial.println(ppm);
  }
  delay(10000);
}


Cada medición se realiza a intervalos de 10 segundos. Los valores dejaron de saltar cuando me alejé del sensor.


Ahora hagamos que el sensor sea móvil. Para hacer esto, necesita un dispositivo con OTG y una aplicación como DroidTerm .
Hay una sutileza: para establecer una conexión, debe reiniciar el Arduino.


Después de asegurarnos de que todo funciona, eliminaremos el Arduino y lo reemplazaremos con el FTDI FT232RL.


El sensor debe ser alimentado después de la conexión para que no haya problemas con la conexión.
Utilizo RealTerm para enviar datos binarios a través del puerto COM :


puede valer la pena agregar administración de energía a través de DTR para que el sensor pueda reiniciarse.

Enlaces útiles:
manual del sensor MH-Z19 Diagrama de conexión
y código para PWM
Comparación con otro sensor.
Artículo sobre GT sobre MH-Z19 y ESP8266.

Tengo un solo sensor y realmente no me gusta desmontar lo que hice una vez, así que le sugiero que elija.

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


All Articles