čtvrtek 8. února 2024

Odpojovač akumulátoru

Meteostanice na chalupě funguje. Většinou. Vyrobil jsem novou revizi desky, o ní někdy příště. Mimo jiné podporuje spínání několika výstupů na základě dálkově nastavitelných parametrů, jako je napětí akumulátoru, teploty rosného bodu apod.

Nedávno jsem ale musel vyrazit na fyzickou opravu. Stejně jako při experimentech se zřejmě ve výjimečných případech kousne MCU, když GSM modul začne vysílat. Nejspíš kombinace špatného přizpůsobení antény a zvýšení výkonu při určitých podmínkách šíření. Watchdog samozřejmě používám, ale nezareagoval. Takže výsledkem byl VRLA olověný akumulátor vybitý na necelé 3V.

Řešení? Odpojovač akumulátoru při poklesu napětí. Čínských modulů je k dispozici několik, doslova za pár korun. Jejich nevýhodou je ovšem značná vlastní spotřeba - používají běžné 12V relé a obvykle také operační zesilovač se značným odběrem. Takže jsem se rozhodl pro návrh vlastního řešení.

Odpojovač je postaven na obvodu MCP121. Tento obvod je původně určený jako napěťový supervizor a resetovací obvod pro mikrokontroléry. Vzhledem k extrémně nízkému vlastnímu odběru (pod 2uA) lze však s výhodou použít i pro navrhovanou aplikaci. Zvolená varianta MCP121T-300E/TT generuje aktivní reset (log. 0) při napětí pod cca 3V, má minimální hysterezi a výstup s otevřeným kolektorem. Pro posunutí rozhodovací úrovně k napětí vhodnému pro olověné akumulátory je obvod napájený z děliče R3/R4, čímž je vypínací napětí nastaveno na cca 9,5V. Pull-up pro gate tranzistoru Q2 zároveň zvyšuje hysterezi a posouvá zapínací napětí na cca 11,0V.

Tranzistor Q2 spíná výkonový P-MOSFET tranzistor Q1, který připojuje zátěž. Dioda LED1 indikuje aktivní výstup, s výhodou je použita modrá LED, která již při proudu řádově 100uA spolehlivě svítí. Celková spotřeba zařízení se pohybuje kolem 40uA při odpojeném akumulátoru a do 200uA při připojeném vč. proudu pro LED indikaci.

Při experimentech se mi podařilo "nakopnout" tranzistor Q1. Fungoval, spínal, ale při napětí na gate (Vgs) nad cca 11V začal prudce stoupat proud. Podle datasheetu by přitom tranzistor měl bezpečně zvládnout 20V. Na druhém kusu vše v pořádku, udělal jsem tedy destruktivní test - napětí jsem zvyšoval až k cca 16V, kdy tranzistor odešel do křemíkového nebe a zůstal sepnutý navždy. Po výměně za nový vše OK.

Vodotěsnost jsem vzhledem k přítomnosti modré LED a nedostatku průhledných smršťovaček vyřešil zalitím pomocí chrchlometu (lepící pistole) s průhlednými náboji. Na stole se vše chová perfektně - tak uvidíme po instalaci v provozu. Schéma a DPS pro Eagle jsou dostupné na mém Githubu.


  


úterý 1. srpna 2023

RP2040 Doom

Mikrokontrolér RP2040. Dvoujádrový Cortex-M0+ na 133MHz, 264kB SRAM, žádná FLASH. Na tomhle železe dokáže běžet klasika mého dětství, střílečka Doom? Ano, díky experimentálnímu portu rp2040-doom dokáže!

Tohle jsem prostě musel zkusit. Raspberry Pi Pico s 2MB FLASH a Pimoroni Pico VGA Demo deska, nahrát software a jedem. Opravdu to funguje! Člověk, co to portoval, je borec. A povídání o jeho postupech rozhodně stojí za přečtení.

