Titulek: tady je Davidovo (osobni nastenka)

Tady je Davidovo

(osobní nástěnka)

Tady by měl být obrázek. Že vy máte zakázané zobrazování obrázků... Povolit!


Domovní alarm

David Pleskot, 24.4.2018

Před devíti lety jsem si pořídil nemovitost na okraji města, kde často docházelo k vloupání. Kupovat profesionální zabezpečovací zařízení se mi nechtělo z důvodu ceny a taky proto, že vývoj takové věci je celkem zábava. Od té doby je zařízení nepřetržitě v provozu. Závada se za tu dobu objevila jen jedna - vadné tlačítko v klávesnici.

Následuje vcelku podrobný návod na stavbu. Kvalita podkladů bohužel místy pokulhává, protože k některým deskám se mi nepodařilo najít původní .max soubory. Původně jsem nechtěl z bezpečnostních důvodů nic zveřejňovat, teď už tenhle systém slouží jen jako sekundární. Kromě toho se dá předpokládat, že běžný zloděj z níže uvedeného nepochopí ani slovo.

Co se týče krytů a krabiček, tam nechť každý zapojí svou fantazii. Já mám krabičku na klávesnici vyrobenou z Cuprextitu, ústředna je ve skříni od 24 modulového nástěnného rozvaděče.

Obsah:

  1. Hardware
  2. Firmware

Hardware

Srdcem celé té věci je stará dobrá ATmega32. Všechny součástky jsou vývodové, aby se dal plošný spoj nakreslit ručně a aby se to dobře pájelo. Základem je ústředna, což je v podstatě procesor, pár vstupních ochran a zdrojová část. Ta komunikuje pomocí RS232 s klávesnicí s displejem. Čidla jsem použil pouze pohybová (Jablotron JS20 Largo) na hlídání prostoru a magnetická na okna a dveře. Lze použít cokoliv s NC kontaktem. Ústředna hlídá 7 okruhů. Výstupem je siréna, rovněž výrobek firmy Jablotron, typ OS-365A se záložním akumulátorem. Tichý alarm může systém vyhlásit pomocí GSM modulu. Přes něj lze pomocí SMS sledovat i aktuální stav, nebo odposlouchávat hlídaný prostor. Poslední částí systému, kterou jsem vyrobil letos a ještě se nedočkala ostrého nasazení je ethernetový modul. Ten by měl v budoucnu umožnit propojení s domovním počítačem.

deska ústředny s ethernetovým modulem
deska ústředny s ethernetovým modulem
svorkovnice ústředny
svorkovnice ústředny
klávesnice
klávesnice

Zdroj

Síťový zdroj 12V DC je zálohovaný olověným akumulátorem. Kapacita akumulátoru je shora limitována maximálním proudem který je schopen dát zdroj, což je zhruba 800mA. Nabíjecí proud akumulátoru vybitého kousek pod jmenovité napětí by tuto hodnotu neměl překročit. Zdola je kapacita limitována požadovanou dobou fungování z akumulátoru a počtem připojených snímačů.

Trimrem R1 se nastaví napětí na akumulátoru zhruba 13.7V. To vyhovuje PIR snímačům i siréně. Ústředna má na desce další měnič na 5V DC.

Rozpisku si můžete stáhnout tady.

osazovací výkres zdroje
osazovací výkres zdroje
DPS zdroje
DPS zdroje
schéma zdroje
schéma zdroje

Hlavní deska ústředny

Na první části schématu je vidět kontrolér ATmega32, doplněný o externí watchdog DS1232 a EEPROM 24C01. Watchdog a součástky kolem něj je možno vynechat, vnitřní WDT procesoru postačuje. Pokud chcete osadit reset tlačítko, tak propojte na DPS pin 1 a 6 patice DS1232. Paměť 24C01 slouží jako state saver odjištěno/zajištěno. Vhodnější by byla jednobitová feritová paměť, tzn. klasický state saver, ale to se dost těžko shání.

MAX232 budí sériovou linku pro komunikaci s klávesnicí. Relé Re1 umožňuje procesoru klávesnici restartovat, když s ní z nějakého důvodu ztratí spojení.

