pondělí 30. května 2016

Arduino: bezdrátový RGB LED a Univerzální síťový modul

Dnes bych chtěl zdokumentovat dvě zařízení, nebo spíš Arduino moduly, které jsem navrhl a vyrobil již před mnoha měsíci, v podstatě hned na začátku mé Arduino kariéry. Používám je ve více hotových  zařízeních, které chci už dlouho popsat (například elektroměr, vodoměr, dětské noční světlo či osvětlení kuchyňské linky). Dnes tedy popíšu ty moduly a příště, při popisu konkrétního zařízení, se sem na hardware jen odkážu.

Smyslem níže popsaných modulů je udělat klíčový krok od prototypu nějakého vynálezu postaveného třeba na Arduinu Uno k finálnímu výrobku vhodnému k trvalé instalaci někde v bytě, domě či dokonce venku. U hotového výrobku obvykle preferujeme co nejmenší rozměry, napájení ze sítě či baterie, kompaktní tvar a pevnou krabičku, nějakou rozumnou svorkovnici - a naopak oželíme třeba USB konektor, který by jen zabíral místo, protože do něj není nic připojeno a už nikdy nebude.

Bezdrátový RGB LED driver

Před delším časem jsem se dověděl o RGB LED páscích - tedy takové "nudli" s plochými diodami, které dokáží svítit libovolnou barvou vzniklou kombinací tří základních barev - červené, zelené a modré. Hned mi učarovaly a chtěl jsem je okamžitě připojit k Arduinu a míchat barvy podle nálady, hudby, okolního osvětlení, teploty, úrovně hluku atd. atp. Ovšem tyto pásky pracují s 12V napájením a odebírají poměrně hodně proudu (podle své délky a výkonu), takže nejdou připojit přímo k Arduino pinům. Tudíž jsem začal pracovat na RGB LED driveru - zařízení, které bude umět řídit tři kanály o velkém výkonu.


Zároveň jsem byl v té době fascinován možnostmi bezdrátové komunikace na 433 MHz, kdy přijímač v ceně pod dvacet korun je schopen přijímat signály vysílané běžně dostupnými komerčními zařízeními typu dálkově spínané zásuvky či třeba domovního zvonku. Rozhodl jsem se ho tedy rovnou zapracovat do RGB LED driveru, abych mohl barvy světel ovládat na dálku jakýmkoliv 433MHz vysílačem.

Finální verze má následující vlastnosti:
  • Arduino Pro Mini v objímce (aby šlo lehce vyměnit, kdyby umřelo)
  • napájení přes standardní jack 5,5/2,1 mm (7 - 15 V)
  • tři výstupní kanály schopné řídit PWM celkový výkon až 60 W
  • bezdrátový přijímač připojený k pinu D2 (kvůli přerušení)
  • tři analogové piny vyvedené na svorkovnici
  • příprava na osazení LDR (fotorezistoru)
  • miniaturní rozměry 48 x 42 x 22 mm
  • kvalitní a pevná standardní krabička "KM 02" z ABS
Ty tři analogové piny vyvedené na vnější svorkovnici byly míněny pro další rozšiřitelnost, aby mohla být LED světla ovládaná i na základě informací z přídavných čidel (např. připojený mikrofon a tlesknutí dlaní). Analogové piny jsou "nejlepší", protože umí fungovat jako vstupně-výstupní, digitální anebo analogové, a jde na nich i vyvolávat externí přerušení procesoru, takže prostě dokáží obsloužit všechny situace.

Schéma zapojení je následující:

Plošný spoj je dělaný přesně na míru krabičky firmou +plosnaky.cz (toto je nějaká nejstarší revize, která ani neladí s nejnovějším schématem, ale pro ilustraci postačí):



Po osazení to vypadá takto:




Naprosto nejtěžší je pro mě vyrobit otvory v krabičce tak, aby přesně seděly na svorkovnici a napájecí zdířku:



Na konci stačí plošný spoj do krabičky jen posadit a zaklapnout víčkem, které kupodivu drží jen třením, není tu žádný šroubek (který by mi uvnitř zavazel):