Hračku jako je tato prostě musím mít. Takže hurá na návrh vlastního dedikovaného hardwaru. Dlužno říct, že s RP2040 jsem dosud nedělal... a tady se ždímá nadoraz. Je přetaktované z 133MHz na 270MHz, napětí jádra zvednuté z nominálních 1,10V na 1,30V, QSPI komunikace s FLASH na 135MHz... všechno mimo specifikace. Na originální desce něco výjimečně zatuhne, ale většinou to funguje.

Můj design je v 0603 kde to šlo, takže blokování trochu horší než s originálními 0201 těsně u čipu. FLASH paměť jsem zvolil maximální podporovanou, tj. 16MB - když už, tak už. Místo SMPS stačí pro napájení z USB jen LDO. Audio DAC dedikované napájení nepotřebuje. Konektory: USB-A pro klávesnici a update FLASH, MiniUSB-B pro napájení, 4pin pro I2C multiplayer, audio jack a VGA konektor.

Destičky z Číny dorazily, osadil jsem, připojil přes USB bootloader, nahrál... a nic. No, takže klasika, nic nefunguje napoprvé. Aspoň byla příležitost se skamarádit s RP2040, jeho SDK a Dockerem pro build systém. Očekával jsem problém v přetaktování - blbě naroutované blokování nebo QSPI sběrnice k FLASH. V podstatě to tak bylo, i když trošku složitější. Rychlosti nakonec čip v pohodě dává, problém je v přetaktování těsně po bootu. Evidentně není dosud usazené napětí jádra, na osciloskopu to vypadalo dobře, ale drobné glitche je problém zachytit. Ačkoliv se mi 270MHz podařilo dosáhnout jak bez boostu (na nominálních 1,10V) tak při zvýšení (na 1,30V), vždy bylo potřeba před přepnutím frekvence chvíli počkat. Chvíli jsem empiricky určil na 2-3ms, s rezervou 10ms. Autor s podobným problémem evidentně příležitostně také bojoval. Po přidání pauzy jsem si schválně udělal malé srovnání rychlostí originálu a mé desky - kam až se dá jít s frekvencí jádra, než RP2040 zatuhne? Pozor na to, že experimenty v diskuzích obvykle tak leda toglují pinem (první sloupec), což není typická zátěž. Já nechal procesor přečíst celou FLASH a udělat její XOR checksum pro kontrolu (druhý sloupec).

Deska / test          Delay loop   FLASH XOR
------------          ----------   ---------
RPi Pico 1,1V                      280 MHz
RPi Pico 1,3V                      303 MHz
RP2040 Doom 1,1V      316 MHz      279 MHz
RP2040 Doom 1,3V      399 MHz      306 MHz

Výsledek uspokojivý, čísla jsou prakticky stejná jako pro RPi Pico a problém je jen v bootu. Přidal jsem tedy pauzu a přeložil binárky. Doom nastartoval! Akorát bez zvuku. Další pátrání... ach to osazování, nábojová pumpa na audio DACu s 2n2 místo 2u2 fungovat nebude. Opraveno a už to valí!

Z archivu Doom WAD souborů jsem vybral The Ultimate Doom a Doom II - Hell on Earth (v1.9) a vytvořil WHX soubory pro "not so tiny" verzi emulátoru. Pro zájemce dávám ke stažení archiv s kompletním hardwarem, UF2 binárkami a příslušnými WHX soubory. A co je možná nejdůležitější, mé náhodné poznámky z kompilace v Dockeru. Na internetu lze nalézt také funkční picotool pro Windows.

    


pátek 9. prosince 2022

GSM meteostanice na chalupu

Vlhkost na chalupě je nikdy nekončící problém. Zvlášť, když se jedná o smíšené zdivo, bez podřezání, izolace neexistující a bez vytápění přes zimu. Navazuji na desítky let odvlhčovacích pokusů, které zahájil můj otec přibližně s mým narozením. A na to potřebuji tvrdá data o teplotě a vlhkosti!

