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.

Detektor oxidu uhličitého MH-Z19B

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.

Detektor oxidu uhličitého MH-Z19B

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

FB tw

Další podobné články