Tinjauan sensor inframerah CO2 MH-Z19

Baru-baru ini, gadget yang menunjukkan tingkat CO 2 telah populer, serta artikel yang menceritakan bagaimana monitor CO 2 dapat diubah menjadi sensor yang terhubung ke komputer. Saya ingin menunjukkan solusi untuk masalah di sisi lain.

Tidak seperti sensor CO 2 yang lebih lama , MH-Z19 tidak memerlukan voltase khusus atau daya tinggi dan dapat mengirimkan data melalui UART dan 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, )


Bukannya saya tidak mempercayai PWM, tetapi lebih baik untuk mendapatkan data dalam digital dan dengan checksum. UART memungkinkan Anda untuk meminta level CO 2 dan melakukan dua jenis kalibrasi. Kami meninggalkan kalibrasi ke Garrus dan mempertimbangkan permintaan data. Untuk melakukan ini, pada kecepatan 9600 (8 bit, stop - 1, parity - none), Anda perlu mengirim sembilan byte berikut:
โ€ข 0xFF - awal perintah apa pun
โ€ข 0x01 - sensor pertama (hanya satu)
โ€ข 0x86 - perintah
โ€ข 0x00, 0x00, 0x00, 0x00, 0x00 - data
โ€ข 0x79 - checksum.

Sesuatu seperti ini akan kembali:
โ€ข 0xFF - awal dari setiap jawaban
โ€ข 0x86 - perintah
โ€ข 0x01, 0xC1 - nilai tinggi dan rendah (256 * 0x01 + 0xC1 = 449)
โ€ข 0x3C, 0x04, 0x3C, 0xC1 - dokumentasi mengatakan bahwa sesuatu seperti 0x47, 0x00, 0x00, 0x00 akan datang, tetapi pada kenyataannya tidak jelas apa.
โ€ข 0x7B - checksum.

Checksum dihitung sebagai berikut: 7 byte respon diambil (semua kecuali yang pertama dan terakhir), ditambahkan, terbalik, meningkat sebesar 1: 0x86 + 0x01 ... + 0xC1 = 0x85, 0x85 xor 0xFF = 0x7A, 0x7A + 1 = 0x7B.

Menurut dokumentasi, sensor membutuhkan waktu sekitar tiga menit untuk masuk ke mode operasi. Pertama kali setelah menyalakannya, itu akan menghasilkan 5000ppm atau 400ppm. Setelah penyolderan yang rajin, mungkin diperlukan beberapa jam.

Sensor merespons perubahan konsentrasi CO 2dengan penundaan sekitar satu menit. Jika Anda melebihi konsentrasi 5000ppm (misalnya, Anda menghirupnya selama satu menit), itu akan memberikan data palsu untuk sementara waktu, meremehkan tingkat CO 2 - Saya bahkan mendapat 80ppm dengan cara ini.

Ini tidak tercermin dalam dokumentasi, tetapi Anda tidak boleh meminta data UART lebih sering daripada setiap 10 detik, jika tidak, sensor mulai memberikan sesuatu yang aneh.

Saatnya berfoto. Hubungkan sensor ke Arduino Uno melalui Software Serial, TX / RX di A0 / A1, daya 5V, ground di Gnd:



Sketsa pinjaman di mana verifikasi checksum ditambahkan
#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);
}


Setiap pengukuran berlangsung dengan interval 10 detik. Nilai-nilai berhenti melompat ketika saya menjauh dari sensor.


Sekarang mari kita buat sensor ponsel. Untuk melakukan ini, Anda memerlukan perangkat dengan OTG dan aplikasi seperti DroidTerm .
Ada kehalusan: untuk membuat koneksi, Anda harus me-restart Arduino.


Setelah memastikan bahwa semuanya berfungsi, kami akan menghapus Arduino, menggantinya dengan FTDI FT232RL.


Sensor harus dinyalakan setelah koneksi sehingga tidak ada masalah dengan koneksi.
Saya menggunakan RealTerm untuk mengirim data biner melalui port COM :


Mungkin perlu menambahkan manajemen daya melalui DTR sehingga sensor dapat dihidupkan ulang.

Tautan yang berguna:
manual sensor MH-Z19 Diagram koneksi
dan kode untuk PWM
Bandingkan dengan sensor lain.
Artikel tentang GT tentang MH-Z19 dan ESP8266.

Saya hanya punya satu sensor dan saya benar-benar tidak ingin membongkar apa yang pernah saya lakukan, jadi saya sarankan Anda memilih.

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


All Articles