TreppenLicht: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: == Treppelicht Automat with special features == Im Zuge unseres Hausneubaus kam das Problem auf, dass wir eine vernuenftige Schaltung gebraucht haben, die die Lichter...) |
|||
Zeile 45: | Zeile 45: | ||
[[Category:ethersex]] | [[Category:ethersex]] | ||
− | [[Category:stettberger/ | + | [[Category:stettberger/projects]] |
Aktuelle Version vom 28. März 2009, 13:48 Uhr
Treppelicht Automat with special features
Im Zuge unseres Hausneubaus kam das Problem auf, dass wir eine vernuenftige Schaltung gebraucht haben, die die Lichter im Gang und im Treppenhaus schalten. Dabei sollten die Lichter automatisch sich wieder nach einer gewissen Zeitspanne abschalten. Auszerdem sollte man das Ganglicht im oberen Stockwerk auch schon vor dem Betreten des Treppenhauses anschalten koennen.
Hardware
Als Hardware kam ein ATmega8 mit ZBus Anschluss (der allerdings brach liegt). Die Taster, die ueberall im Haus verteilt sind werden sternfoermig mit jeweils 2 Leitungen angefahren. Eine der beiden Leitungen ist GND, die andere einfach ein Input Pin des ATmegas, bei dem die internen Pullups angeschalten sind.
Die Ausgaenge sind 4 MOC (MOC3052) - Triac (BTA08/600SW) Schaltungen, so wie sie im Datenblatt vom MOC stehen. Durch den Moc erhaelt man die noetige galvanische Trennung zum 230V Netz.
Software
Die Software ist ein normales ((EtherSex)), dem die Treppenlichtschaltung mit Control6 beigebracht ist. Der Control6 Source wird beim compilen durch m4 in C Source Code gewandelt und dann fest einkompiliert. Hier ein Beispiel des ersten Kanals. (Die anderen Kanaele sind gleich aufgebaut)
PIN_INPUT(CHAN1_INPUT) PIN_PULLUP(CHAN1_INPUT) GLOBAL(chan1_wait, uint16_t) define(`CHAN1_WAIT', 3) /* Channel 1 */ ON PIN_FALLING(CHAN1_INPUT) DO ON TIMER(chan1_observer) > 1 DO ON PIN_HIGH(CHAN1_LED) DO PIN_CLEAR(CHAN1_LED); } else { chan1_wait = CHAN1_WAIT; THREAD_RESTART(chan1_timer) END TIMER_START(chan1_observer) } else { THREAD_STOP(chan1_timer) END END /* Verzahnung mit Channel 2 */ ON PIN_LOW(CHAN1_INPUT) && TIMER(chan1_observer) == 2 DO chan2_wait = CHAN2_WAIT_LONG; THREAD_RESTART(chan2_timer) END
CHAN1_LED: Ist der Ausgangpin fuer Moc und Statusled