Základní podmínkou dobré fyzické i psychické pohody a kvalitního spánku v interiéru je množství oxidu uhličitého obsaženého ve vzduchu. Jeho hladina ale s dobou pobytu lidí v místnosti značně roste.
Max von Pettenkofer zjistil, že jeho hlavním zdrojem v obytných prostorách je člověk. Ve vydechovaném vzduchu je totiž obsaženo 100x více CO2 než ve vzduchu vdechovaném. Růst koncentrace tohoto plynu se pak na člověku projevuje negativně.
Pro měření CO2 se často používají senzory NDIR nebo PAS. Jsou ale relativně drahé. Zjišťovat koncentraci kysličníku uhličitého je možné také nepřímou metodou. Ve vydechovaném vzduchu jsou mimo CO2 také další metabolity, které je možné detekovat pomocí senzorů VOC. A tak je reálné změřit, jak moc je vzduch „vydýchán“.
Na tomto principu pracuje i senzor ENS160. Podle grafů uvedených v dokumentaci výrobce je korelace s přímým měřením CO2 výborná. Jen je třeba si uvědomit, že toto měření lze aplikovat výhradně na obytné prostory, kde je zdrojem CO2 člověk. Tímto nepřímým měřením získaná hodnota se označuje jako ekvivalentní, tedy eCO2 a je často používána při hodnocení kvality vzduchu.
ENS160 využívá čtyři vyhřívané MOX elementy. Jeho základní funkcí je měřit koncentraci VOC, tedy koncentraci těkavých organických látek. (výrazem TVOC se obvykle rozumí celková suma VOC). V interiéru dovede na základě tohoto měření také určit hladinu eCO2.
Jedná se o inteligentní senzor, který má vlastní procesor. Je možné měnit jeho firmware nebo uživatelsky po krocích modifikovat jeho vlastnosti. Ale i základní funkce jsou zajímavé. Získal jsem modul, který obsahuje i senzor AHT21 a to umožňuje zpřesnit měření ENS160 tím, že mu dodáme údaje o teplotě a vlhkosti.
Čidlo při prvním zapnutí provádí 1 hodinu „kalibraci“ (Initial Start-Up). Pokud je v následujících 24 hodinách vypnuto, pak při zapnutí začne celou hodinovou proceduru znovu od začátku.
Výrobce také uvádí, že opravdu stabilní výsledky jsou k dispozici za 48 hodin provozu. Senzor se při běžném provozu ohřívá 3 minuty od zapnutí.
ENS160 je silně teplotně namáhán, mohlo by se stát, že teplotními dilatacemi dojde k uvolnění čipu od základní desky a tím k narušení funkce. V diskuzích si na nefunkčnost senzoru stěžuje řada přispěvatelů. Ověřil jsem si ale, že většina z nich měla modul špatně zapojený.
Napájení modulu musí být vždy připojeno na Vin, protože pin 3V3 modulu je pouze výstup interního stabilizátoru. A na Vin přivedené napětí musí odpovídat napájecímu napětí řídícího MCU. V případě ESP8266 tedy 3,3 V. Je to proto, že převodníky úrovní na modulu jsou upnuty na Vin. Z úbytku napětí na stabilizátoru XC6206 nemusíte mít obavy, je LDO a při malých proudech je úbytek napětí opravdu zanedbatelný. V případě ESP8266 se také při použití 3,3V výrazně zlepší bilance ztrát na obou stabilizátorech modulu a tím se sníží i jeho oteplení.
Pokud bude Vin 5V, tak se tato úroveň objeví i na vnější I2C sběrnici, což může být pro připojená 3V3 zařízení fatální. Při použití více I2C senzorů je třeba si také ohlídat počet PullUp rezistorů na sběrnici, aby nedošlo k jejímu přetížení.
Velice často se objevuje názor, že návrh modulu je naprosto chybný, protože čidlo AHT21 se ohřívá a to znemožňuje správnou kompenzaci ENS160. Někteří autoři to řeší offsetem teploty předávané ENS160. To je pochopitelně špatně. Na jednom blogu jsem narazil na to, že konstruktér provedl offset teploty a poměrně složitým výpočtem určil pro tuto teplotu relativní vlhkost. A tyto údaje pak použil pro kompenzaci. To je lepší, ale dobré to také není.
Překvapivě správné je to nejjednodušší řešení. Neprovádět žádné korekce a předat ENS160 relativní vlhkost a teplotu tak, jak ji z AHT21 získáme. Proč?! Všichni se domnívají, že AHT21 vlivem oteplení měří špatně. Ale AHT21, pokud měří v dovoleném pracovním rozsahu, měří správně. Správně poskytuje teplotu a vlhkost, které panují v jeho blízkosti. Tedy i v blízkosti ENS160. Na druhou stranu, teplota pro senzor ENS160 není vůbec důležitá. Elementy MOX jsou termostatovány na 200 až 400 stupňů, dá se soudit, že odchylka okolní teploty třeba o 10 stupňů nehraje žádnou roli.
Proč je tedy předávána čidlu teplota, když ji vlastně nepotřebuje? ENS160 nezajímá teplota a dokonce ani relativní vlhkost. Ale zajímá ho vlhkost absolutní. Ta jde spočítat pouze pokud máme údaj o relativní vlhkosti a odpovídající teplotě. Velmi zjednodušeně řečeno, absolutní vlhkost je stále stejná, i když se v uvažovaném prostoru teplota mění. Proto nezáleží na tom, jestli se AHT21 trochu ohřeje nebo ne. Kompenzace ENS160 je tedy velmi jednoduchá.
Zařízení se po zapnutí připojí do sítě WiFi. Zkontroluje funkci senzorů a synchronizuje si čas. Měří se v intervalu 1 minuta a neustále se počítá pro danou hodinu aritmetický průměr zjištěných veličin (eCO2, TVOC, teplota, vlhkost). Zároveň jsou tyto hodnoty průběžně zobrazovány v plovoucím grafu – „Rolling Chart“. Na konci hodiny se aritmetický průměr uloží do pole a začne se počítat průměr v další hodině.
Před půlnocí se hodinové průměry z celého dne uloží do souborového systému jako řádek hodnot opatřený datem. V pevné paměti se tedy vytvoří čtyři soubory. Pro veličiny eCO2 , TVOC, teplotu a vlhkost. Tyto soubory se celý rok doplňují. Je možné si je kdykoliv stáhnout do PC či mobilu a udělat si rozbor nebo grafické zobrazení dat. Pohodlně třeba v Excelu. Soubory mají snadno importovatelný a jednoduchý formát *.csv.
Čas, kdy zařízení nebylo v provozu, je bez hodnoty. Na začátku dalšího roku se vytvoří soubory nové a staré zůstanou. Kapacita paměti flash / filesystému odpovídá cca 10 rokům záznamu. Smazat soubory je možné pouze obnovením souborového systému LittleFS do počátečního stavu.
Systém zahrnuje WeMos D1 mini a sensory ENS160 a AHT21. Sensory jsou připojeny přes sběrnici I2C. Tlačítko přepíná z módu STA do AP.
Program má tyto částí:
Nainstalovat vývojové prostředí Arduino není složité. Najdete to popsáno na více místech, stejně jako instalaci desek ESP8266 do IDE. Tu musíte provést také. Potřebujete však ještě plugin pro vytvoření obrazu LittleFS ve volné paměti flash.
Najdete ho na adrese:
https://github.com/earlephilhower/arduino-littlefs-upload/releases/
Stačí ho stáhnout a vložit do adresáře ve vašem počítači „C:\Users\"username"\.arduinoIDE\plugins“. Pokud adresář plugins neexistuje, tak ho prostě vytvoříte. Restartujte Arduino IDE. Pak už jen chybí nainstalovat použité knihovny Adafruit_AHTX0.h a DFRobot_ENS160.h, které jsou součástí nabídky knihoven Arduino IDE.
Před programováním je třeba nastavit v prostředí Arduina některé parametry desky:
Pro vytvoření LittleFS musíte pak nakonec ještě spustit plugin. Stiskněte „Shift + CTRL + P“ a v nově otevřeném menu najděte „Upload LittleFS to Pico/ESP8266/ESP32“. Stačí ho jen spustit, pracuje automaticky a zajistí, aby se soubory z adresáře „data“ dostaly kam patří.
Pokud jste nenastavili defaultní parametry WiFi přímo v programu, pak WeMos po zapnutí jen bliká a signalizuje tím, že není připojen k žádné síti. Pak tedy stiskněte Smart Button. Tím se WeMos přepne do režimu AP. Poznáte to podle trvalého svitu modré LED na modulu. Vy pak třeba na mobilu v dostupných sítích Wifi vyhledáte síť s názvem vašeho sensoru a připojíte se na ni. Pozor na jednu věc. Mobil obvykle začne hlásit, že zvolená Wifi nemá připojení k internetu a snaží se vás odpojit.
Pak napíšete do adresního řádku prohlížeče "ens160.local", nebo "192.168.4.1". Po nastavení WiFi je nezbytné potvrdit nové parametry tlačítkem SUBMIT na webové stránce. To si vyžádá heslo oprávněného uživatele. V tomto rozhraní pak můžete pro zpětný přechod do režimu stanice použít volbu Restart.
Pokud byste chtěli logovat teplotu někde, kde nemáte stabilní WiFi, pak by mělo stačit vytvořit mobilem HotSpot a připojit se loggerem na něj. Po synchronizaci času můžete HotSpot zavřít a logger by měl pracovat autonomně dál. Nesmí ovšem dojít k výpadku napájení.
K zařízení je možné se připojit z počítače, tabletu nebo mobilním telefonem po přihlášení do stejné sítě WiFi. Pak stačí do vyhledávacího řádku prohlížeče napsat „ens160.local“. Na velikosti písmen nezáleží. Toto jméno si můžete změnit před kompilací programu. „ens160" je jméno - label a může mít maximálně 63 znaků.
Ta první začíná dvěma plovoucími grafy, které zobrazují hodinové průměry eCO2 a TVOC za posledních 24 hodin. První údaj v grafu se objeví po minutě provozu. Hodnoty jednotlivých sloupců grafu zobrazíte najetím myši nebo na mobilu poklepem prstu. Barevné škály jsou v souladu s tabulkami 5. a 6. v dokumentaci ENS160 ScioSense.
Pokud není při startu zařízení nalezeno některé čidlo nebo není synchronizován čas, pak se neaktualizují soubory s daty ve flash paměti.
Další položky jsou okamžité hodnoty eCO2, TVOC a AQI,. které jsou čteny ze senzoru každou minutu. AQI se určuje pouze z TVOC, překročení mezí eCO2 na něj nemá vliv.
Následuje časový údaj. Pokud nedojde k synchronizaci času, tak se o ni sytém pokouší opakovaně každých 5 minut, dokud se mu to nepodaří. Po tuto dobu je časový údaj červený .
Udávaný čas je UTC +1 bez respektování letního času. Časový údaj ukazuje nejen hodiny a minuty, ale také dny od zapnutí zařízení. To je to DD na začátku časového údaje.
Druhá webová stránka začíná opět plovoucími grafy a dostanete se na ni tlačítkem NEXT. Tyto grafy vyjadřují hodinové průměry teploty a vlhkosti. Jsou v nich korigované hodnoty, získané aproximační funkcí. Ta vychází z dat mého srovnávacího měření. I tady platí, že konkrétní hodnoty získáte najetím myší na sloupec grafu. Kladné teploty jsou zobrazovány červeně, záporné teploty modře.
Dalšími položkami jsou:
jméno a heslo pro WiFi - Pokud cokoliv na této stránce upravujete, musíte to potvrdit stiskem tlačítka SUBMIT. Jinak změny nebudou provedeny. Když toto tlačítko poprvé stisknete, tak budete vyzváni k zadání uživatelského jména a hesla. To je heslo v záhlaví programu! Použité heslo uživatele platí až do uzavření prohlížeče, který si přístupové údaje uchovává pro danou session.
Signal vyjadřuje úroveň signálu WiFi
Update slouží k přechodu na stránku pro aktualizaci firmware – OTA přes WiFi.
Default nastaví výchozí, při programování nastavené parametry WiFi.
Restart je poslední volitelná položka
Nápisy Sensor a File system nemají nic společného se zaškrtávacími checkboxy, vedle kterých jsou umístěny. Nápis Sensor zčervená, pokud se při startu nepodaří inicializace některého ze senzorů. Nápis File System je příznak zápisu do LittleFS. Pokud zčervená, tak se zápis nezdařil, třeba pro zaplnění dostupného prostoru daty.
Pro orientaci a odstraňování případných potíží slouží specifická info stránka. Dostanete se na ni, když napíšete do příkazového řádku prohlížeče „ens160.local/info“. Zjistíte tak třeba status ENS160 nebo kolik místa ještě zbývá v souborovém systému.
Souborový systém je LittleFS. Jsou v něm uloženy nejen naměřená data, ale i některé soubory, nezbytné pro design a chod webových stránek/tabulek. Pokud nahrajete samotný program bez upgrade LittleFS, tak nebude fungovat záznam dat a webové stránky budou na hranici čitelnosti.
Soubory s daty se vždy jmenují ecooletopočet.csv, tvocletopočet.csv, templetopočet.csv a humiletopočet.csv. Pro rok 2025 je to tedy:
ecoo2025.csv
tvoc2025.csv
temp2025.csv
humi2025.csv
Vše psáno malými písmeny. Když chcete soubor stáhnout, napíšete prostě do příkazového řádku prohlížeče
ens160.local/ecoo2025.csv.
Vždy první provozní den v novém roce se automaticky vytvoří soubory s aktuálním letopočtem a pracuje se s nimi po zbytek roku.
Program je stabilní, rychlý a grafy jsou přehledné. Aproximace teploty a vlhkosti je v rozsahu očekávaných teplot výborná. Vliv na to má ovšem i zvolené mechanické uspořádání. Responzivita je velmi dobrá a implementovaný Tooltip dovoluje pohodlné a přesné odečítání hodnot sloupců grafů. Senzor ENS160 příjemně překvapil a nesetkal jsem se u něj s problémy. Poskytované hodnoty se jeví vcelku reálně. Filozofie ukládání dat spolu s použitím LittleFS zamezuje nadměrnému opotřebení paměti flash a zdá se velice efektivní.