V pravé dolní části schématu je měnič z 12V (resp. 13.7V) na 5V a pojistky pro dva napájecí okruhy snímačů a sirény. Hradla 7400 fungují jako komparátory pro hlídání napájecích okruhů. LM224 a součástky kolem filtrují napětí na vstupu (akumulátoru) před vstupem do ADC procesoru. Měření tohoto napětí nefunguje úplně dobře. ADC totiž používá jako referenci napájecí napětí 5V. To má svůj důvod, který bude vysvětlen později. Bohužel při větším odběru (připojení ethernetového modulu) vzniká na tlumivce L4 úbytek zhruba 0.1V a napětí na akumulátoru je pak měřeno s velkou chybou. Chtělo by to použít tlumivku s menším stejnosměrným odporem.

Konektory K5, K6 a K7 slouží k připojení rozšiřujících modulů. Je na ně vyvedena SPI linka, dva signály pro adresaci a napájení. Pět pinů je pouze propojeno pro případ že by si moduly chtěly "povídat" mezi sebou.

V druhé části schématu jsou vstupní obvody a výstupy pro ovládání sirény. Jednotlivé smyčky se snímači fungují na principu odporového děliče. Každé čidlo má v sérii s svým NC kontaktem zapojen rezistor, jejichž součet by pro každou smyčku měl dát zhruba 4.7k ohmu. Na desce je stejný rezistor a dělič je napájen z napájecího napětí 5V. Následuje ochranný transil, filtr a vstup ADC procesoru. Po zapojení všech smyček se provede inicializace, v rámci které si procesor uloží do paměti hodnotu napětí pro každou smyčku. S ním pak porovnává aktuálně naměřené hodnoty a v případě neshody (mimo toleranci) vyhlásí poplach. Výhodou je, že systém nelze sabotovat zkratováním kabelů k čidlům.

Rozpisku pro tuto desku si můžete stáhnout tady. Relé používám Tesla RM2, protože jich mám plnou krabici. Běžně k sehnání už asi nebudou, náhradu jsem nehledal. Bude stačit jakékoliv pěti a méně voltové relé a buďto ho nějak nabastlit, nebo upravit desku. Odpor v sérii s cívkou relé slouží k nastavení nejmenšího proudu při kterém relé ještě spolehlivě sepne.

první část schématu ústředny
první část schématu ústředny
druhá část schématu ústředny
druhá část schématu ústředny
osazovací výkres desky ústředny
osazovací výkres desky ústředny
DPS ústředny, horní strana
DPS ústředny, horní strana
DPS ústředny, dolní strana
DPS ústředny, dolní strana

Dopněno 8.8.2018: Minulý týden někde v okolí uhodil blesk. Rádio, které jsem bohužel nechal zapojené v síti, téměř explodovalo. Zabezpečovačka naštěstí celkem přežila, ale bohužel ne bez ztráty kytičky. Vymazala se zřejmě část paměti procesoru na základní desce, takže systém po resetu naběhl zobrazil stav a pak se někde zacyklil a restartoval klávesnici. Kupodivu pomohlo přeprogramování, ale až napodruhé, takže procesoru už se nedá věřit. Vyměnil jsem proto radši hlavní desku. Při zkoušení té poškozené jsem zjistil, že nefunguje vstup RS 232, bylo nutné vyměnit U3 (MAX 232). Napěťová špička se zřejmě nedostala přes zdroj, ale naindukovala se do kabelů sériové linky a přes MAX 232 prošla k procesoru. Bohužel jsem při návrhu zapomněl tuto cestu zablokovat transily. Doporučuji proto doplnit na desku ústředny a na desku klávesnice transily P6KE15CA mezi RX a zem a TX a zem.

Klávesnice a displej

Klávesnici tvoří 3x4 tlačítka, události na nich zpracovává kontrolér ATmega8. Zprávy o stisknutí kláves posílá po RS232 do ústředny. Znaky, které po seriové lince přijme, zobrazí na displeji. U něj se trimrem R2 nenastavuje podsvícení, ale kontrast. Zdá se to být jasné, ale už i mě se stalo že jsem zapomněl k čemu tam je. Pokud se vám po zapnutí na displeji nic neukáže, tak v první řadě zkuste zatočit s ním. Bzučák v mojí verzi nemám osazený, protože to znamená natvrdo nastavit PB5 jako GPIO a pak už není možné programování přes SPI.

