Detektor oxidu uhličitého je vstupní modul pro Arduino. Tento detektor MH-Z19B dokáže měřit koncentraci CO2 ve svém okolí společně s teplotním senzorem, který slouží pro kompenzaci výsledků. Díky této kombinaci můžeme měřit koncentraci v rozsahu 0-5000 ppm. Výsledky pak lze získat buď přes sériovou linku nebo PWM výstup.
Pro napájení detektoru MH-Z19B lze použít napájecí napětí v rozsahu 3,6-5,5 Voltu. Proudový odběr se pohybuje maximálně okolo 18 miliampér, kdy největší hodnotu naměříme během počátečního předehřevu, který trvá přibližně 90 sekund.
Pro úspěšné propojení detektoru CO2 a Arduino desky propojíme celkem 5 vodičů. Připojíme PWM na pin D9, GND na zem Arduina, Vin na 5V Arduina, Rx na pin D10 a Tx na pin D11. Pro komunikační piny lze použít také jiné volné piny. Změnu je ale nutné provést také na začátku programu. A u PWM pinu je nutné zvolit PWM pin Arduina.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu MHZ19, návod, jak na to je uveden zde.
Ukázkový kód obsahuje na svém začátku připojení potřebné knihovny a nastavení čísel propojovacích pinů. Tyto piny poté použijeme pro vytvoření objektů z knihovny, kdy se jedná o objekt pro komunikaci po UART a PWM.
Ve funkci setup zahájíme komunikaci po sériové lince a následně zahájíme komunikaci se senzorem přes UART. Společně se zahájením také můžeme nastavit vypnutí autokalibrace.
Nekonečná smyčka loop začíná vždy zahájením měření senzoru a načtením výsledků do proměnné. Jako první toto načtení údajů provedeme pro komunikaci skrze UART a poté pro komunikaci přes PWM pin. Následně vytiskneme všechny získané údaje, kdy při komunikaci přes UART můžeme zjistit také teplotu v okolí. Po tisku pak už jen počkáme delší pauzu a přejdeme na nový běh smyčky.
// Detektor CO2 MH-Z19 // připojení potřebné knihovny #include "MHZ19.h" // nastavení propojovacích pinů #define rx_pin 11 #define tx_pin 10 #define pwmpin 9 // vytvoření objektů z knihovny MHZ19 *mhz19_uart = new MHZ19(rx_pin, tx_pin); MHZ19 *mhz19_pwm = new MHZ19(pwmpin); void setup() { // zahájení komunikace po sériové lince Serial.begin(9600); // zahájení komunikace se senzorem přes UART mhz19_uart->begin(rx_pin, tx_pin); // vypnutí autokalibrace mhz19_uart->setAutoCalibration(false); } void loop() { // zahájení měření senzoru a načtení výsledků do proměnné measurement_t m = mhz19_uart->getMeasurement(); int co2ppm = mhz19_pwm->getPpmPwm(); // vytištění naměřených údajů Serial.print("Koncentrace CO2: "); Serial.print(map(m.co2_ppm, 0, 5000, 0, 2000)); Serial.print("ppm, mereni pres PWM: "); Serial.print(co2ppm); Serial.print("ppm, teplota: "); Serial.print(m.temperature); Serial.println("stC"); // pauza před novým měřením delay(5000); }
Po nahrání ukázkového kódu do Arduino desky s připojeným detektorem MH-Z19B dostaneme například tento výsledek:
Koncentrace CO2: 925ppm, mereni pres PWM: 918ppm, teplota: 27stC Koncentrace CO2: 926ppm, mereni pres PWM: 918ppm, teplota: 27stC Koncentrace CO2: 926ppm, mereni pres PWM: 918ppm, teplota: 27stC Koncentrace CO2: 927ppm, mereni pres PWM: 918ppm, teplota: 27stC
Detektor oxidu uhličitého MH-Z19B je zajímavým modulem, který nám umožňuje detekovat hladinu CO2 ve svém okolí. Díky tomu se může hodit do projektů pro chytrou domácnost se zapojením pro automatické větrání, topení a podobně. Za velkou výhodu považuji možnost jeho kalibrace, rychlého náběhu pod 2 minuty či malý proudový odběr. A ve své kategorii měřidel CO2 vyniká také rozumnou cenou. Při svém měření jsem porovnával výsledky s meteostanicí Netatmo, kdy obě zařízení podávaly velmi podobné výsledky. Pouze jsem musel provést přepočet u údajů z UARTu, kdy vidíte u tištění mapování rozsahu z 0-5000 na 0-2000.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/7731-detektor-oxidu-uhliciteho-co2.html