Tento modul používám aktuálně na třech různých místech v domě (přičemž v jednom případě spíná ventilátor místo LEDek a ve dvou případech nemá bezdrátový přijímač vůbec osazen) a dovoluji si tvrdit, že se mi za ty roky osvědčil. Kdyby někdo měl zájem, mám ještě pár plošných spojů a krabiček, takže bych ho dokázal sestavit (a případně i naprogramovat pro určitou činnost).

Univerzální síťový modul

Toto honosné označení jsem přidělil následující krabičce, na které jsem pracoval déle než rok. V první fázi jsem se snažil integrovat Arduino s ethernetovým rozhraním. Cílem bylo mít zařízení, které bude mít v sobě volně programovatelné Arduino a zvenčí RJ45 síťový konektor, plus svorkovnici s hromadou vstupů a výstupů pro čidla a další rozšíření.


Samozřejmě jsem myslel i na možnost napájení přes PoE, tedy přímo po CAT5 kabelu:


Uvnitř používám komerčně dostupný maličký převodník z Ethernetu na SPI s čipem Wiznet W5100 (tedy stejným, jaký má standardní Arduino Ethernet shield). Celá konstrukce tomu byla podřízena - deska s Arduinem má na sobě konektor 2x5 pinů, do které se "síťová karta" zasunuje:



Když bylo toto Arduino+Ethernet zařízení prakticky hotové a pracovalo mi na několika místech, objevil se WiFi sériový převodník ESP8266 a vzal svět naprostým útokem. Mnozí arduinisté zahodili všechno, co do té doby vytvořili, a vrhli se do světa ESP, kde ale platí trošku jiná pravidla (8x méně analogových vstupů, jen 3,3V úrovně, méně GPIO atd.).

Ne tak já. Místo toho jsem si doslova umanul, že využiju tuto konstrukci a do stávajícího konektoru 2x5 pinů vytvořím modul s ESP8266. Tím se tato krabička stane nejvíc univerzální síťovou platformou, protože umožní plug&play výměnu modulu Ethernetu za modul WiFi a přitom vstupy a výstupy na svorkovnici zůstanou stejné a dobře známé. O mnoho měsíců později jsem měl tohle:


Není na něj vidět, ale na té destičce je z druhé strany ESP8266-07 a na místě RJ45 ethernetového konektoru trčí z krabičky konektor na (nepovinnou) externí anténu. Ostatní vlastnosti zůstávají zachovány, jak je vidno na připojených čidlech světla a teploty, které vyčítá Arduino a přes WiFi pak komunikuje s okolním světem stejně jako přes ethernet.



Pro zajímavost jedna starší verze plošného spoje (taktéž přesně na míru krabičce od +plosnaky.cz )

Nejvyšší čas zmínit parametry tohoto Univerzálního síťového modulu:
  • srdcem je Arduino Pro Mini v objímce (rychlá výměna při smrti)
  • napájení přes standardní jack 5,5/2,1 mm (5 - 15 V)
  • SSR na spínání síťového AC napětí 230 V (až 500 W)
  • PWM výkonový výstup pro LEDové pásky či DC motory
  • 5x GPIO (z toho 3x analog)
  • tlačítko (pro nastavení WiFi atp.)
  • kompaktní rozměry 84 x 60 x 22 mm
  • kvalitní a pevná standardní krabička "KM 22" z ABS
  • příprava na přímé připojení DS18B20
  • SW pro komunikaci přes Ethernet i WiFi

Jak vidíte, tento modul umí spínat přímo síťové spotřebiče, jako jsou světla v bytech, motory v čerpadlech a další. Umí také řídit (v rozsahu 0 - 100 %) stejnosměrně napájenou zátěž (LED osvětlení, DC motory) a navíc má pět pinů pro připojení čidel či dalších výstupů řídicích cokoliv. Díky síťovým rozhraním je ovladatelný na dálku. Ladil jsem na něm celé měsíce svou knihovnu pro ESP8266. Taktéž jsem se na něm naučil používat MQTT.

Mimochodem, ani krabička KM 22 nemá žádný šroubek, který by ji držel pohromadě, ale má čtyři kolíčky, které tak pevně drží v protilehlém kusu, že na žádné fotce není krabička plně domáčklá - ono je pak kumšt ji znovu rozdělat :-) I tady mi trvá velmi dlouho, než v krabičce vytvořím všechny ty prostupy na konektory, zdířky a svorky. Vždycky při tom lituju, že jsem raději neinvestoval do opravy či koupě plně funkční 3D tiskárny.

Aktuálně tento modul pracuje na dvou místech už téměř dva roky (jeden u klienta měří teplotu krbu a odesílá ji na www.teploty.info, druhý mi doma měří spotřebu elektřiny a vody). Nebojím se prohlásit, že i tento modul se mi osvědčil. Kdyby někdo měl zájem, mám (podobně jako výše) ještě pár plošných spojů a krabiček, takže bych ho dokázal sestavit a naprogramovat pro určitou činnost. Zájemci mi mohou napsat na mail petr@pstehlik.cz - další kontakty na mě jsou na webu www.pstehlik.cz.

pondělí 16. května 2016

WiFi webový digitální teploměr a chytrý termostat

Prosím pozor: WiFi Teploměr je dnes mnohem dál, než článek popisuje.
Pro aktuální informace navštivte www.teploty.info, díky!

Na začátku tohoto projektu byl +Kamil Zmeškal a jeho nápad na teploměr, který by umístil tuším někam do dílny, tento by byl přes WiFi připojený do domácí sítě a na požádání by hlásil naměřenou teplotu (čili by se choval jako web server). Kamil tu hodnotu chtěl dokonce v XML formátu, protože si ji zpracovává v nějakém svém programu a zobrazuje na tabletu, který má umístěný na zdi v obývacím pokoji. Takový WiFi teploměr jsem pro něj v šibeničním termínu koncem srpna 2015 postavil z jistého modulu určeného původně k jinému účelu (popíšu příště), předal a Kamil s ním spokojeně měří teplotu dodnes.

Ten nápad na bezdrátový teploměr v lokální síti se mi ale tak zalíbil, že jsem na něm od té doby pracoval dalších devět měsíců a dotáhl ho do podoby, ve které se nestydím ho prezentovat veřejně a zároveň ho tímto nenápadně nabízím i případným dalším zájemcům. Z původního poměrně jednoúčelového zařízení jsem ho významně rozšířil o regulaci (proto je v názvu i slovo termostat), doplnil grafické rozhraní, konfiguraci, více datových formátů a další věci, které popíši dále.


Hlavní rysy mého WiFi digitálního teploměru/termostatu jsou následující:

  • úmyslně acloudové řešení - zaručuje soukromí, bezpečnost a nezávislost
  • možnost měření několika teplot na různých místech (kam dosáhnou čidla)
  • jednoduché zapojení, zprovoznění a přidávání dalších čidel teploty
  • přímočaré webové rozhraní s naměřenými teplotami
  • naměřené hodnoty teplot dostupné též v XML, JSON a plain textu
  • termostat s chytře definovatelnými pravidly
  • výkon termostatu řízen v rozsahu 0 - 100 % díky PWM (pulsně šířkové modulaci)
  • široký rozsah napájecího napětí 5 - 20 V a minimální spotřeba (0 W)
  • miniaturní rozměry (68 x 48 x 26 mm)
  • externí WiFi anténa pro prakticky neomezený dosah
  • rozšiřitelný o další moduly, volně programovatelný
  • přístupný i z Internetu, pokud je o to zájem
Nyní krátce vysvětlím jednotlivé body:

ACloud

"ACloudové" (to slovo jsem pro vás právě teď vymyslel) znamená jednoduchou věc: na rozdíl od všech ostatních podobných WiFi teploměrů, které se vždy připojují někam do cloudu k určitému providerovi a vy potom musíte chodit k tomuto providerovi se dívat, jakou teplotu máte doma, jsem zcela úmyslně vytvořil řešení, které se NIKAM DO CLOUDU NEPŘIPOJUJE. Je to váš teploměr, ve vaší síti, měří vaše teploty, a pracuje naprosto nezávisle. Bude fungovat, i když vám doma náhodou vypadne připojení do Internetu. Bude fungovat, i když občas vypadne server providerovi cloudového řešení. A hlavně - bude fungovat i poté, co provider cloudového řešení jednoho dne zavře krám, anebo se jen rozhodne, že už nebude podporovat stará zařízení a jednoduše je zařízne. Tato nezávislost na Internetu a cizí firmě je tak významná vlastnost, že jsem ji chtěl vyzdvihnout jako první.
Cloudové teploměry či IoT řešení jsou totiž jako e-knihy a multimédia s DRM: jednoho dne někdo vypne DRM server a všechny vaše knihy, písničky a filmy, které jste si koupili, zmizí (to už se dnes děje!). Protože tuhle závislost na někom cizím nesnáším, schválně jsem vytvořil WiFi teploměr tak, aby fungoval samostatně.



Mnoho teplot

Měření teplot na více místech: používám digitální čidla DS18B20, kterých může být zapojeno i několik na jedné jednoduché sběrnici (kablíku).  Takže i když je v mém WiFi teploměru jen jedna vstupní zdířka (stereo jack 3,5 mm), tak jde například s pomocí obyčejných sluchátkových rozdvojek postupně zapojit více teplotních čidel a natáhnout si tak kolem domu, sklepa, chaty či bazénu celou síť měřených bodů, kterou ovládá jen jeden WiFi teploměr.



Vše je jednoduché

Jednoduché zapojení: krabička WiFi teploměru má jen dvě zdířky a jedno nenápadné tlačítko. Do jedné zdířky zapojíte napájecí konektor (5,5 / 2,1 mm s plusem uprostřed), do druhé zdířky zapojíte teplotní čidlo, stiskem tlačítka zahájíte proces připojování do vaší domácí WiFi sítě a za minutu už vidíte naměřené teploty, nejčastěji na adrese http://teplomer/ Tuto adresu můžete samozřejmě otevřít webovým prohlížečem ze svého počítače, taktéž ze všech tabletů, z mobilních telefonů, ze Smart TV (televizí s internetem), pokročilých herních konzolí atd. a to bez ohledu na jejich operační systém.



A když vás omrzí moje minimalistické grafické rozhraní, můžete si vytvořit vlastní webovou stránku nebo třeba mobilní aplikaci, do které naměřené teploty vložíte (tu mířím na webaře a programátory mezi čtenáři - je to skutečně velmi jednoduché).

Několik formátů

Naměřené hodnoty jsou po vzoru Kamila dostupné pro strojové zpracování v XML formátu, ale přidal jsem i jednodušeji zpracovatelný formát JSON a dokonce pro potřeby například Arduina nebo obecně zpracování bez nutnosti parsovat formát dat je výstup teplot dostupný i v čistém textu, zcela bez formátování. Díky tomu si můžete nad tímto WiFi teploměrem postavit podobné řešení jako má Kamil s tabletem, ale také můžete teploty zachytávat a ukládat na domácím serveru do databáze, zobrazovat z nich grafy a podobně. Na toto mám ostatně hotové řešení, které popíši za malou chvíli.

Programovatelný termostat

Na rozdíl od původního prototypu teploměru jsem před nedávnem přidal do projektu i výkonový výstup, který je schopen spínat proud až 3 ampéry a řídit ho plynule v rozsahu 0 - 100 % podle naměřených teplot. Díky tomu je možno například zatopit rybičkám v akváriu, vyvětrat rostlinkám ve skleníku, ochladit víno ve sklepě nebo třeba jen zesílit ventilátor, který ovívá vás, jak sedíte zpocení u počítače. Pokud potřebujete řídit větší výkony, anebo spínat síťové či jiné vysoké napětí, je možné k výstupu termostatu připojit relé, které potom teprve spíná to zabijácké napětí či výkon.



Můžete definovat více různých pravidel, která řídí výstup podle naměřených teplot, jak vidno na výše přiložené snímku obrazovky prohlížeče. Například spínač na 50 % znamená, že je sepnutý poloviční výkon, takže pokud tam máte připojený třeba ventilátor, tak se točí poloviční rychlostí. Pokud topení, tak topí polovičním výkonem, a pokud světlo, tak svítí poloviční intenzitou. Jistě vás už napadá, jak to v praxi využít.

Napájení

Modul WiFi teploměru je napájený běžně dostupným zdrojem stejnosměrného napětí, přičemž pracuje velmi efektivně v širokém rozmezí od 5 V do 20 V. Při nejběžněji dostupném napájecím napětí 12 V a dobrém WiFi signálu má naprosto minimální odběr proudu kolísající mezi 15 a 22 mA. Horší podmínky pro příjem WiFi mírně zvyšují spotřebu energie (protože vysílač musí zvýšit výstupní výkon). Mimochodem, komerční wattmetr do zásuvky naměří spotřebu WiFi teploměru přesně 0 W (vím, že teploměr má nenulovou spotřebu, ale je skutečně tak nízká, že je neměřitelná).

