ARDUINO
Automatické osvětlení dvora "Dobby" Pavel
13:38:54
6.12.2017
"Dobby" je projekt který řeší osvětlení našeho dvora pokud možno automaticky, dálkově, pohodlně, chytře. 

Tedy tak že "Dobby" ví jakou mám směnu (a ví to pro všechny členy mojí DomaWEB rodiny), ví kdy pojedu do práce nebo domů a včas mi rozsvítí na dvoře abych se třeba "navymáznul" (jarní tání sněhu a podzimní deště mi tady působí značně bahnitý terén). "Dobby" funguje i na dálku, přes internet, odkudkoliv na světě si můžu posvítit na dvůr (třeba při dovolené na "Kanárech" si můžu doma jen tak poblikávat, ať si drbny drbou hlavu proč se to děje když "prej je na Kanárech"). A samozřejmě to chytré zařízení umí pracovat i v režimu inkrementálního časového spínače (po stisku tlačítka prodlužuje dobu svícení po pěti minutách). 

"Dobby" je postavený na desce Wemos D1 mini (takže komunikační modul ESP8266 s možností programovat to stejně jako Arduino). O čas se stará DS3231. Pro informování o všem důležitém je tu displej OLED s řadičem SSD1306 a nesmí chybět relé. Obyčejné mechanické relé, ať je slyšet že to něco dělá. Pro sledování hladiny okolního osvětlení jsem použil infrafototranzistor z RPR220 (prostě byl doma). Pro další rozvoj Dobbyho je byl nutný modul mini zesilovače.

Modul času s Wemosem komunikuje přes sběrnici I2C a stejně tak i displej. Relé mám napojené na pin D0 a spíná v logické 0. Tlačítko mám na pinu D3 a je ošetřeno přerušením tak aby Wemos vždy reagoval. Tlačítkem jde nastavit i delší čas svícení. To přerušení vypínám po stisku tlačítka na 500ms, tím řeším zákmity a "příliš divoké" uživatele. Tlačítko jsem použil v antivandal provedení, ne proto že bych měl doma vandaly, ale protože už jsem ho měl, má jistý stisk, a na krabičce dobře vypadá. Optočidlo je na jediném analogovém pinu A0.  Na pinech D1 D2 je sběrnice I2C, D4 je vyhrazen pro zvonkové tlačítko (samozřejmě s přerušením), D6 pro sběrnici OneWire pro čidla Dallas DS18B20 (viz projekt Teploměr). Melodie zvonku se přehrává přes pin RX (takže si to krásně brumlá když nahrávám sketch přes USB, podobně jako moje stařičké Atari800XE při nahrávání programu z kazety). Zbývající 3 použitelné piny dříve či později obsadím LEDkou pro signalizaci u zvonového tlačítka a snad dojde i na optozávoru ve schránce pro detekci došlé pošty. Celé to zařízení je zabalené do malé ale vysoké krabičky pro montáž na zeď. 

Zapnout světla na dvoře je možné hned několika způsoby. Tlačítkem na pět minut (každý další stisk tlačítka prodlouží dobu svícení o dalších pět minut), přes webové rozhraní s možností výběru doby a několika způsoby zhasnutí. A nejzajímavější a taky nejvíc očekávaný způsob je automat. "Dobby" si načte z DomaWEBu naše směny na několik týdnů dopředu a pak jen zapíná vypíná osvětlení. A protože nic nejde jednoduše, tak občas si musím v kalendáři zapsat dovolenou, státní svátek, pracovní neschopnost, přesčas a "Dobby" na to všechno okamžitě reaguje a stahuje si nový seznam časů kdy má svítit. "Dobby" je vlastně jen internetově ovládané relé s modulem reálného času. Značná část jeho "chytrosti" je tady na serveru. Největší potíže mi asi působil přenos informací a jejich uložení, původní návrh počítal s použitím paměti AT24C32 s kapacitou 4kB která je na modulu času. V dalším návrhu jsem chtěl použít souborový systém Wemosu s kapacitou 1-3MB. Ani jedno jsem prozatím nevyužil protože mi přišlo škoda zničit EEPROM paměti při pokusech. Přenos informací mám řešený stylem dotaz-odpověď, Wemos se serveru zeptá stylem http://www.domaweb.cz/dotaz.php?svitit=1 a server odpoví [svitit] 123456789 60 [cas] 123456790 ([odpověď] časová_značka (doba)). Dotazy se posílají každých pět sekund aby měl server dost času odpovědět.

Tenhle projekt prověřil moje znalosti Wiring(jazyk ArduinoIDE), C a C++ (v knihovnách, bez studia knihoven to nejde pochopit), PHP, HTML, CSS, JavaScript a vyzkoušel jsem i AJAX (asynchronní přenos dat do stránky bez nového načítání), MySQL (databáze) a "inglišlendžič" protože česky toho k tomuhle tématu moc není, a do hloubky opravdu málo. No a protože připojení k rozvodu el.energie nesmí být prováděno osobou bez řádného splnění všech zákonných podmínek tak je ze mně teď asi kriminálník, ale je pravda že jsem postupoval v souladu s bezpečnostními předpisy a zapojení je provedeno pečlivě bez možnosti náhodného dotyku. Humor. Doma je to samozřejmě můj problém a taky moje zodpovědnost, ale nedoporučuji si zahrávat a opravdu je lepší to svěřit odborníkům (já si to nechám aspoň zkontrolovat, poslušně hlásím že jsem si to opravdu nechal zkontrolovat a v silové části nebyl nalezen problém, kolem Wemosu byl ale "bordel", postupně to napravuji).


Pár fotek s vysvětlením

Tohle je základní zobrazení. Na displeji je nejdůležitější aktuální čas, vpravo nahoře problikává zavináč podle toho jak modul komunikuje se serverem, pokud je v následujících 48 hodinách aktivní nějaký čas pro automatické rozsvícení tak se dole zobrazuje za jak dlouho zapne a poslední řádek je teplota uvnitř krabičky, mimochodem i ta se odesílá na DomaWEB.cz a prezentuji si jí s ostatními teploměry.


A tohle je displej po stisku toho "krásnýho antivandala". Nejdůležitější je doba jak dlouho ještě budeme svítit, pak je aktuální čas, tři ikonky pro rozlišení toho co "Dobbyho" zapnulo pro případ že já si zase na dálku blikám. Doba rozsvícení se vždy zobrazuje ta nejdelší. Z domaWEBu je možné vynulovat čas tlačítka anebo čas z webu, automat vypnout nejde (prozatím to tak nechám, praxe ukáže).

Sketch dávat nebudu, je to dlouhé a hlavně je to jen malá část toho co tenhle projekt potřebuje, zbytek jsou scripty a databáze na serveru. Případné konkrétní dotazy rád zodpovím na e-mailu z patičky DomaWEBu, případně osobně :) Kopírování  nápadu je možné, ne však za úplatu nebo protislužbu. Budu rád když se případný "plagiátor" ozve, potěší mě že nejsem sám kdo má doma Dobbyho.

A pro šťouraly, ta zeď není nahozená schválně, jednak už dlouho jsem věděl že plechové dveře byly špatná volba (plecháče made in Poland, teď jsou tam plasťáky a fakt je to lepší) a jednak to čekalo na "Dobbyho", teď už tu zeď můžu doladit a kosmeticky upravit, až bude teplo (ne zdi, mě :) ).




EDIT: duben 2018


Vyladil jsem časování procesů tak aby to hezky vypadalo na displeji a hlavně aby to nezahlcovalo server. Dobby se každou celou pátou sekundu dotazuje serveru na novinky a přitom odesílá užitečná data. Nově odesílá i to kdy svítí a jaká je hladina světla. 


Dobby je nově schopen zastat funkci Teploměru, stačí napojit čidla na sběrnici OneWire  


Postupně vychytávám další funkci: Zvonek, běžný melodický domovní zvonek který navíc pošle E-mail když někdo zazvoní. Tahle zdánlivá banalita je s mikroprocesorem poměrně slušná "vyšší dívčí". Zvonek musí umět odolávat "záškodníkovo sirce", "poplašňákovi", "bojim stydim zvoním potichu", a musí umět reagovat tak aby i "zvonitel" pochopil že se uvnitř něco děje (tedy trojité časování pro jedno tlačítko, další časování bude pro signalizaci).


Úprava zdi se prozatím odkládá, Dobby musí dostat jinou krabičku, takhle je to všechno moc blízko u sebe a skoro se to tam nevejde. Přidal jsem modul mini zesilovače pro zvonek. Taky jsem kompletně předělal vnitřní propojení tak aby to nebylo tak náchylné na rušení (nejvíc na to trpěl zvonek, momentálně mimo provoz). Takže všechny moduly jsou propojené krouceným kabelem a dokonce se v tom dá i vyznat :)
Zpět