blog.vyoralek.cz

DiY – WiFi senzor kvality vzduchu – měření CO2

Další článek z kategorie DiY, tedy “udělej si sám” a podíváme se jak si postavit poměrně “levný” senzor CO2 v místnosti.

Dříve nebo později možná zjistíte, že byste kromě teploty a vlhkosti rádi monitorovali i kvalitu vzduchu ve vašem bytě nebo domě. Jednou z veličin, kterou může být užitečné monitorovat je množství CO2 ve vzduchu.

K tomu abychom pochopili proč může být množství CO2 dobré monitorovat nám pomůže si nejprve trochu osvěžit znalosti zřejmě ze základní školy.

Co je CO2 – Oxid uhličitý

CO2 neboli oxid uhličitý vzniká dokonalým spalováním uhlíku, při dýchání, kvašení, tlení, hoření.

Oxid uhličitý Je konečným produktem spalování každé organické látky. V případě našeho příbytku tak budeme hlavními producenty mi samotní.

Oxid uhličitý je bezbarvý plyn, bez zápachu, rozpustný ve vodě, cca 1,5krát těžší než vzduch, nehoří a působí dusivě. Pocitově tedy nejsme úplně schopní posoudit kolik ho vlastně v místnosti máme.

Mezi hlavní symptomy nadměrné přítomnosti oxidu uhličitého v místnosti je často pocit únavy a ovlivňuje také negativně kvalitu spánku. Ledasco nám napoví i následující tabulka:

Hodnota CO2Vliv a příznaky
< 1000 ppmNormální doporučená hodnota
1000 – 2000 ppm“Těžký” vzduch – může začínat pocit ospalosti
2000 – 5000 ppmBolest hlavy
nad 5000 ppmZrychlený tep

A zajímavý je i graf měření množství CO2 z jedné školy i při větrání během přestávek [zdroj]

Nyní už tedy orientačně tušíme jaké hodnoty CO2 bychom rádi v místnosti měli a nyní nastal čas se podívat jak se k nim můžeme dostat.

Měření CO2 není obecně úplně jednoduché. My se podíváme se na jednu z metod, která dává rozumné výsledky a nenecháme za senzor úplný ranec – i když stále oproti klasickým senzorům teploty či vlhkosti je senzor CO2 poměrně drahá záležitost.

Metoda na kterou se podíváme se označuje NDIR. Pracuje na principu měření útlumu infračerveného záření (o specifické vlnové délce) ve vzduchu. Čidla se skládají ze zdroje infračerveného záření, světlovodná trubice a infračerveného detektoru s příslušným filtrem. Signál z infračerveného detektoru se dále zesiluje a pak se pomocí další elektroniky vyhodnocuje útlum záření a na tomto základě se vypočítá aktuální koncentrace oxidu uhličitého ve vzduchu.

CO2 je těžší než vzduch jako takový a tak se bude během spánku držet spíše u zemi – myslete na to pokud budete uvažovat kam čidlo umístit.

Senzor CO2 – MH-Z19B

MH-Z19B je představitel senzorů měření CO2, který používá právě zmíněnou metodu NDIR. I díky tomu je senzor poměrně velký.

K hodnotám měření se můžeme dostat hned dvěmi způsoby:

  1. UART komunikace pomocí TX/RX pinů
  2. PWM přímé čtení hodnoty z pinu

Pro náš DiY měřák si použijeme možnosti první, ale můžete si vyzkoušet jednoduše i možnost druhou.

Technické parametry senzoru

NázevHodnota
Napájení3,6 – 5,5 V
Proud< 18mA
Rozsah měření0 – 0.5% (0 – 5000 ppm)
Přesnost+/- 50 ppm
Pracovní teplota0 – 50°C (do interiéru)
Pracovní relativní vlhkost0 – 95%
Výstupní signálpřes UART nebo PWM
Princip fungováníNDIR (nedisperzní infračervený senzor)
Velikost33 x 20 x 9 mm

Při pohledu na tabulku si možná říkáme co je to za jednotku ppm. Tak věřte, že se jedná o možství částic plynu / prachu na jeden milion. Tj. 1 mil ppm = 100%, 10 tis ppm = 1% atp. Koncentrace CO2 ve vzduchu ve volné přírodě je zpravidla cca. 360-400 ppm přičemž ale i vlivem činnosti stále roste.