Dá se jednoduše spočítat, že například na běžnou 44Ah autobaterii by můj WiFi teploměr vydržel fungovat nejméně tři měsíce, kdyby bylo potřeba ho zprovoznit v místě, kde není přivedeno stálé elektrické napětí. Stejně tak by ochotně fungoval na solární pohon (solární panel dobíjející nějakou baterii). Ale spíš jsem počítal s tím, že prostě bude někde poblíž elektrická zásuvka.


Externí anténa

Jedním z důležitých rysů mého WiFi teploměru je taktéž konektor na externí WiFi anténu. Normálně používám malý prut s 2dB ziskem, ale dala by se připojit i větší anténa pro mnohem větší dosah. V Česku je ostatně běžné používat WiFi i na kilometrové vzdálenosti, takže meze se tu nekladou. Jiné WiFi teploměry na externí anténu zapomínají, a to si myslím, že je velká chyba, kterou jsem proto ve svém teploměru neudělal.



Rozšiřitelnost

Poslední bod je důležitý pro bastlíře, programátory a vůbec zvědavé lidi: dal jsem si záležet na tom, abych vám všem maximálně zjednodušil a umožnil další rozšiřování tohoto modulu jak po HW, tak i po SW stránce. Na základní desce jsem vyvedl veškeré piny procesoru ESP8266 na pohodlnou sběrnici a pečlivě ji popsal. Tím pádem k teploměru můžete připojit celou škálu dalších čidel či rozšíření (např. atmosférická vlhkost s DHT11/22 či tlak s BMP180). Dokonce jsem připojil i TFT displej!


Stejně dobře můžete rozšiřovat teploměr po SW stránce. Celý projekt je naprogramován v Lue, což je prověřený skriptovací jazyk. Na desku jsem vyvedl i programovací konektor kompatibilní s FTDI. Připojit WiFi teploměr k počítači a přeprogramovat ho je tak velmi rychlé.

Přístup z Internetu

Tak, tolik k měření teplot a regulaci v domácí síti. A co když zrovna nebudete doma a přesto vás bude zajímat, jaké jsou aktuální naměřené teploty? Pokud máte pevnou veřejnou IP adresu, můžete si na domácím routeru otevřít port 80 (či jiný) a nasměrovat ho (přes překlad adres) na WiFi teploměr. Pak se můžete zvenčí připojit domů a mrknout se na měřené teploty. Pro vyšší bezpečnost můžete místo NATu použít VPN. Ale co když takové možnosti nemáte? Samozřejmě vím, že sledovat měřené teploty je návykové, a proto plánuji v brzké době přidat jsem přidal do WiFi teploměru doplňkovou možnost přenosu naměřených hodnot na server www.teploty.info, kde by tak byly přístupné i z Internetu (po přihlášení jménem a heslem) a to včetně historie zobrazené v pěkných grafech a s možností varování e-mailem po překročení nastavené teplotní hranice u kteréhokoliv čidla.


Prosím o pochopení rozdílu mezi ostatními podobnými zařízeními, které k provozu cloud vyžadují, a tímto mým serverem teploty.info, které sice možnosti WiFi teploměru dále rozšiřuje, ale vůbec není nutný k běžnému provozu teploměru. ACloudový charakter tak zůstává zachován. Pokud by někomu nevoněl můj server a chtěl by si teplotní data nechat posílat na jiný populární server, je to možné po jednoduché změně ve zdrojových kódech.

EDIT 29.5.2016: WiFi Teploměr již volitelně odesílá data na www.Teploty.info

Chcete ho?

Pokud máte pocit, že tohle vytuněné zařízení musíme mít doma, napište mi mail na petr@pstehlik.cz. Cena řešení se odvíjí od stupně výbavy (s termostatem/bez, počet teplotních čidel, zdroj plus případné další příslušenství) - v základní verzi začíná na 1500 Kč. Další informace naleznete na www.teploty.info.

EDIT 10.10.2016: WiFi Teploměr nově i v AC verzi, která je levnější a má spínané relé.

EDIT 1.1.2017: Novinky u WiFi Teploměru v roce 2017.