Elektřina je na chalupu zavedená, ale při odjezdu se vypíná. Internet není. Mému řešení tedy nezbývá než běžet ze solárních panelů a využívat GSM síť. Pro sběr dat jsou použita bezdrátová teplotní/vlhkostní čidla La Crosse TX29DTH IT+, které jsem doma našel po již nevyužívané meteostanici. Jejich výhodou je známý komunikační protokol, vysílají své údaje cca každé 4 sekundy v pásmu 868 MHz a příjem lze realizovat modulem HopeRF RFM12B.

Celé zařízení je momentálně postaveno na mikrokontroléru STM32L031C4T. Vzhledem k požadavkům na úspornost v proudovém odběru i čerpání dat jsou údaje agregovány. Příjem se aktivuje každou hodinu na 20 sekund, po 20 hodinách jsou hodnoty úsporně odeslány na server pomocí POST požadavku přes levný GSM modul SIM800L. Jako nejvýhodnější jsem vloni nakonec zvolil operátora Kaktus, což je virtuál v síti T-Mobilu. Dobití 50Kč s platností 1 rok, cena 1MB je 1Kč, účtovaná jednotka 100kB. To máme 10 haléřů za připojení, každých 20 hodin vychází na 43,80Kč ročně. No není to paráda?

Serverová část je napsaná v PHP, využívá databáze SQLite a RRD. Pro vykreslování grafů pak RRDtool. Data jsou pro POST zakódována do variace na base64, požadavek pak vypadá např. takto:

i=60&c=20&cp=0&cl=0&ci=3&it62=IB4H1.HyAHt8Hl8HmAHiCHeCHaCHWEHOCHKCHCCG.EG6EGyCG.EHSAHZ.HZ.&it31=ICEICIICKICKICKICMH.MH.MH6MH2MH2MHyMHuMHqMHmMHmMHmKHiMHiMHeM&it46=IFqIB2IB8H9.H9.H6AH6CH6EH2EHyGHyGHuGHqGHqGHmGHiGH6EIKCICCH.C&tv=AGJAdH0AAWGQa30AAoGQU3wAA2GASHsABLFgPnsABbFQMHsABmFQJnsAB4EAGnsACHEgGHsACbEgFnsACoDADHsAC2DADnoADJDgEHoADWDAB3oADoDABXoAD3CgAXsAEKCgFHwAEXDgLn4AEpDASH4AE2EAWX8A

Uvedený řetězec obsahuje 20 teplot a vlhkostí ze čtyř bezdrátových čidel (tři místnosti a jedno venkovní), dvou NTC senzorů (vnitřní a vnější) a napětí Pb akumulátoru dobíjeného solárními panely přes PWM regulátor. PHP skript se postará o dekódování a uložení do SQLite a RRD databází, následně jsou vygenerovány grafy.

Veškeré podklady jsou dostupné na Githubu. Přiložené obrázky jsou z první verze, v současnosti už mám objednané plošné spoje na mírně inovovanou variantu, která bude umožňovat i dálkové spínání výstupů a aktivaci ventilátoru na základě vypočtené teploty rosného bodu.

Mimochodem, úsporné režimy na STM32L0 mi daly zabrat, a to se vyznám. Po dlouhém trápení, kdy procesor vypadal v pořádku a že se krásně na základě RTC probouzí po dlouhých intervalech, ale kdy na chalupě 80km daleko zlobil, jsem to nakonec vzdal a RTC vyřadil. Spolu s RTC nelze použít IWDG, má příliš krátký interval. No, ukázalo se, že závada nakonec nebyla v softwaru, ale v hardwaru. Špatně umytý leptací roztok postupně zlikvidoval malé místečko zrovna na TXD signálu od MCU do GSM modulu...


    

  


pátek 15. července 2022

TinyHA: měření elektroměru a vodoměru

Elektroměr má na sobě červenou LEDku s poznámkou 500 impulzů / kWh. Vodoměr ještě nedávno disponoval viditelným kovovým kolečkem, které se otáčelo tempem jedné otáčky na litr vody.

