Měříme CO2 čidlem CozIR-LP a ESP32 posílá data na tmep.cz
- April 13 2020
- Čidla, indikátory / Sensors
- 2825x Přečteno
V dnešní době můžeme jednoduše a levně měřit spoustu parametrů ovzduší - od teploty a vlhkosti až po kvalitu vzduchu nebo koncentraci ozónu či CO2.
A právě o čidle a použití CO2 bude dnešní článek. Budeme měřit CO2 a data posílat na tmep.cz.
Hodnota CO2 patří mezi ty důležité - při vyšších koncentracích se můžete cítit unaveně a malátně a při enormních hodnotách CO2 vás dokonce může ohrozit na vašem zdraví.
Meření CO2 nepatří mezi jednoduché meření a i proto se cena těchto čidel pohybuje ve vyšší cenových relacích - od tisíce korun výše.
Já jsem před x měsíci dostal čidlo CozIR-LP (LP jako low-profile) od GSS (Gas Sensing Solutions).
Čidlo jako takové se skládá z čidla a desky s mikrokontrolérem STM32. Ten se stará o zpracování dat, filtraci i odesílání dat skrze sběrnici UART.
S čidlem komunikujte pomocí příkazů - díky nim můžete nastavit jinou filtraci, provést kalibraci, vyčíst data a další - podrobnější informace naleznete zde.
Rozsah měření čidla je
0-2000 ppm
0-5000 ppm
0-1%
Spotřeba v běžném režimu měření je 3mW - což je velmi málo.
Já toto čidlo použil s mou deskou ESP32 MiniKit LP, která má v režimu spánku spotřebu pouhých 5uA.
Kód pro ESP32 píšu v Arduino IDE a tak jsem si chtěl napsat vlastní knihovnu pro komunikaci s čidlem (jedná se o jednoduché příkazy skrze UART), ale na githubu jsem našel knihovnu Cozir CO2 Sensor Arduino Library .
Dotyčný ale používá Softwarý serial port. U ESP32 je ale použití Softwarového serial portu zbytečné, když má více hardwarových.
Využil jsem tedy Serial2 (RX pin - GPIO16; Tx pin - GPIO17) a mírně upravil knihovnu.
Upravená knihovna pro použití hardwarového serial portu je ke stažení zde.
Jak jsem už psal, komunikace s čidlem je velmi jednoduchá a pokud si chcete ušetřit trochu času, můžete použít knihovnu zmíněnou výše.
Zapíšete seriový port
COZIR czr(Serial2);
Nastavíte komunikační mód - Polling - vyčte se hodnota na základě požadavku, Streaming - hodnoty se automaticky posílají 2x za sekundu [výchozí nastavení].
czr.SetOperatingMode(CZR_POLLING);
a nakonec vyčtete data
int c = czr.CO2();
Tato data posílám na server tmep.cz (popřípadě eu), který nabízí ukládání dat z měření a jejich interpretaci v grafech s možností exportu.
Nastavení tmep.cz je uvedeno na obrázku níže
Vzorový kód pro čidlo CozIR a TMEP.cz(eu) najdete tady.
Je třeba vyplnit přesně 4 údaje:
/* Wi-Fi settings */
const char* ssid = "XXXX";
const char* password = "XXXX";
/* TMEP.eu(cz) hostname */
const char* host = "XXXX.tmep.cz";
a pak na řádku 80 - GUID
url += "?CO2=";
No, a to je vlastně všechno, pak dostanete tyto krásné grafy (a tmep.cz je dostupná i jako mobilní aplikace - MonkeyTech).
A jaká je spotřeba?
Během aktivního režimu (data se odesílají na tmep.cz, čidlo měří)
MAX: 145mA
AVERAGE: 63mA
V režimu spánku jsou to pak tyto hodnoty
AVERAGE: 900uA
MIN: 65uA
MAX: 5960uA
AVERAGE bez CozIR-LP: 4.99uA
Aktualizace:
Čidlo CO2 se umí kalibrovat na čerstvém vzduchu - což jednodušše znamená, že čidlo dáte ven a zde se předpokládá hodnota CO2 400ppm.
Tato hodnota se pak určí jako referenční. Pokud byste někdy naměřili v "běžných podmínkách" méně než 400ppm, je to hloupost a je třeba čidlo překalibrovat.
Mnou napsaný kód (najdete zde) pro ESP32 MiniKit LP obsahuje možnost autokalibrace právě na čerstvém vzduchu.
Po připojení napájení se rozsvítí LED na 0.5s, po rozsvícení LED musíte rychle zmáčknout tlačítko IO0. Po zhasnutí můžete tlačítko uvolnit.
Po zhasnutí LED se provede kalibrace a změří se 10 hodnot.
Ze vzorků 7-9 se vypočítá průměr a porovná s desátným měřením. Pokud je odchylka od průměru +- 10ppm, čidlo se považuje za zkalibrované a uživateli to oznámí buď v sériovém portu (9600Bd) a také dalším bliknutím diody.
Krátké zapnutí LED (200ms) - odchylka je větší než 10ppm, proveďte kalibraci znovu
Dlouhé zapnutí LED (1000ms) - zkalibrováno