Loupežník

15.06.2007

Pod tímto tajemným názvem se skrývá jednoduchá, ale užitečná konstrukce, která umožňuje vzdálené vypínání zásuvek - tedy krotit 230 loupežníků :-) K čemu je to dobré? Na naší síti Starhill máme v uzlu Mačkalov, kromě jednoho serveru, také několik různých HW access pointů, klientů a switchů. Čas od času se stane, že některé toto zařízení se kousne a odmítá plnit svoji úlohu. Řešením je odpojit toto zařízení na nějakou dobu od elektrické energie a opět ho připojit. Akce jednoduchá, která se ovšem velmi špatně provádí, pokud je člověk mimo Šternberk a nebo se mu jednoduše nechce nikam chodit a lozit. A protože právě lenost a snaha minimalizaci času výpadku je tím, co žene inovace dopředu, sbastlil jsem toto jednoduché zařízení, které pomocí příkazů ze sériového portu serveru dokáže odpojit na dobu 1-99 sekund až 10 libovolných zásuvek od loupežníků :-)
Vedlejším efektem tvorby této jednoodpolední srandičky bylo to, že jsem si chtěl vyzkoušet, jak se dají v Eaglu tvořit 3D pohledy na výsledné desky. Jinak bych desky nakreslil na papír - na něj to jde rychleji :-)

Popis zapojení

Srdcem celého zařízení je jednočip Atmel AT-Mega8. Je to šváb z rodiny AVRoidní a se svými parametry a cenou (2.5P = 2.5 piva = studentská peněžní jednotka) je na tento účel velmi vhodný. Ano, stačil by jakýkoliv 10 let starý jednočip s mnohem menší pamětí, protože ovládací program toho moc nedělá, ale AVRka jsou dneska hodně populární a jelikož mě ASM už přiliš neoslovuje, existuje celá řada kompilátorů Cčka, které si s AT Megou rozumí :-)
K jednočipu je připojen standartní převodník RS232/TTL s IO MAX232 a 10 kousků rezistorů, tranzistorů a relátek, které odpojují požadované zásuvky. Napájecí část se dvěma stabilizátory neskrývá žádné záludnosti. Pozor je třeba dát na to, aby byl transformátor dostatečně dimenzován na na proud, které mohou relé odebírat. Software totiž umožňuje sepnout naráz všechny relé, i když si nedokážu představit aplikaci, kde by to bylo užitečné, ale výsledný proud by pak neměl překročit maximální proud stabilizátoru a trafa. V mém případě jsem použil trafo 12V/2.1VA, takže proudově do 175mA. Použité relé mají spotřebu 25mA, takže pokud nesepnu všechny relátka současně, je napájecí část dimenzována dostatečně.
LED slouží k indikaci činnosti zařízení, pomalé blikání znamená, že je v klidovém stavu, rychlé, že se provádí odpojení některého relátka.

Schéma zapojení

Mechanické zpracování

Celé zapojení je rozděleno na 3 části a to tak, aby šlo umístit do obyčejných elektroinstalačních krabic, které se používají pod omítku např. na vypínače a nebo zásuvky. Představa mechanického zpracování je taková, že se na plech o rozměrech 500x300 umístí ve dvou řadách 10 těchto krabiček a do nich klasické zásuvky. Ovládací elektronika s relátky pak bude umístěna mezi tyto 2 řady do 3ks těchto krabiček.

DPS 1 - logika a napájecí zdroj


DPS strana spojů
DPS strana součástek

Na této desce je umístěna vlastní logika zapojení, převodník RS232/TTL a napájecí zdroj. Transformátor se připojuje k usměrňovacímu můstku do pinů SS1 a SS2. Na desce jsou 3 pinové konektory CON1-4. CON1 a CON2 slouží k propojení s druhou deskou a jednotlivé piny jsou označeny RE01 až RE10. Na druhé desce jsou tyto konektory taktéž, takže stačí udělat propojovací kablík a nebo se vybodnout na konektory a propojit to drátky :-) CON3 slouží k připojení programátoru, význam signálů je na DPS uveden. CON4 je napájecí konektor pro spojení s vedlejší deskou a zajišťuje napájení relátek. Prostor pro trafo jsem musel v mém případě odřezat a trafo posadit až na dno krabičky.

DPS 2 - tranzistory a relé


DPS strana spojů
DPS strana součástek