Pozor na připojení displeje. Je nutné dát delší plochý kablík. Displej má kontakty na horní hraně desky.

Tady si můžete stáhnout prográmek do PC, který simuluje funkci klávesnice. Dá se použít na otestování desky ústředny. Bohužel funguje jen na COM1. Moc jsem se s ním nepáral, když jsem ho psal.

Rozpisku si můžete stáhnout tady.

schéma modulu klávesnice s displejem
schéma klávesnice s displejem
osazovací výkres klávesnice
osazovací výkres klávesnice
DPS klávesnice, horní strana
DPS klávesnice, horní strana
DPS klávesnice, dolní strana
DPS klávesnice, dolní strana

GSM modul

Tenhle modul je v dnešní době GSM shieldů pro Arduino trochu mimo. Ale třeba se najde někdo kdo má rád retro. Pro ostatní doporučuji modul, který jsem použil v kamerce s Rapberry Pi.

Modul tvoří procesor ATmega8, který přes level shifter komunikuje po sériové lince s připojeným telefonem. Telefon je potřeba vybrat takový, který podporuje práci se SMS pomocí AT příkazů. Já používám staré Siemensy. Externí watchdog DS1232 opět není nutné osazovat. Relé Re1 a Re3 jsou univerzální výstupy. Lze je ovládat pomocí SMS a řídit tak např. nástrahy na zloděje, nebo topení. Svorkovnice K6 je univerzální dvoustavový vstup.

Tranzistor T1 měl původně sloužit k připojování nabíječky k telefonu, který měl mít svou vlastní baterii. Tohle řešení se neosvědčilo, protože většina telefonů z druhé ruky má baterii zničenou. Proto doporučuji T1 vůbec neosazovat a telefon napájet z 12V zdroje systému. K tomuto účelu jsem použil modul Náhradní napájecí obvod pro telefony Siemens x35 od firmy Flajzar. To je stabilizátor 7805 prakticky v katalogovém zapojení, který má na vstupu i výstupu velký elyt (4700M a 470M) pro pokrytí špiček odběru telefonu a výstup je zapojen přes diodu 1N4007 (napětí orig. baterie je 4.5V). Prostřední pin konektoru baterie v telefonu připojte přes odpor 2k2 na zem.

Zapínání telefonu jsem vyřešil na hulváta připojením kablíku na červenou klávesu. Tu pak "mačká" relé Re2. Pokud člověk nevyhodí celou klávesnici telefonu, tak se v případě potřeby dá z "alarmu" normálně telefonovat.

Rozpisku si můžete stáhnout tady. Výše zmíněné spínací výstupy a univerzální vstup jsou v ní označeny "neosazovat", protože pro běžnou funkci nejsou potřeba.

schéma GSM modulu
schéma GSM modulu
osazovací výkres GSM modulu
osazovací výkres GSM modulu
DPS GSM modulu, horní strana
DPS GSM modulu, horní strana
DPS GSM modulu, dolní strana
DPS GSM modulu, dolní strana

Ethernetový modul

Klíčovou součástí této části systému je modul s IO ENC28J60 pro Arduino, připojený k desce pomocí plochého kablíku a dvou konektorů. Jeho použitím se ušetří spousta práce s pájením SMD součástek a konektoru. Stačí k němu jen připojit napájení a SPI a ethernetové rozhraní je hotové (fyzicky). Procesor na této desce je ATmega168, protože má dvě SPI. Jedním komunikuje s ENC28J60, druhým s hlavní deskou ústředny. Dále je na desce level shifter, tvořený tranzistory Q1 a Q2 a zdroj 3.3V pro ENC28J60.

Rozpisku si můžete stáhnout tady.

schéma ethernetového modulu
schéma eth. modulu
osazovací výkres ethetnetového modulu
osazovací výkres eth. modulu
DPS ethernetového modulu, horní strana
DPS eth. modulu, horní strana
DPS ethernetového modulu, dolní strana
DPS eth. modulu, dolní strana

Firmware

Program jsem psal kdysi ve starém AVR studiu. Něco jsem překlopil do dnešního Atmel studia 6.0, něco ne. Nebudu sdílet celé "solutions", dám sem jen zdrojáky a .hex soubory. Kdo umí, ten si poradí, kdo neumí, nechť použije už přeležené.

Systém se ovládá přes klávesnici s displejem. Pomocí telefonu lze ovládat jen releové výstupy GSM modulu. Při běžném provozu má systém dva stavy - zajištěno a odjištěno. V odjištěném stavu systém hlídá všechny okruhy a pokud dojde k narušení, tak buďto vyvolá poplach ihned a nebo se zpožděním zhruba 15s (v případě že došlo jen k narušení vstupního prostoru). Zároveň vyzve k zajištění systému zadáním pinu a zapne podsvícení displeje. V zajištěném stavu je displej podsvícený a zobrazuje se na něm stav jednotlivých okruhů, stav napájení a napětí na akumulátoru.

Do servisního módu se systém dostane pomocí klíče. To je konektor, který se zapojí do jednoho z volných slotů, v kterém jsou přes pull-down odpory přizeměné piny CS1 a CS2. Ty jsou na začátku programu nastaveny jako vstupy a testovány. Po restartu s klíčem se objeví nabídka na změnu pinu a vyvážení systému (inicializaci). Vyvážení se musí provést po zapojení všech okruhů. Systém si změří napětí na všech vstupech a uloží ho do paměti, jak už bylo popsáno zde. Z toho plyne, že před spuštěním vyvažování by měla být všechna čidla v klidovém stavu (kontakty sepnuty). Po ukončení měření se na displeji ukáže výpis všech naměřených napětí.

GSM modul komunikuje pomocí SMS ve tvaru

A:x O:xxxxxxx N:xxx Z:x R:xx U=xx.x

A je alarm (1=aktivni, 0=neaktivni), O znamená okruhy, N jsou napájecí okruhy (0=ok), Z je zajištěno (1=zajištěno), R je stav reléových výstupů GSM modulu a U je napětí akumulátoru. Při poplachu posílá SMS a volá, příchozí hovory přijímá. Příchozí SMS, v kterých nenajde příkaz pro sebe, přeposílá na nastavené číslo.

Ethernetový modul funguje jako webserver s jednou stránkou.

Ústředna

Software není příliš user-friendly. Některá nastavení se dělají pomocí konstant na začátku zdrojáku. Takže kdo není schopen přeložit zdroják ten bude muset použít stejné nastavení jako mám já.

ZOBRAZOVAT_PINurčuje zda se na displeji klávesnice zobrazují při zadávání pinu čísla, nebo hvězdičky
PIR_SENSbinárně okruhy ve kterých jsou zapojena pohybová čidla (obecně čidla s monostabilním výstupem)
MIN_Umez napětí, pod kterou se baterka považuje za vybitou [V] (x10)
MIN_U_SMSmez napětí, při kterém se posílá SMS o výpadku napájení [V] (x10)
VSTUPNI_OKRbinárně okruhy hlídající vstupní prostor
T_POPLACHdélka poplachu [s] (x5.2)

Program po inicializaci periferií procesoru přečte z externí EEPROM stav systému. Následně vyresetuje klávesnici a stav zobrazí na displeji. Chvíli počká a pak otestuje, jestli není požadován vstup do servisního menu. Pokud je systém odjištěn, tak napíše, že do servisního menu nelze vstoupit. Mechanismus vstupu do serv. menu je popsán výše. Po změně pinu, nebo vyvážení cykluje v nekonečné smyčce a musí se odpojit klíč a provést reset.

