Úvod do projektu Domovní monitor
Všechno to začalo, když jsem chtěl mít přehled o teplotě našeho staršího kotle nejen na teploměru v kotelně, ale i v ostatních místnostech, kde se pohybuji častěji. A jak jsem si tak pohrával s myšlenkou umístit vedle pohovky displej, začaly mě napadat další věci, které by mohl kromě teploty kotle trvale zobrazovat. Co třeba:
- aktuální teplotu v domě,
- teplotu vody,
- zaplnění jímky,
- napětí akumulátoru náhradního zdroje?
A možná by mohl i upozornit na to, že
- vyhasíná kotel,
- přetápí kotel (při závadě nebo chybě obsluhy),
- je nízká teplota vody,
- přehřívá se bojler (při závadě termostatu),
- došlo k zaplavení rizikových míst v domě (při poruše vodoinstalace),
- je nízké nebo naopak vysoké napětí akumulátoru náhradního zdroje.
Výsledkem těchto úvah je nikoliv jeden, ale skupina propojených modulů, která navíc kromě výše uvedeného:
- funguje i při výpadku elektřiny,
- trvale informuje o stavu pomocí displeje umístěného kdekoliv v domě (může jich být i víc),
- umožňuje uživatelské nastavení teplotních limitů pro upozornění,
- zpřístupňuje informace i mino dům (webová aplikace),
- je propojen s domovním alarmem, prostřednictvím kterého odesílá krizové SMS, případně volá,
- umožňuje jednoduché rozšíření pro přidání dalších kontrolních, či řídících funkcí.
V sérii následujících článků bych chtěl výsledek mé práce představit a přestože nemá být návodem ke stavbě ani výukovým materiálem, poskytnout zájemcům dostatek inspirace k případné realizaci něčeho podobného.
Architektura
Celý systém je postaven na komunikaci teoreticky libovolného počtu modulů (periferií) po jediném vodiči (sběrnici), kde každá periferie plní určitou vstupní nebo výstupní funkci. Data získaná vstupními periferiemi jsou v pravidelných intervalech odesílána na sběrnici a poté zpracovávána periferiemi výstupními. Například modul umístěný u kotle měří jeho teplotu, modul propojený s domovním alarmem spouští poplachy a modul s displejem zobrazuje důležité hodnoty. Díky univerzálnímu základu lze propojit množství senzorů a akčních členů do rozmanité sítě.
Periferie mohou při komunikaci zastávat jednu ze tří rolí:
- Hlavní je moderátor, který celou komunikaci řídí. Může být jen jeden a má přiřazenou síťovou adresu 00h. Může data posílat i přijímat.
- Komunikující periferie plní roli tzv. hosta. Ten má v rámci sběrnice přiřazenou jedinečnou osmibitovou adresu, pomocí které je moderátorem dotazován. Může data posílat i číst. Osmibitové adresování umožňuje připojení 255 hostů.
- Třetí rolí je posluchač, který může data ze sběrnice pouze číst. Nemá vlastní adresu, a proto jich může být ke sběrnici připojen teoreticky neomezený počet.
Komunikační protokol
Z důvodu spolehlivosti a energetické nenáročnosti jsem zvolil drátové propojení. Komunikace probíhá po jediném datovém vodiči (BUS), který je doplněn ještě druhým k definování nulového potenciálu (GND), případně třetím pro napájení (+5V). Datový vodič je pomocí pull-up rezistoru držen v log 1. Periferie jsou trvale připojeny GPIO pinem mikroprocesoru.
Rychlost komunikace je kvůli stabilitě pouhých 10kbps. Každý bit trvající 100us je složen ze dvou částí, první log 0 a druhé log 1. U bitu s hodnotou 0 trvá první část 80us, druhá 20us. Bit 1 to má obráceně, první část je tedy 20us, druhá poté 80us dlouhá. Hodnota bitu je čtena vždy v půlce, to je 50us po sestupné hraně značící začátek bitu.
Přenos byte začíná vždy nejnižším bitem a končí nejvyšším. Hodnota byte na obrázku níže je tedy 00000001 = 0x01h.
Jak bylo již napsáno, komunikaci řídí moderátor. Ten ji zahájí vysláním tzv. reset-impulsu, po kterém následuje adresa volaného hosta. Po detekci své adresy zahájí host příjem nebo vyslání informací podle toho, jak je naprogramován. Moderátor a host si tak předají informace, které po ukončení přenosu dále zpracují. Moderátor poté zahájí komunikaci s dalším hostem. Četnost komunikace s jednotlivými hosty je plně v kompetenci moderátora. Komunikaci mezi moderátorem a hostem můžou odposlouchávat posluchači. Podle adresy hosta vyslané moderátorem posluchač ví, jaké informace má přečíst a zpracovat. Ihned po ukončení komunikace každá periferie provede určené úkony (např. měření teploty, sepnutí relé) a poté vyčká na další dotaz od moderátora. Snad je v tomto odstavci špetka logiky.
Trocha o hardware
Z důvodu mé znalosti (nikoliv výborné) architektury několika typů osmibitových mikropočítačů PIC od Microchip jsem nemohl zvolit jinak. Jednoduché aplikace zvládá stařičký PIC16F84A, případně novější PIC16F628 na 4MHz taktu, náročnější moduly s oblibou osazuji PIC16F876 s 20MHz a moderátora tvoří PIC18F25K50 taktéž s 20MHz krystalem. Nic ovšem nebrání zapojit do systému jakýkoliv jiný procesor, což dokazuje mnou použitý WiFi modul nodeMCU s ESP8266, který je naprogramován pro čtení dat ze sběrnice a jejich odesílání na web. Ještě doplním, že všechny PICy programuji v assembleru a modul s nodeMCU ve Wiringu v prostředí Arduino IDE. O tom všem ale později.