Site icon Elektrologi

Sensor CO2 MH-Z19B

Sensor Winsen MH-Z19B berfungsi mengukur kadar CO2 di udara. Prinsip pengukuran menggunakan NDIR (Non Dispersive Infrared). Fitur utama: selektivitas tinggi, tidak tergantung oksigen, masa pakai panjang. Di dalamnya sudah ada kompensasi temperatur. Outputnya tersedia 3 macam, berupa sinyal digital serial asinkron, sinyal digital PWM (pulse width modulation) dan tegangan analog.

Kadar CO2 di udara dapat dipakai untuk indikator kualitas ventilasi di suatu ruangan. Ventilasi yang baik ini penting untuk mengurangi penularan COVID-19.

Spesifikasi

Product Model MH-Z19B
Target Gas
CO2
Working voltage 4.5~ 5.5 V DC
Average current < 60mA(@5V)
Peak current 150mA (@5V)
Interface level 3.3 V(Compatible with 5V)
Measuring range refer to Table 2
Output signal
UART(TTL interface level 3.3V)
PWM
DAC(default 0.4-2V)
Preheat time 3 min
Response Time T90< 120 s
Working temperature
0 ~ 50 ℃
Working humidity 0~ 90% RH (No condensation)
Dimension 33 mm×20 mm×9 mm (L×W×H)
Weight 5g
Lifespan > 5 years
 

Penampakan

Berikut ini contoh sensor MH-Z19B yang dihubungkan ke prosesor ESP32 DevkitC. Pertimbangan menggunakan DevkitC adalah karena tegangan sinyal sensor adalah 3 volt namun juga memerlukan tegangan Vcc sebesar 5 volt. Board ESP32 Lolin32 Lite tidak memiliki output 5 volt, jadi agak sulit digunakan pada aplikasi ini.

Contoh Kode

Berikut ini contoh pembacaan sensor melalui port serial.

Konfigurasi port serial di ESP32 menggunakan pin 22 sebagai RXD dan pin 23 sebagai TXD. Jalur port serial dihubungkan melalui resistor 100 ohm untuk perlindungan kalau terjadi kesalahan polaritas pin TX dan RX.

// https://circuits4you.com/2018/12/31/esp32-hardware-serial2-example/

#define RXD2 22
#define TXD2 23

// These constants won't change. They're used to give names to the pins used:

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

#define LED_BUILTIN 2

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
  Serial.println("Start Devkit");
  Serial.println("Start Devkit");

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(21, OUTPUT);
}

void loop() {
  char cmd;

  Serial2.print((char)0xff); // 0 : start byte
  Serial2.print((char)0x01);
  Serial2.print((char)0x86);
  Serial2.print((char)0x00);
  Serial2.print((char)0x00);
  Serial2.print((char)0x00);
  Serial2.print((char)0x00);
  Serial2.print((char)0x00);
  Serial2.print((char)0x79); // 8: checksum

  int counter = 0;
  int co2_high, co2_low;
  int available;
  available = Serial2.available();
  while (available > 0) {

    // read the incoming byte:
    int incomingByte = Serial2.read();

    // say what you got:
    Serial.print(">>:");
    Serial.println(incomingByte, DEC);

    if (counter == 2) {
      co2_high = incomingByte;
    }
    if (counter == 3) {
      co2_low = incomingByte;
    }
    available = Serial2.available();

    counter++;
  }
  Serial.print("CO2: ");
  Serial.println(co2_high * 256 + co2_low);

  //  Serial.print("available: ");
  //  Serial.println(available);

  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(21, HIGH);
  delay(500);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(21, LOW);    // turn the LED off by making the voltage LOW
  delay(500);
}

Referensi

 

Exit mobile version