Sensor CO2 MH-Z19B
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
- Winsgen: Intelligent Infrared CO2 Module (Model MH-Z19B) (Datasheet)
- Winsen: MH-Z19B CO2 sensor for indoor air quality monitoring