Navržené snímače jsou neinvazivní, tedy pouze ze zvenku připojí na příslušný měřič. U elektroměru využívám fotoodporu (GL5539 nebo něco podobného) a snímám bliknutí zmíněné LED.  Fotoodpor je zapojen v děliči s rezistorem volitelně 10kohm nebo 470ohm, čímž lze dále nastavit rozsah. AD převod je spouštěn periodicky, udělá se průměr ze 4 hodnot a následně porovná s hraniční hodnotou s uvažováním hystereze. Konkrétně pro elektroměr mám AD převod spouštěný po 4ms a nalezené AD hodnoty jsou <190 zhasnuto, >200 svítí. Pro zjištění hodnot je implementovaný příkaz MEAS_SENSOR.

Funkce vodoměru byla o něco zajímavější, vycházel jsem z řešení Petra Stehlíka, který měl stejný vodoměr Sensus 420 a od kterého jsem získal také STL model přípravku pro přichycení senzoru. Pro měření využívám stejný hardware jako u elektroměru, použité čidlo je typu TCRT5000L. Každých 100ms na něj na 500us posvítím LEDkou a změřím AD vstup ze snímače. S hranicemi <170 ne, >190 ano dokážu spolehlivě detekovat přítomnost odrazivé části terčíku vodoměru. Počítání otáček terčíku už je na firmwaru AVRka.

A teď ta negativa. U elektroměru zatím vše funkční, ale v extra slunných dnech zřejmě prosvítá slunko přes nedokonale těsnící dvířka skříně elektroměru, takže kolem pravého poledne měření zlobí. Nicméně to bude jistě řešitelné drobnou úpravou rozhodovacích úrovní.

U vodoměru je to horší. Jednoho dne zazvonil technik z vodáren, že jde měnit vodoměr a instalovat dálkový odečet. Bohužel přesně stejným způsobem, jako jsem používal já, tedy optickým snímáním terčíku. Systém SMART vodoměrů zakoupený BVK je zcela uzavřený, využívá řešení francouzské firmy SUEZ Smart Solutions. Podařilo se mi dohledat použití komunikace v pásmu 169 MHz, protokol Wize je end-to-end šifrovaný AES, navíc odečet probíhá pouze několikrát denně, takže nic snadno přístupného pro vlastní zpracování. Webové rozhraní nic moc, API pro získání stavu vodoměru neexistuje. A cvaknout se na kabel od jejich snímače jsem zatím neměl odvahu :-)


   

  

 


pondělí 24. ledna 2022

Anténa Cobweb pro pásma 14 až 28 MHz

Článek vyšel v časopise OK QRP INFO - OQI 119. Příspěvek je zkrácenou verzí článku, jehož úplná kopie vč. detailního popisu, měření a rozměrů je dostupná ke stažení.

Pro své QTH s velmi malým pozemkem jsem vybíral vhodnou anténu na krátké vlny. Dipóly, delta loopy a dlouhý drát (LW) jsem vzhledem k prostorovým požadavkům vyloučil rovnou. Typickým řešením jsou vertikály, zejm. Diamond CP-6. Nicméně chuť bastlit převážila, zejména po zjištění aktuální ceny CP-6, jejíž mechanické provedení stejně není právě dokonalé.

Na internetu jsem objevil „sušák na prádlo“, neboli anténu označovanou jako Cobweb. Jedná se o multiband pro pásma 20m až 10m, existuje i extra velká verze pro pásma od 40m. Původní anténa typu Cobwebb (se dvěma „b“) byla vyvinuta Steve Webbem G3TPW a prodávána komerčně. Její impedanční přizpůsobení na 50Ω bylo řešeno systémem skládaných dipólů, což značně komplikuje její výrobu a zejména ladění v amatérských podmínkách. Novější konstrukce včetně komerčních MFJ vycházejí z návrhu, jehož autorem byl Steve Hunt G3TXQ. Základním zdrojem informací je jeho stránka o Cobweb anténě.

Cobweb je tvořený pěti paralelně spojenými dipóly ohnutými do tvaru čtverce, které jsou napnuty na nosné konstrukci ze sklolaminátových tyčí. Celkový rozměr je na krátkovlnnou anténu velmi kompaktní, cca 2,7×2,7m. Vlivem úpravy dipólů do tvaru čtverce je vyzařovací charakteristika téměř všesměrová, napájecí impedance antény v rezonanci však klesá na cca 12Ω. Přizpůsobení je řešeno impedanční transformací 1:4 pomocí proudového balunu.

