Hodnota koncentrace CO2, tedy oxidu uhličitého, se dostává čím dál tím více do popředí. Víme, že zvýšená koncentrace oxidu uhličitého ve vzduchu přispívá k únavě, později k bolesti hlavy až k nevolnostem.
KOncentrace CO2 se tak měří ve školách, ale čím dál tím častěji i v domácnostech bastlířů.
V tomto článku vysvětlíme, jaká čidla můžeme vybrat a jak je vlastně použít. V článku zároveň najdete i vzorové příklady.
Princip měření
Čidla používají k měření koncentrace CO2 optickou detekci zvanou NDIR.
Princip je jednoduchý, molekuly CO2 absorbují některé vlnové délky z infračerveného spektra. Na jedné straně trubice je emitor infračerveného záření, na straně druhé je pak čidlo s filtrem, který tuto absorpci detekuje a měří.
Zdroj: https://en.wikipedia.org/wiki/Nondispersive_infrared_sensor
Změřenou hodnotu můžeme poté vyčíst pomocí připojeného mikrokontroléru – například Arduino Uno nebo NodeMCU s čipem ESP8266.
Pro náš článek jsme vybrali vývojový kit ESP32-LPkit https://www.laskarduino.cz/laskakit-esp32-lpkit-pcb-antenna/
MH-Z19B
Parametry čidla jsou následující:
- napájecí napětí od 4.5V do 5.5V
- rozsah 0 – 5000 ppm
- přesnost +- 50 ppm +- 3% z naměřené hodnoty
- průměrný odběr < 20 mA při 5V
- špičkový proud 150 mA
- výstupní sběrnice: UART (9600, N, 8, 1), PWM, Analogový výstup oid 0.4V – 2V
- napětí sběrnice: 3.3V/5V
- čas nahřívání 90s
- doba odezvy je menší než 120s
Pro MH-Z19B můžeme využít tuto knihovnu s názvem ErriezMHZ19B, kde najdeme i tři vzorové kódy. Tu můžete použít jak s Arduino Uno, tak i třeba Wemos D1 Mini. Nezapomeňte ale, že napájecí napětí musí být větší než 3.6V.
Katalogový list najdete na https://www.winsen-sensor.com/d/files/MH-Z19B.pdf
/*
* Test code for MH-Z19B with ESP32-LPkit
* Serial2 is used as interface for CO2 sensor
* RX - GPIO16
* TX - GPIO17
*
* 2021 made by laskarduino
*
* Libraries:
* https://github.com/Erriez/ErriezMHZ19B
*/
#include <ErriezMHZ19B.h>
#define mhzSerial Serial2 // Definition of Serial2, RX GPIO16; TX GPIO17
ErriezMHZ19B mhz19b(&mhzSerial); // Create a object
void setup() {
Serial.begin(115200); // initialization of Serial;
mhzSerial.begin(9600); // Set the baudrate for Serial2 for MH-Z19B
delay(500);
Serial.println("Test code for MH-Z19B");
// Detect sensor
while ( !mhz19b.detect() )
{
delay(2000);
Serial.println("Sensor not detected.");
};
Serial.println("Sensor is detected.");
Serial.println("Waiting for warming.");
// Wait for warming-up completion
while ( mhz19b.isWarmingUp() )
{
delay(2000);
Serial.println("Warming-up.");
};
Serial.println("Warming is done.");
}
void loop() {
// wait for minimal interval
if (mhz19b.isReady())
{
// Read and print CO2
Serial.println(mhz19b.readCO2());
}
}
Nejnovější verzi vzorového kódu najdete na našem GitHubu:
https://github.com/LaskaKit/Testcode_examples/tree/main/Sensors/MH-Z19B
Výstup měřené koncentrace CO2 vypsaný v Serial Plotter.
MH-Z14
Parametry čidla jsou následující:
– napájecí napětí od 4.5V do 5.5V
– rozsah 0 – 5000 ppm
– přesnost +- 50 ppm +- 5% z měřené hodnoty
– průměrný odběr < 85 mA
– výstup: UART (9600, N, 8, 1), PWM a analogový signál (0.4 – 2V)
– napětí sběrnice: 3.3V
– předehřev 90s
– doba odezvy je menší než 90s
Katalogový list najdete na https://www.winsen-sensor.com/d/files/MH-Z14.pdf
Pro MH-Z14 můžeme použít různé knihovny, ale v našem příkladu jsme se obešli bez něj.
/*
* Test code for MH-Z14 with ESP32-LPkit
* Serial2 is used as interface for CO2 sensor
* RX - GPIO16
* TX - GPIO17
*
* 2021 made by laskarduino
*
* Libraries:
* -
*/
#include <WiFi.h>
#define RXD2 16 // RX of Serial2
#define TXD2 17 // TX of Serial2
byte addArray[] = {
0xFF, 0x01, 0x86,
0x00, 0x00, 0x00,
0x00, 0x00, 0x79
};
char dataValue[9];
String dataString = "";
void setup() {
Serial.begin(115200); // initialization of Serial;
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); // Set the baudrate for Serial2 for MH-Z14
delay(500);
Serial.println("Test code for MH-Z14");
}
void loop() {
int co2 = 0;
Serial2.write(addArray, 9);
Serial2.readBytes(dataValue, 9); // read Values from MH-Z14
co2 = (256*(int)dataValue[2])+(int)dataValue[3]; // Formula for CO2 divided into 2 bytes
Serial.print("CO2 value: "); Serial.print(co2); Serial.println(" ppm");
delay(2000);
}
Nejnovější verzi vzorového kódu najdete na našem GitHubu: https://github.com/LaskaKit/Testcode_examples/tree/main/Sensors/MH-Z14
Jedna odpověď
Mám doma čidlo MH-Z14A, stejné jako je na obrázku. Tak jako na obrázku jsou piny 4 a 5 spojené. Nechápu jak mohou být na těchto pinech rozdílná napětí. (Vout1 a Vout2). Najde se někdo kdo mi to vysvětlí?