V normálním módu nastaví CS1 a CS2 jako výstupy a natvrdo nastaví adresu GSM modulu. Ethernetový modul má adresu stejnou, dostává stejné informace jako GSM modul. Je to trochu čuňárna, ale funguje to. Následuje zpoždění 3s pro náběh PIR snímačů a začíná hlavní smyčka. V ní se periodicky resetuje vnitřní i vnější watchdog, testují se vstupy a napájecí okruhy a podle stavu systému se buďto hlídá a nebo jen zobrazují informace na displeji klávesnice. Nakonec se měří napětí na baterii. Pokud je příliš nízké, tak je poslán příkaz GSM modulu k odeslání SMS. V hlavní smyčce se také nastavuje stav obou LED diod. Jejich význam je na klávesnici i hlavní desce stejný. Červená znamená že je něco špatně (poplach), zelená indikuje že systém funguje. Pro úsporu energie v odjištěném stavu zelená dioda jen občas blikne.

S klávesnicí komunikuje hlavní deska jednoduše. Vše co se odešle po RS232 (v ASCII) se zobrazí na displeji. Vyjímkou jsou příkazy a číslo 0x08. Příkazy mají vždy 4 znaky a začínají znakem '$'. 0x08 je backspace.

Jak už bylo uvedeno výše, systém netestuje jednotlivé smyčky jednoduše stylem nulový odpor/nekonečný odpor. V sérii s čidly jsou ve smyčkách zařazeny rezistory, které společně s rezistory ve vstupech ústředny tvoří odporový dělič. Na něm se měří napětí a porovnává se s hodnotou uloženou v paměti. Tolerance je 0.2V. Rezistory je vhodné umístit pod kryty čidel jištěné sabotážními kontakty. Když už zmiňuji sabotážní kontakty - ty není vhodné zapojovat do smyček s pohybovými čidly i když to k tomu svádí, ale buďto do samostatné smyčky, nebo např. k magnetickým kontaktům vnitřních dveří. Smyčky definované konstantou PIR_SENS se vyhodnocují jinak než ostatní. Předpokládá se že čidla rozpojují smyčku jen krátkodobě a proto když je po skončení poplachu tato smyčka stále rozpojena, tak se vyhlásí poplach znovu.

Firmware pro ústřednu si můžete stáhnout tady.

Dopněno 8.8.2018: Nová verze firmwaru tady. Opravil jsem chybu, v servisním menu to restartoval watchdog. Externí je pořád potřeba odpojovat jumperem. Globální proměnné jsou všechny volatile, protože jinak to v Atmel Studiu 6 kurví optimalizace.

Klávesnice

Po inicializaci, nastavení timerů atp. program testuje zda není stisknuta klávesa. Pokud je, tak spustí nastavování podsvícení. Po odsouhlasení nastaveného jasu klávesou OK si hodnotu uloží do EEPROM, vymaže displej a začíná hlavní smyčka. Příchozí znaky po RS232 se ukládají do bufferu a testuje se, zda nepřišel příkaz. Pokud ne, znak se zobrazí na displeji. V opačném případě se příkaz provede. Příkazy jsou následující:

$Lx1rozsvícení LED, x je 1 nebo 2
$Lx0zhasnutí LED
$LxFblikání LED
$PS1zapnutí podsvícení
$PS0vypnutí podsvícení
$NOPdotaz jestli klávesnice žije, odpoví $OK

Pokud delší dobu nepřijde znak, ani není stisknuta klávesa, tak se pro úsporu energie vypne podsvícení displeje a zhasnou LED. Číslo stisknuté klávesy se posílá po RS232 ven, přičemž 10 je Backspace a 11 je OK.

Firmware pro klávesnici si můžete stáhnout tady. Knihovna pro ovládání displeje není moje, kontakt na autora je ve zdrojáku. Do mého kódu ji vkládám poněkud prasácky, vkládám i .c soubor. V Atmel studiu 6.0 to nějak zlobilo, tak jsem zvolil řešení "účel světí prostředky". Problém byl tuším v tom že soubor musel být vložen do projektu, nebo bylo potřeba projekt založit jako céčkový a já měl c++.

GSM modul

Jádro firmwaru pro GSM modul je kódování a dekódování SMS ve formátu PDU. Starší telefony bohužel posílají zprávy zakódované. Dnešní GSM moduly, např. SIM900 od Shanghai SIMCom wireless solutions Ltd. už umí přímo textový formát zpráv. Funkce pro kódování a dekódování zpráv jsou poněkud náročné, co se týče velikosti datové paměti. Dost jsem se s tím pral, což je ostatně vidět v poznámkách na začátku zdrojáku.