Při konstrukci antény jsem využil sklolaminátové tyče, primárně určené k rajčatům či elektrickým ohradníkům, označené Extol Premium 82524. V balení za cca 800Kč je 10ks tyčí průměru 12mm a délky cca 2m, pro konstrukci využijeme 5ks. Drát, kterým jsou jednotlivé dipóly natažené, musí mít zejména izolaci dlouhodobě odolnou UV záření. Průřez pro běžné výkony není kritický, volí se kompromis mezi hmotností a měkkostí. Využil jsem HELUTHERM 145 – pocínované měděné lanko 1mm^2 s izolací z polyolefinu v černé barvě, který je nehořlavý, odolný vůči působení UV záření a ozonu a jako bonus se výborně pájí. Pro ladění antény na jednotlivých pásmech se využívá změna délky příslušného dipólu. Dipóly se navzájem ovlivňují, ale pouze minimálně. Konce jednotlivých dipólů se sbíhají do dvou společných bodů, všech pět dipolů je tedy zapojeno paralelně.

Důležitým prvkem pro přizpůsobení antény je správně vyrobený impedanční transformátor, zde proudový balun s transformací 1:4. Balun se skládá ze dvou částí, každá z nich je namotaná paralelně spojenou dvojicí miniaturního koaxu RG316 (impedance 25Ω) na feritovém jádru, jedna strana koaxů je spojena sériově (50Ω), druhá paralelně (12,5Ω). Ačkoliv lze balun namotat i s využitím kabelu RG174, důrazně to nedoporučuji. S RG316 lze teoreticky využít vyšších vysílacích výkonů, ale zejména se s ním nesrovnatelně lépe pracuje, protože je vyrobený z teflonového materiálu, který se při pájení netaví. Feritová jádra Amidon FT140-61 lze nahradit v Evropě dostupnějším ekvivalentním typem FERROXCUBE TX36/23/15-4C65.

Anténa typu Cobweb je velmi dobře zhotovitelná v amatérských podmínkách. Na krátkovlnnou anténu vyniká prostorovou nenáročností a variabilitou instalační výšky. Jelikož jednotlivým pásmům odpovídají konkrétní dipóly, není ladění antény záležitostí magie jako u jiných konstrukcí, ale s vhodným měřícím vybavením příjemnou činností s opakovatelným výsledkem.


  

 

úterý 21. prosince 2021

TinyHA: pobočková telefonní ústředna (PBX)

Dnešní část TinyHA souvisí s domácí automatizací jen velice volně. Sice má připravený interface pro RS485 spojení se zbytkem systému, ale zatím jsem propojení nerealizoval. Co si budeme namlouvat, jedná se prakticky o hračku pro děti.

Na dovolené se syn shlédl v hotelovém telefonu, kterým by se (pokud by fungoval) dalo volat babičce do vedlejšího pokoje. Protože telefony na klasickou analogovou telefonní síť jsou snadno sehnatelné za pár korun (na Aukru cca 100Kč vč. poštovného), napadlo mě realizovat malou domácí telefonní ústřednu. Samozřejmě by šlo použít hotové profi řešení, ale to by jednak byl kanón na vrabce, druhak byly klasické ústředny zpravidla velmi žravé na elektřinu.

Velkou inspiraci jsem čerpal ze staršího článku na mcu.cz. Zásadním zjednodušením mé pětiportové varianty je "paralelka", jednotlivé okruhy tedy nejsou spojované, ale po zvednutí sluchátka se rovnou všichni účastníci připojují do sdíleného hovoru. Základní propojení je primitivní, jedná se o zdroje proudu pro jednotlivé linky spojené střídavou vazbou pro přenos hovorového signálu. Trošku větším oříškem je detekce zvednutí sluchátka a zejména vyzvánění.

