TreppenLicht: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(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/project]]
+
[[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

Treppelicht.jpg

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