Jednotlivé komponenty

Množství součástek není velké a pokud jste kutilové tak budete mít zřejmě už většinu doma 🙂

Wemos D1 Mini

Miniaturní vývojová deska s čipem ESP8266, která obsahuje WiFi modul.

$2 (cca. 50kč)

MH-Z19B

Samotný senzor pro měření CO2.

$17 (cca. 400kč)

Dupont vodiče

Pro rychlé propojení Wemos desky se senzorem.

$1 (cca. 24Kč)

Nepájivé pole (breadboard)

Hodí se zejména pokud chceme k vývojové desce připojit více komponent.

$1 (cca. 24Kč)

Alternativně:

Doit ESP32

Alternativně můžeme použít i ESP32, která má navíc i Bluetooth modul.

$4.5 (cca. 100kč)

Zapojení

Samotné propojení snímače a vývojové desky Wemos D1 Mini není nijak složité – je potřeba zapojit:

  • napájení 5V a zem
  • sériovou komunikaci pomocí TX a RX pinu

Celkově bude potřeba propojit čtyři vodiče.

Senzor CO2 MH-Z19 společně s Wemos D1 mini

Pokud se podíváme na konkrétní piny pro Wemos D1 Mini, pak se jedná o D1, D2, 5V a GND. Na senzoru MH-Z19 pak budeme potřebovat piny Rx, Tx Vin a GND.

Pro úplnost si uveďme v tabulce i význam všech pinů, které jsou vyvedené na senzoru:

PINVýznam
Pin 1Vout (výstupní napětí 3,3V, proud menší než 10mA)
Pin 2UART RX – pro čtení hodnot měření
Pin 3UART TX – pro čtení hodnot měření
Pin 4SR (nějaké tovární věci)
Pin 5HR (kalibrace nuly, nízké napětí > 7s, pouze pro továrnu)
Pin 6Vin (vstupní napětí 5V)
Pin 7GND (zem)
Pin 8AOT (nějaké tovární věci)
Pin 9PWM – alternativní možnost čtení hodnot měření, nepoužijeme
Zapojení MH-Z19 s Wemos D1 mini

Integrace – ESPHome a HomeAssistant

Jelikož senzor bude komunikovat s Wemos D1 Mini (ESP8266) a nebo Do IT ESP32 nabízí se nám použití firmware EspHome, která už má podporu pro náš senzor MH-Z19B.

💡 Pokud ještě nemáte zkušenosti s ESPHome doporučuji nejprve kouknout na můj starší článek, kde najdete vše potřebné k rozchození.

Jakmile máme v ESPHome vytvořenou novou konfiguraci se základní šablonou pro Wemos D1 Mini a nebo Do IT ESP32, popř. jakoukoliv jinou deskou, kterou jste se rozhodli použit, můžeme se vrhnout na přidání konfigurace pro senzor. Jako příklad uvádím konfiguraci pro Wemos D1 mini – pokud máte jinou desku bude potřeba změnit názvy pinů na ty které jste použili.

uart:
  rx_pin: D2
  tx_pin: D1
  baud_rate: 9600

sensor:
  - platform: mhz19
    co2:
      name: "MH-Z19 CO2 Value"
    temperature:
      name: "MH-Z19 Temperature"
    update_interval: 60s
    automatic_baseline_calibration: true

Jakmile máme konfiguraci se senzorem hotovou nahrajeme nový firmware na desku a můžeme se vrhnout na přidání do HomeAssistenta (popř. jiného systému). To je díky přímé integraci jednoduché – v menu Nastavení ▶︎ Integrace klikneme na tlačítko + a najdeme si ESPHome položku. Vyplníme IP adresu, klikneme na odeslat a máme hotovo!

V HomeAssistantovi bychom měli nyní vidět dvě nové entity – jedná je hodnota naměřené pro CO2 a druhá je velmi orientační teplota – tu doporučuji spíše ignorovat, jelikož není moc přesná.

Graf hodnoty CO2 v místnosti za 24 hodin

Zhodnocení

