Postavte si teploměr a vlhkoměr, který vyjde na pár korun, zobrazuje jak aktuální tak historické informace a posílá upozornění v případě překročení stanovené maximální teploty.

Když mi v naší klimatizované serverovně odešel do křemíkového nebe síťový teploměr, který teplotu hlídal, napadlo mě zkusit si postavit něco vlastního. Nejen ve školách s technickou výukou je stále více populární platforma Arduino a tento projekt mohou poměrně snadno zrealizovat například i žáci v rámci výuky. Jak základní desky s mikrokontrolery ATMega, tak rozšiřující desky (shieldy) stojí doslova pár korun a mají možnost připojení nejrůznějších čidel, senzorů, motorů, displejů a dalších elektronických zařízení. I moje volba nakonec padla na Arduino. Všechny elektronické součástky lze snadno sehnat například v plzeňské prodejně GM electronic, nebo nakoupit na internetu v nejrůznějších českých i zahraničních eshopech.

Základní deska a elektronické příslušenství

ethernet shieldZvolil jsem základní desku Arduino UNO, která je sice poměrně velká, ale dobře se na ní prototypuje a jelikož je tohle můj první projekt, budu se držet co možná nejvíce standardů a návodů, dostupných na internetu. K desce potřebuji připojit teplotní senzor. Jedná se opravdu o několika korunovou položku, takže vybírám senzor DHT 22 (AM2302), který umí nejen teplotu, ale také vlhkost. Informace o teplotě a vlhkosti budu chtít zobrazovat jak v reálném čase, tak ukládat historii hodnot a k tomu potřebuji Arduino připojit do počítačové sítě. Možnost je buďto bezdrátově pomocí WiFi, nebo připojit desku do sítě drátově přes konektor RJ-45. V serverovně není problém připojit Arduino přímo síťovým kabelem do switche, takže kupuji rozšiřující desku Ethernet shield s chipem W5100. Zbývá vše jen zapojit, což je poměrně jednoduché. Desky spojím dohromady, teploměr připojím na napájení 5V a data pin do libovolného digitálního vstupu na Arduinu.

senzor pripojeni

Webový server pro zobrazování dat

Jelikož projekt má být poměrně rychlý a moje znalosti programování nejsou na příliš vysoké úrovni, hledal jsem nějaké hotové řešení, které mi bude vyhovovat, nebo ho případně jednoduše upravím pro svoje potřeby. Webový server není problém, ve vnitřní síti ho mám. Běží na něm i databázový server, kam mohu ukládat naměřené hodnoty. Našel jsem tedy webovou aplikaci, která je pro Arduino perfektní - TMEP od Michala Ševčíka. Psaná je v PHP, takže kódu poměrně rozumím a mohu si ho případně upravit, používá klasickou MySQL databázi a dokonce umí vykreslovat i pěkné grafy. Odkaz na TMEP aplikaci na Githubu je zde: https://github.com/MultiTricker/TMEP. Nyní stačí jen vytvořit pro aplikaci databázi, importovat do ní potřebné tabulky. Adresářovou strukturu aplikace pak nakopírovat na webový server a upravit konfigurační soubor. Zde je ukázka webové aplikace:

teplomer bg

Mám tedy potřebný hardware, software pro zobrazování dat běží na webovém serveru. Teď jen zapojit a naprogramovat Arduino a několik drobností.

Programování Arduina

Kód pro Arduino není vůbec složitý a vychází z programovacího jazyka C. Přebírám program z webu tmep.cz, který posílá hodnoty z Arduina do webové aplikace a z části ho modifikuji pro svoje potřeby, abych mohl nastavit maximální prahovou teplotu a při jejím překročení chci dostávat email s upozorněním. To je také hlavní důvod teploměru v serverovně. Klimatizace v ní udržují stálou teplotu, ale pokud klimatizace přestane fungovat, teplota bude růst velmi rychle nahoru, což může vést k restartům serverů a jiných zařízení, případně i k jejich poškození.
Jako nejjednodušší se jeví zasílání HTTP requestu na webovou platformu IFTTT, kde se dá velmi jednoduše vytvořit vlastní aplikace, která pomocí tzv. Webhooku obdrží HTTP request a následně pošle informační email. Využívám návod na oficiálním webu Arduina a kód opět lehce upravuji pro svoje potřeby. Zde je tedy můj kompletní program pro Arduino s popisem jednotlivých částí kódu a komentáři uvnitř programu. Celý program je ke stažení na konci článku.

První část obsahuje připojení knihoven pro obsluhu Ethernet shieldu a senzoru DHT. Nastavení statické IP adresy a dalších proměnných pro zbytek programu.

tmep ino 01

Setup část nastaví sériový port, zavede IP adresu pro zařízení a spouští samotný senzor. IP adresu ještě vypíše pro kontrolu do konzole.

tmep ino 02

Následuje smyčka (loop), která ověřuje podmínky a při jejich splnění spouští funkce. První podmínka se spouští v nastaveném časovém intervalu od posledního odeslání hodnot ze senzoru na webový server. Druhá pak ověřuje, zda teplota nepřesáhla povolený limit a pokud ano, opět spouští v časovém intervalu odesílání emailů přes IFTTT službu.

tmep ino 03

Funkce poslattmep čte hodnoty ze senzoru, vypíše je do konzole a následně je odešle přes HTTP request na webový server TMEP. Na konci také přenastaví proměnnou, ze které se počítá čas pro spouštění této funkce.

tmep ino 04

Poslední část kódu je funkce ifttteventactivate, která po jejím spuštění přečte teplotu, do konzole vypíše informaci o překročení limitu a aktuální teplotu a poté odešle, opět přes HTTP request, data na IFTTT server. Následuje obligátní aktualizace času spouštění této funkce.

tmep ino 05

Zasílání emailového upozornění

Zbývá už jen zasílání emailového upozornění při překročení limitní teploty, což se většinou rovná nefunkční klimatizaci. Zřídil jsem tedy účet u služby IFTTT.com. IFTTT je ve zkratce platforma, která vznikla především s příchodem IoT elektroniky a poskytuje možnost vytváření webových automatizovaných aplikací a jejich propojení se síťovými zařízeními pomocí internetu.ifttt applet
Služba je zcela zdarma s omezením na 3 applety (aplikace). Vytvořil jsem Applet, který má připojený tzv. Webhook. Ten dokáže přijmout přes konkrétní adresu HTTP request a na základě tohoto requestu spustí v rámci appletu další úkon, což je odeslání emailu, uvedeného u mého IFTTT účtu. V těle emailu se dá nastavit text, případně několik dalších možností, takže http request obsahuje i aktuální teplotu, kterou také posílám v těle emailové zprávy. Zde je ukázka emailu s upozorněním:

ifttt email

Krabička a instalace

Vše je skoro hotové. Teploměr funguje, webserver zobrazuje teplotu i vlhkost a zapisuje hodnoty do databáze. Odesílání upozornění je také otestované. Už zbývá vše jen zkultivovat a nainstalovat teploměr do serverovny. Krabička nemusí být nijak krásná, takže jsem našel rozměrově vhodnou plastovou krabičku, do ní udělal otvory pro konektory a usadil do ní elektroniku. Nakonec jsem vše odnesl do serverovny a zapojil. Čidlo jsem umístil dovnitř racku na přední stranu. Z této strany je vzduch vždy nasáván. V zadní části racku by teploměr mohl hlásit překročení teplotního limitu, jelikož zařízení vyfukují horký vzduch zezadu.

Tento článek není doslovný návod, ale má být brán spíše jako inspirace, co lze s trochou času, peněz a nápaditosti vyrobit. Na celém projektu jsem strávil do 10 hodin času a s budgetem jsem se vešel do 500 Kč.