Vyzvánění je klasicky řešeno střídavým napětím až 110V o frekvenci cca 20Hz, superponovaným na linkové napětí cca 60V stejnosměrných. Rovnou jsem zavrhl klasické staré telefony, předpokládám využití moderních, s "digitálním" vyzváněním a tónovou volbou. Podpora pulzní volby by byla záležitostí softwaru, kterou jsem ale neimplementoval.

Moderní telefony bez problémů pracují s linkovým napětím 24V, používám proudové napájení cca 20mA. Pro vyzvánění je využito střídavého napětí cca 80V o frekvenci 50Hz, které je tvořeno pomocí transformátoru a dvojčinného měniče. Vše je řízeno mikrokontrolérem AVR.

Vyzvánění je poměrně problematická záležitost a po několika neúspěšných experimentech s optotriaky jsem se rozhodl jít klasickou cestou s využitím inkurantních miniaturních relé, které jsou přímo určeny pro použití v komunikacích. Zvolené řešení funguje výborně. Detekce vyvěšení sluchátka je realizována pomocí AD převodníků mikrokontroléru. V klidovém stavu je úloha jednoduchá, trochu složitější je to při vyzvánění - je nutné synchronizovat AD převod se správnou půlvlnou 50Hz vyzváněcího napětí. Analogově by to byl oříšek, pro mikrokontrolér jednoduchá práce.

Pro detekci tónové volby je použit DTMF dekodér MT8870, osazený na modulu od Hadexu, lze sehnat i z Číny. Zdrojový kód lze najít v projektu TinyHA na Githubu, hlavní část stavového automatu je v souboru main.c. Mikrokontrolér se rozhoduje dle stavu (vyvěšení) jednotlivých linek a DTMF dekodéru. Dle potřeby generuje vyzváněcí napětí a tóny do sluchátek.

V klidu čeká na zvednutí libovolného sluchátka, následně začne generovat oznamovací tón. Po prvním DTMF vstupu nebo zvednutí dalšího telefonu přechází do stavu hovoru. Reaguje na DTMF volby *1 až *5 pro jednotlivé linky, generuje vyzváněcí napětí pro příslušný telefon a vyzváněcí tón do společného hovorového kanálu. Po zvednutí telefonu, zavěšení volajícího nebo dalším DTMF vstupu volání zruší. Pokud už je volaná linka vyvěšena, generuje obsazovací tón.

Celé zařízení je napájeno z bezpečných stejnosměrných 24V, otestováno jej mám zatím se čtyřmi telefony. Všechny přístroje s tónovou volbou fungovaly bez problémů včetně detekce zavěšení. S výhodou využívám dosud neobsazené Ethernetové Cat5e kabeláže do různých místností. Na jaře se chystám jednu linku zavést i na rozhlednu :-)


  

středa 15. prosince 2021

Pexeso pro elektroinženýry

Také vás rodina a přátelé drtí v pexesu, protože na to nemáte paměť? Tak tady je pomsta elektroinženýra - lahůdka jménem pouzdra integrovaných obvodů. Zaručeně zmate neznalé, byť zkušenější hráče. Ideální na krácení dlouhé chvíle mezi svátky či jako dárek pod stromeček :-)


 

úterý 31. srpna 2021

TinyHA: centrální jednotka s RPi Zero

Centrálním mozkem celého systému je Raspberry Pi Zero W. Dnes už bych asi vše řešil embedded cestou s vhodnou bránou připojenou k hlavnímu serveru (což je u mě historický thin klient od HP s Debianem), nicméně dříve jsem místo něj měl jen NAS, takže samostatné řešení bylo vhodnější.

K RPi Zero jsem navrhl "hat". V uvozovkách proto, že rozšiřující hat destičky obvykle přidávají nějakou funkci či rozšíření a jsou maličké. Můj "hat" je víc než dvojnásobný než RPi Zero a vytahuje z GPIO konektoru vše myslitelné. Je na něm spínaný zdroj, oddělené vstupy, reléové výstupy, budič pro linku RS485, konektor pro SPI a I2C rozhraní, EEPROM paměť a řadič pro 1wire sběrnici. Bohužel UART na RPi nemá možnost řízení směru nutného pro RS485, proto je tato funkce realizována časovačem 555. Funguje spolehlivě pro jednu nastavenou rychlost komunikace, v případě změny se musí upravit časová konstanta.