Tato deska obsahuje 10 tranzistorů BC546 a 4 relátka. S předchozí deskou je propojena pomocí plochých kablíků (signály RE01-RE10) a dvoulinkou na napájecí konektor. Zapojení 230V na relé je zřejmé, přivádí se doprostřed mezi relátka a výstupy na zásuvky jsou na kraji desky. Kolektory od tranzistorů k relátkům se připojují pomocí drátků. Je to sice zrůdnost, ale nechtělo se mi tahat tyto signály mezi spoji, kde je kousek vedle síťové napětí. Navíc tato varianta umožňuje jistou pružnost, kdy si určíme, že relé 1 bude vedle relé 7 :-) Je tedy možné si relátka nadrátovat podle potřeby. Navíc je tato možnost i ve firmware, takže flexibilita je v tomto ohledu značná :-)

DPS 3 - relé


DPS strana spojů
DPS strana součástek

Tato deska obsahuje zbytek relátek. S předchozí desky je nutné přivést 12V a pak připojit relátka ke kolektorům tranzistorů.

Software

Program je napsán v jayzce C a zkompilován pomoci AVR-GCC z balíku WinAVR. V ATmega8 zabírá cca 25% paměti a to hlavně díky textům, které posílá na RS232. Snaží se tak být trošku user-friendly :-)
Klidová činnost programu je pouze taková, že na základě přerušení od sériové linky ukládá do bufferu přijaté znaky a vyčkává dokud nejpřijde znak konce řádku (\n). Poté analyzuje obsah bufferu a pokud vyhovuje některému příkazu, vykoná jej. Blikání LED je řízeno pomocí časovače s předděličkou (úžasná činnost :-), čili nezasahuje nijak do ostatního kódu. Program odesílá mnoho užitečných informací zpět na sériový port.
K naprogramování doporučuji program PonyProg a programátor na bázi STK200. To jsou ty jednoduché zapojení na paralerní port, jejichž výstupem je pětice signálů MISO,MOSI,SCK,RESET a GND, tedy přesně ty signály, které jsou na DPS1 v CON3. Konfigurační bity jsou (log.0=programmed):BOOTSZ1, BOOTSZ2, SUT0, CKSEL3 a CKSEL2. Ostatní zůstanou v log.1=unprogrammed.

Software ke stažení

Ovládání

Loupežník se ovládá pomocí portu RS232, který musí být nastaven na 9600 bps, délku slova 8 bitů, žádná parita a jeden stop bit. Reaguje na příkazy, které musí být ukončeny znakem nového řádku \n

H - vypíše nápovědu
P - něco jako ping, vypíše OK, pokud loupežník žije a poslouchá
Rpptt - odpojí port pp na dobu tt sekund
L - vypíše aktuální stav namapovaných portů na fyzická relátka
Arrpp - namapuje fyzické relé rr na port pp

Co je to port? Port je virtuální označení relé, což se dá chápat jako styčný bod mezi uživatelem a relátky. Ke každému portu je možné namapovat jiné fyzické relé a nebo i několik relátek. Na první pohled to zní jako nesmysl, ale užitečné je to v případě, kdy jedno zařízení (blok několika zařízení), které chci resetovat, má více síťových adaptérů a pomocí namapování více relé na jeden port mohu dosáhnout sepnutí více relé jedním příkazem. Další možností je jistý způsob virtuálního přepojení (předrátkování) fyzických relátek na virtuální port. Čili pokud fyzické relé 05 připojím k zásuvce 07(např. je na ní nalepen tento štítek), tak programu řeknu, že port 7 namapuju na fyzické relé 5 a poté už navždy resetuju jen 7čku a přitom reaguje relé 5. Ano, toto mohu provést přímo při pájení drátových propojek k relátkům, ale někdy může nastat situace, že bude nutné ze zásuvkami šachovat a tak se tato funkce může hodit. Stavy přemapování jsou uloženy v EEPROM, takže se neztratí.

Výchozí nastavení mapování je 1:1, takže port 1 je relé 1:

rele | port
-----------
01 ----> 01
02 ----> 02
03 ----> 03
04 ----> 04
05 ----> 05
06 ----> 06
07 ----> 07
08 ----> 08
09 ----> 09
10 ----> 10

Ostatní

Eagle brd, sch, pov...
WinAVR - avrgcc + libc v jednom