Díky novému čidlu na CO2 máme nyní přehled o množství CO2 v místnosti a zejména v zimních měsících, kdy většina z nás spí se zavřeným oknem mohou být získané hodnoty poměrně překvapením.

Jedna z poměrně dobrých vlastností CO2 je, že se dá poměrně jednoduše a rychle vyvětrat a většinou tak postačí alespoň na pár minut otevřít okno a hodnoty budou rázem zase příjemnější.

19 komentářů

Leave a Reply

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

    • Supr ! 🙂 Občas si říkám, jestli při té dnešní nabídce produktů jsou ještě ty DiY “produkty” pro někoho zajímavé, ale očividně ano. A pravda, že zrovna u měření CO2 je i tak ta nabídka mizerná a nebo cenově úplně mimo. Díky za komentář.

  • I já právě objednal…
    DIY jsou zajímavé právě proto, že jsou DIY.
    Díky za supr návod a inspiraci. Číňan píše, že to dojde až začátkem září, tak pak se ozvu s poznatky z praxe.

  • Tohle čidlo mě slouží spolehlivě už 3/4 roku přesně v tomto “katalogovém zapojení”. Až ho konečně dám do krabičky a budu ho tak moci rozumně transportovat, zkusím hodnoty z něho porovnat s Netatmo stanicí.

    • Díky za potvrzení funkčnosti a ta přesnost by byla také zajímavá. Plánuješ použít nějakou obyčejnou univerzální krabičku a nebo nějakou speciální na 3D tiskárně? Uvažoval jsem nad tím taky, ale trochu bude možná oříšek udělat, jelikož ten senzor potřebuje hned dva otvory.

      • Zatím plánuji na zkoušku instalaci do nevzhledné plastové krabičky KM84. Ta má právě dva průduchy. Potom zřejmě něco vlastního. …Tuším, že právě vnitřní modul Netatmo má jen jeden mini otvor. Musím to zítra okouknout. Nepátral jsem co je uvnitř za čidlo, ale přítomnost lidí v místnosti spolehlivě snímá a otevřené okno s poklesem hladiny CO2 taky. Možná to nebude s těmi otvory tak kritické.

  • Pod první forkou zapojení je drobná chybka v PINech:
    Na senzoru MH-Z19 pak budeme potřebovat piny Tx, Tx Vin a GND.
    Myslím, že má být
    …Rx, Tx…

    • Rozhodně má, opraveno. Díky moc za upozornění. Člověk jak si čte články po sobě tak mu toho spousta stále uteče.

  • Tak mám vše po kupě a jdu na to… Pájení jsem nějak dal, ale teď mi při nahrávání souboru přes usb vyskakuje Unexpected error: could not open port ‘COM5’: PermissionError(13, ‘Přístup byl odepřen.’, None, 5)
    🙁
    Prosím o pomoc kterým směrem hledat řešení.
    Díky předem

      • Mám je křížem. Zkusil jsem je i napřímo.
        Pořád stejné. 🙁
        Budu googlit.

        • Tak chyba byla v tom, že jsem neměl propojeny Gnd a D3 (flash mód).

          • Hmm.. zajímavé. Měl jsem za to, že Wemos D1 mini není potřeba přepínat manuálně do flash módu. Raději jsem si to ověřil:

            These developer boards already have everything necessary on their board and can therefore be connected directly to the computer with a Micro-USB cable. Switching to flash mode is not necessary here, the electronics of these boards do this automatically.

            Já jsem určitě D3 pin nepropojoval, jak by mělo být i patrné z fotky. Záráží mě tedy proč to v tém v případě bylo potřeba.

  • Tak abych shrnul své druhé flashování (to první byl Sonoff TH10 a běhá v pohodě): nějak jsem tady vycházel ze zkušenosti se sonoffem a flashoval jsem stejně, tedy přes uart 🙁
    Ale teď už jsem chytřejší.
    Po nahrání FW mi log říkal, že
    [mhz19:034]: Reading data from MHZ19 failed!
    To protože jsem měl Rx na Rx a Tx na Tx. Tež už mám zapojeno správně a chybí vyřešit poslední věc, s níž se trápím od včerejška:
    MHZ19 Received CO₂=5000ppm, neboli stále mi posílá max hodnotu a ne skutečnou.
    A co se týče teploty a její přesnosti, tak rozdíl někdy 1, někdy 1,5 st. Ale myslím, že je to zaokrouhlováním na celé stupně.
    Takže na závěr: nevíš, co s tou max. hodnotou 5000? Díky předem za pomoc.

    • Jirko, omlouvám se, že tu otravuju svými začátečnickými chybami, ale, jen co jsem odeslal předchozí příspěvek a kouknul na schéma, co tu máš, úplně mě to praštilo… Čidlo jsem měl propojeno s 3,3 namísto 5V.
      Takže problém vyřešen. Ještě jednou díky za Tvé skvělé návody.

      • Jak se říká chybami se člověk učí, takže to je naprosto vpořádku a supr, že jsi to tady popsal. Pokud se někdo dostane do podobných patálií tak už bude vědět v čem může být problém a já taky 🙂 Zatím většina troskotala na přehození Tx/Rx.

  • Inspiruje mě to k sestavení čidla, které by figurovalo jako Zigbee zařízení. Navýšení ceny oproti řešení přes wifi neřeším. Postrčíte mě někdo správným směrem – jakou prototypovací desku zvolit, podpora v HA, zkušenosti apod.? Díky!

  • Děkuji za (jako vždy) super popis. Chtěl jsem již několikrát toto čidlo zakoupit, ale vždy mě odradilo toto forum https://forum.mypower.cz/viewtopic.php?f=19&t=2253 ve kterém toto čidlo poměřovali s profi řešením a čidlo MH-Z19B vyšlo špatně v přesnosti. Doporučuji celé vlákono pročíst, protože jsou tam další čidla, které jsou přesnější.

  • Díky za super návod.
    Po určité době běhu u mne v interiéru došlo ale bohužel k “rozkalibrování” hodnot.
    Ve vašem návodu je “automatic_baseline_calibration: true”, což vzhledem k algoritmu který ABC tvoří vede k posunutí prahu 400ppm o dost výše (tedy alespoň u mne :-).
    Jestli jsem to tedy načetl správně: co 24h tato kalibrace nastaví hodnotu 400ppm na minimalní naměřenou hodnotu. Tudíž pokud nedokážete dům vyvětrat na venkovní hodnoty, tak se vám práh posune a čidlo vrací nižší hodnoty ppm, než je reálný stav.Ü mne se ta autokalibrace projevila v grafu svislou čárou o několik set ppm (bez změny teploty nebo jiného parametru). Jelikož větrám rekuperačně tak jiný důvod v tom asi nebyl.
    Za mne tedy lepší je hned při první kompilaci nastavit “automatic_baseline_calibration: false”.
    Abych se vrátil ke správným hodnotám, zkusím čidlo vystrčit na 24h ven (bohužel na mráz s jinou vlhkostí) s dočasně zapnutou autokalibrací a po přenastavení ji vypnu.
    Další kalibraci zkusím až v létě, až se podmínky doma a venku srovnají.
    Níže přikládám kód pro kompilaci, kde je :
    – vypnutá autokalibrace při bootu
    – přidán přepínač na manuální vyp/zap autokalibrace
    – přidán offset na kompenzaci kalibrace co2 a teploty
    – co2 se kalibruje na 400ppm, ale venku je min. 417ppm
    – teploměr ukazuje systematicky více, tímto se to trochu dá vykompenzovat
    Třeba se to někumu bude k experimentům hodit 🙂

    switch:
    – platform: template
    name: “MH-Z19 ABC”
    optimistic: true
    on_turn_on:
    – mhz19.abc_enable: mhz19sensor
    on_turn_off:
    – mhz19.abc_disable: mhz19sensor

    uart:
    rx_pin: D2
    tx_pin: D1
    baud_rate: 9600

    sensor:
    – platform: mhz19
    id: mhz19sensor
    co2:
    name: “MH-Z19 CO2 Value”
    filters:
    – offset: 20.0
    temperature:
    name: “MH-Z19 Temperature”
    filters:
    – offset: -4.0
    update_interval: 60s
    automatic_baseline_calibration: false

%d bloggers like this: