Úvod do projektu Domovní monitor

calendar_month25.10.2018

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:

A možná by mohl i upozornit na to, že

Výsledkem těchto úvah je nikoliv jeden, ale skupina propojených modulů, která navíc kromě výše uvedeného:

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.

zobrazené informace na displeji řídící jednotky

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ě.

ukázka webové aplikace

Periferie mohou při komunikaci zastávat jednu ze tří rolí:

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.

bit 0
bit 1

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.

LSB   1 0 0 0 0 0 0 0   MSB

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.

reset-impuls a navazující adresace a komunikace

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.