Z hlavní desky modul přijímá informace o stavu systému a příkazy. Předávají se tři bajty, čtvrtý je kontrolní xor přes všechny tři. Na začátku paketu je STX, na konci ETX. Význam jednotlivých bajtů je následující:

byte1 [7]poplach ano/ne
byte1 [6..0]stav jednotlivých okruhů
byte2 [7]zajištěno ano/ne
byte2 [6..0]napětí baterie x10 [V]
byte3 [7..5]napájecí okruhy, siréna, okruh1, okruh2, funguje/nefunguje
byte3 [4..0]příkaz pro GSM modul

Příkazy jsou dva, 0x1C znamená poplach a 0x03 je varování. Při poplachu volá a posílá SMS, při varování (např. vybitá baterie) jen pošle SMS. Přijetí dat z hlavní desky signalizuje LED.

S telefonem se komunikuje pomocí AT příkazů. Funkčnost telefonu se pravidelně testuje prázdným příkazem AT. Pokud neodpoví, tak se restartuje pomocí červené klávesy.

Na DPS GSM modulu je chyba. Signál CS2 je připojený na pin 15 (PB1) procesoru. Měl by být na pinu 16 (PB2). Možnosti opravy jsou dvě. Jednodušší je přepsat to ve zdrojáku, složitější je proškrábnout a opravit to na desce. Já jsem to neopravil, protože mi dva takto postavené moduly i s tou chybou fungují, ačkoliv by neměly, protože na celém portu B jsou zapnuté pullupy.

Firmware pro GSM modul si můžete stáhnout tady. Tentokrát jsou tam jen zdrojáky, protože je potřeba změnit telefonní číslo.

Modul reaguje na následující SMS příkazy:

DPA STAV?pošle výše uvedenou stavovou SMS
DPA RELEx ZAPzapne relé, x je 1 nebo 2, pošle SMS
DPA RELEx VYPvypne relé, pošle SMS
DPA RELEx PULSsepne relé na zhruba jednu minutu, pošle SMS

Když přijde příkaz z čísla v mezinárodním formátu, tak odpoví na něj, jinak odpoví na číslo definované v konstantě HTELCISLO v souboru da_gsm_com.c. Na toto číslo také volá a posílá SMS v případě poplachu. Poplach lze vyvolat i zkratováním svorkovnice K6. Je trochu matoucí že v takovém případě přijde SMS začínající A:0.

Ethernetový modul

Tohle je asi nejjednodušší část softwaru. K ENC28J60 je toho na internetu spoustu, stačí si jen vybrat. Já jsem si stáhl tento projekt github.com/bprayudha/avr-enc28j60, trochu ho upravil a opoznámkoval. Data si to bere stejná jako GSM modul a vytvoří z nich webovou stránku. V ní jsou jako neviditelná poznámka vloženy všechny tři přijaté stavové bajty pro případné další zpracování nadřazeným systémem.

Firmware si můžete stáhnout tady. V souboru da_ethernet.c je jako konstanta IP adresa a MAC adresa. O MAC adresu by se správně mělo zažádat, měla by být unikátní. Pokud zařízení nepřipojíte přímo do internetu, což nedoporučuji, tak stačí když se nepotká s ničím ve vaší síti.



To je vše. Pokud se rozhodnete ke stavbě, tak přeji hodně úspěchů. Případné problémy není problém zkonzultovat, v zápatí je můj email. Konstrukce je to zastaralá, je tam hodně prostoru ke změnám. Hlavně GSM modul by si zasloužil z gruntu překonstruovat. Pokud by se do toho někdo pustil, tak se prosím podělte o výsledky.

David Pleskot     david.pleskot(zavináč)seznam.cz     psáno v editoru Geany
světlemodrá šipka modrá šipka
Úvod
Auto/Moto
Elektro-bastlení
Cestování
Knihy
Různé
Guestbook
posl. aktualizace: 17.3.2025
RSS