Visão geral do sensor de CO2 infravermelho MH-Z19

Recentemente, os gadgets que mostram os níveis de CO 2 têm sido populares, além de artigos que mostram como um monitor de CO 2 pode ser transformado em um sensor conectado a um computador. Eu quero mostrar a solução para o problema, por outro lado.

Ao contrário dos sensores de CO 2 mais antigos , o MH-Z19 não requer voltagem específica ou alta potência e pode transmitir dados via UART e 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, )


Não é que eu não confiei no PWM, mas é melhor colocar os dados em formato digital e com uma soma de verificação. O UART permite consultar os níveis de CO 2 e fazer dois tipos de calibração. Deixamos a calibração para Garrus e consideramos a solicitação de dados. Para fazer isso, a uma velocidade de 9600 (8 bits, parada - 1, paridade - nenhuma), você precisa enviar os seguintes nove bytes:
• 0xFF - o início de qualquer comando
• 0x01 - o primeiro sensor (é apenas um)
• 0x86 - comando
• 0x00, 0x00, 0x00, 0x00, 0x00 - dados
• 0x79 - soma de verificação.

Algo assim voltará:
• 0xFF - o início de qualquer resposta
• 0x86 - comando
• 0x01, 0xC1 - valor alto e baixo (256 * 0x01 + 0xC1 = 449)
• 0x3C, 0x04, 0x3C, 0xC1 - a documentação diz que algo como 0x47, 0x00, 0x00, 0x00 deve aparecer, mas, na realidade, não está claro o que.
• 0x7B - a soma de verificação.

A soma de verificação é calculada da seguinte forma: 7 bytes da resposta são obtidos (todos, exceto o primeiro e o último), adicionados, invertidos, aumentados em 1: 0x86 + 0x01 ... + 0xC1 = 0x85, 0x85 xor 0xFF = 0x7A, 0x7A + 1 = 0x7B.

De acordo com a documentação, o sensor leva cerca de três minutos para entrar no modo de operação. A primeira vez após ligá-lo, produzirá 5000 ppm ou 400 ppm. Após uma soldagem particularmente diligente, pode demorar várias horas.

O sensor responde a uma mudança na concentração de CO 2com um atraso de cerca de um minuto. Se você exceder uma concentração de 5000ppm (por exemplo, você respirou fundo por um minuto), ele fornecerá dados falsos por um tempo, subestimando o nível de CO 2 - até consegui 80ppm dessa maneira.

Isso não está refletido na documentação, mas você não deve solicitar dados UART com mais frequência a cada 10 segundos, caso contrário, o sensor começará a emitir algo estranho.

Está na hora das fotos. Conecte o sensor ao Arduino Uno via Software Serial, TX / RX em A0 / A1, potência de 5V, terra em Gnd:



Esboço emprestado no qual a verificação de soma de verificação é adicionada
#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 medição ocorre em intervalos de 10 segundos. Os valores pararam de pular quando me afastei do sensor.


Agora vamos tornar o sensor móvel. Para fazer isso, você precisa de um dispositivo com OTG e de um aplicativo como o DroidTerm .
Há uma sutileza: para estabelecer uma conexão, você precisa reiniciar o Arduino.


Depois de garantir que tudo funcione, removeremos o Arduino, substituindo-o pelo FTDI FT232RL.


O sensor deve ser ligado após a conexão, para que não haja problemas com a conexão.
Uso o RealTerm para enviar dados binários pela porta COM :


pode valer a pena adicionar gerenciamento de energia via DTR para que o sensor possa ser reiniciado.

Links úteis:
manual do sensor MH-Z19 Esquema de conexão
e código para PWM
Comparação com outro sensor
Artigo no GT sobre MH-Z19 e ESP8266.

Eu tenho apenas um sensor e realmente não gosto de desmontar o que fiz uma vez, então sugiro que você escolha.

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


All Articles