Veškerá datová kabeláž se sbíhá v jedné místnosti, miniaturní serverovně neboli "špajzce". Pro propojení jsem využil levné patch panely po 8 pozicích, s postupným rozšiřováním na současných 16 pozic a RPi modul plus další drobnosti. Vše je spojeno zařezávacími konektory Krone. Jejich nacvaknutí je při použití správného nástroje snadné, spolehlivost výborná. Tedy dokud neřešíte stejně jako já problém dvou drátů v jedné svorce, to se sice dá, ale spolehlivost je rapidně horší.

Ne všechna kabeláž vede přes RPi, např. zvonek je nezávislý a do RPi vede jen jako vstup pro záznam událostí. Plexi kryt se ukázal jako nutnost před průzkumnými operacemi mých dětí.

Co tedy běží na samotném RPi Zero? Klasický Raspbian Lite (resp. nověji Raspberry Pi OS Lite), na kterém je systemd, apache, php, sqlite3, rrdtool. Prakticky vše je naskriptováno v php, což rozhodně není ideální řešení - mnohem vhodnější by byl např. python, jenže php jsem uměl a tak to bylo nejjednodušší k použití. Tedy aspoň jsem si to myslel, než jsem začal řešit problémy se sériovým portem...

Základní web je udělaný s využitím Bootstrapu, což je velká výhoda z hlediska jeho použitelnosti jak na PC, tak na mobilech. Data vhodná pro prezentaci formou grafů se ukládají do RRD databází, ze kterých se pak generují grafy v rámci cronu.

GPIO jsou inicializovány skriptem tinyha-init po startu. Následně se spustí na pozadí další skripty. Skript tinyha-busupdate zajišťuje komunikaci po RS485 a periodicky se dotazuje všech možných slave zařízení, aby z nich mohl generovat grafy a prezentovat jejich aktuální stav. Skript tinyha-doorbell čeká na hranu signálu tlačítka zvonku, aby mohl zalogovat událost (aneb konec věčných hádek, zda pošťačka zvonila či ne). Skript tinyha-onewire slouží ke sběru teplot z čidel připojených na 1wire sběrnici. Skript tinyha-pingupdate jednou za čas pingne přes síť (no dobře, přes wifinu, protože RPi Zero nemá ethernet) všemožná zařízení v domácí síti a aktualizuje jejich online stav. Skript tinyha-nibeupdate slouží k připojení do Nibe API, díky kterému můžu monitorovat stav tepelného čerpadla.




  


 


pátek 16. července 2021

TinyHA: digitální vstupy a výstupy

Množství zařízení se dá spínat přímo, bez relativně složité komunikace po sběrnici. Pro spínání čekoholiv jsem vytvořil jednoduchý DPS s relé, nejčastěji na 24V, některé jsou ale i na 12V a 5V. Každé relé je opět v "mističce" vytvořené 3D tiskem a zalité nehořlavým epoxidem.

A co tedy relátka spínají? Otevírání vrat garáže (paralelně k ovládacímu tlačítku), topné žebříky v koupelnách (přímo 230V v zásuvce), část venkovního osvětlení, aktivace blokování ohřevu TUV, čerpadlo v retenční nádrži, do budoucna je v plánu inteligentní cirkulace TUV.

Venkovní osvětlení je specialitka - je to vlastně převážně dekorace, tedy LED pásek na pár místech a nízkopříkonová LED bodovka namířená na jeden ze stromů, který je vidět z ulice. Spíná se se západem slunce a vypíná ve 23h. A zároveň se sepnutím je odblokování PIR čidlo pro detekci pohybu osob v okolí vstupních dveří, které následně přes další relé spíná klasické venkovní osvětlení. Tím je zajištěno, že i s levným PIR čidlem nesvítím uprostřed noci, když kolem projde kočka.

Systém mám dále několik digitálních vstupů. Detekce otevření vrat garáže (magnetická kontakt), spoušť domovního zvonku (takže existuje záznam, kdy kdo zazvonil - ano, pošťačka tvrdila, že tedy s tím dopisem byla... a já vím 100%, že ne), detekce externího napájení (kvůli výpadku elektřiny). Vše je připojeno na GPIO centrální řídicí jednotky, což je Raspberry Pi Zero W. O něm ale podrobněji příště.

Zvonek má příjemný gong dostatečné intenzity, jedná se o model z Aliexpressu s přidaným DCDC konvertorem. PIR senzor je typ Panlux SL2400/C. Požadavkem byla černá barva. Elektronika všech levných kusů je plus mínus stejná, snímač a obvod BISS0001 nebo jeho klony. Rozdíl je ale v zakrabičkování, které je pro funkci dost důležité - samotné moduly z Číny se chovaly hrozně, senzor od Panluxu díky krabičce o dost lépe. Část čočky obvykle zalepím gafou, aby zorné pole zabíralo jen to, co má. Elektroniku PIR snímače jsem z poloviny vyházel. Místo 230V a relé na výstupu jsem nechal nízkonapěťové napájení a otevřený kolektor, takže je vše připojené UTP kabelem, který vede do vhodného místa. Relé na 230V spínající světla je umístěno v jedné z instalačních šachet uvnitř domu.

pátek 11. června 2021

TinyHA: žaluzie

Venkovní žaluzie byly na dům jasnou volbou vč. elektrického pohonu. V základní verzi se jedná o Somfy J4 WT, což je chytrý motorek, pro 230V napájení využívá dvou různých vodičů - nahoru a dolů. Kromě toho umožňuje nastavovat doraz, programovací mód se spustí připojením napětí na obě napájení po danou minimální dobu.

Elektroniku jsem se rozhodl umístit do hlubokých instalačních krabic pod ovládací tlačítka. Řešení jsem chtěl autonomní, tedy nouzově funkční i při selhání rozšiřující elektroniky. Nakonec je koncept navržený tak, že pomocí optočlenů snímá stisk ovládacího tlačítka a pomocí relé ho dále přemosťuje. V nejjednodušším případě tedy po detekci dostatečně dlouhého stisku "přidrží" relátkem tlačítko stisknuté po dalších několik desítek sekund, než žaluzie sjede nebo vyjede kompletně. Bez napájení stále fungují tlačítka manuálně.

  

U každého okna mám pod omítkou vedený kablík k magnetickému senzoru pro detekci otevření, což je další vstup, který do elektroniky vede. Celá elektronika je umístěna v miniaturní vaničce vytvořené na 3D tiskárně, která je následně zalita nehořlavou epoxidovou hmotou. Těchto rozšířených tlačítek je po domě cca 10ks, ke každé žaluzii jedno. Dále jsem vyrobil jedno speciální, které slouží k hromadnému ovládání všech 5ks žaluzií v obýváku+kuchyni, to není připojené na 230V, ale pouze na sběrnici.

 

Firmware je funkcí trochu komplikovaný, protože musí reagovat na různé kombinace stavů - např. když žaluzie jedou nahoru a stiskne se tlačítko dolů, zastaví. Když se drží krátce (pod nastavenou dobu), nedělá nic. Když dlouze, sepne příslušné relé a podrží ho po specifikovaný čas. Když přijme odpovídající povel po sběrnici, simuluje stisk tlačítka. Možností je poměrně hodně a jsou docela dobře vidět v main.c.

Každá žaluzie má přiřazeno vlastní adresovací ID a dále volitelně skupinové ID, na které reaguje. Jedná se vlastně o jednoduchý multi-master systém, kdy mastery na sběrnici je buď řídicí jednotka (v této fázi projektu ještě neexistovala) nebo dedikované ovládací tlačítko. Ostatní tlačítka pak vystupují jako slave, odpovídají pouze na jim adresované dotazy.