Projektvorstellung- automatisches Lampen- Funknetzwerk

So, hallo in die Runde,

nachdem ich ein paar Wochen über meinem Lampennetzwerk (Gen. 2) gesessen haben und mir Whandall ganz fleißig geholfen hat, möchte ich nun heute das Ergebnis präsentieren. Es funktioniert vollkommen so, wie von mir gewünscht, kann also direkt so nachgebaut werden.

Der Sketch der Zentrale ist etwas lang, erschlägt vielleicht so manchen... aber alle relevanten Werte kann man am Anfang definieren, so dass man vielleicht nicht alles verstehen muss.

Es sind bei mir alle Lampen auf LEDs umgerüstet- die meisten superhelle RGB- LEDs, die mit 12 bis 36V arbeiten.

Ziel:

Ziel war es dass alle Lampen von allein an und aus gehen und die passende Helligkeit und Farbe auch automatisch eingestellt wird. Ich bin eher der faule Typ- möchte keine Knöpfchen drücken und auch nicht auf einem Smartphone oder Tablet rumwischen.
Um etwas spielen zu können, lassen sich die Lampen aber über eine IR- Fernbedienung, wie sie vielen RGB- Streifensets beiliegt ändern. So kann man z.b. einen Regenbogen durch die komplette Wohnung oder einzelne Räume laufen lassen.

Hardware:

Die Zentrale besteht aus einem Arduino Mega + 3,2" TFT (gabs bei Ali im Paket für 16,-), einem DS3232 und einem nrf24.
Je Lampe kommt ein nano, ein nrf24, ein IR Sensor und bis zu 3 PIR und 3 MOSFets zum Einsatz (Bei der IR- Bibliothek ist zu beachten dass auf einen alternativen Timer umgestellt werden muss, damit PIN3 PWM kann)

Man kann externe Sensoren, wie z.b. einen Sensor für Außenhelligkeit einbinden. Da ist dann nur der Sensor, ein nano und ein nrf24 erforderlich.

Darüber hinaus kann man auch Lampen die einfach nur Vorgaben empfangen und Umsetzen mit einem nano, einem nrf24 und 1- 3 MOSfets bauen.

Für alle Varianten lade ich je ein Beispiel hoch.

Ablauf:

Die Lampen senden den Status ihrer Sensoren nur wenn sich etwas ändert. Beim Außenlichtsensor habe ich ein Beispiel wie man das Senden zeitlich gesteuert umsetzen kann- da wird dann alle 10sec der Wert gesendet.

Die Zentrale lasse ich in regelmäßigen Abständen die Vorgaben senden, es werden einfach alle Lampen nacheinander angesprochen.

Die Zentrale aktiviert das Licht in dem Raum der betreten wird. Das Licht bleibt ohne Zeitlimit an. Erst wenn eine Bewegung in einem angrenzenden Raum erkannt wird, wird dort das Licht an und in dem alten Raum das Licht ausgeschaltet. Die Zentrale macht da das Licht aus, wo die Bewegung zuerst aufhört- hier sollte man etwas mit der Position der PIRs spielen- man kann auch einen PIR mit nano und nrf24 ohne Lampe irgendwo positionieren und auf der selben Adresse wie die Lampe senden lassen.

Die Vorgaben für Farbe, und Helligkeit sind abhängig von der Uhrzeit, dem Wochentag und Feiertagen. Man kann so z.b. einstellen, dass nachts im Schlafzimmer nur die Ausstiegsbeleuchtung am Bett angeht und die Deckenlampe aus bleibt.
Tagsüber regelt die Zentrale Helligkeit und Farbe abhängig vom Außenlicht- je dunkler es außen ist, desto heller und wärmer wird das Licht innen. Zur Mittagszeit wird das Licht über der Arbeitsplatte in der Küche heller eingestellt.

Anordnung Räume:

Bei mir ist der Flur (Raum1) so angeordnet, dass ich darüber ins Bad(Raum2), die Küche(Raum3), ins Wohnzimmer(RAum4) und ins Treppenhaus komme.
Das Wohnzimmer ist ein Durchgangszimmer. Alle Räume außer Flur und Schlafzimmer(Raum5) werden nur über das Betreten eines angrenzenden Raumes abgedunkelt. Um beim Verlassen der Wohnung das Licht irgendwann abzuschalten ist dies mit einer Zeitfunktion kombiniert. Gleiches habe ich fürs Schlafzimmer gemacht- wenn sich da nichts bewegt und auch in keinem angrenzenden Raum, geht das Licht nach einer änderbaren Zeit aus.

Ich hoffe die Beschreibung ist verständlich- ich werde versuchen die aufkommenden Fragen so zu beantworten, in dem ich gleich diese Beschreibung hier anpasse.

Die Lampen sind alle identisch programmiert, daher nur je ein Beispiel - "Lampe Flur" ist ein Beispiel für eine Lampe mit Sensorik, möchte man eine Lampe ohne Sensorik- als 2. Lampe in einem Raum, läßt man einfach den Sendeteil weg, ohne Sensoren würde aber so oder so nie etwas gesendet werden.

  1. Edit: Bei der Zentrale hatte sich ein Fehler eingeschlichen- wurde aktualisiert.

  2. Edit: noch ein Bild der Fernbedienung ergänzt. Die oberen Tasten sind entsprechend der Symbole belegt (Ausnahme das Play- Symbol). (Flash, Jump3, Jump7, und Fade3 sind noch ohne Funktion.
    Mit "DIY1" - "DIY5" wählt man den entsprechenden Raum, der von automatischer Vorgabe zu manueller Vorgabe wechselt- "DIY6" aktiviert alle Räume, "Fade7" ist der Regenbogen und mit "Auto" setzt man alle Lampen wieder ins Automatikprogramm.
    Man kann z.b. eine Farbe auswählen, und anschließend die Räume die diese Farbe übernehmen sollen. Wenn man den Regenbogen aktiviert und einen Raum nach dem nächsten zeitlich leicht versetzt anwählt läuft der Regenbogen durch die komplette Wohnung... 8)

Was ich noch als nächstes machen möchte ist ein paar WS2812- Streifen ansteuern... da muss ich aber noch etwas üben... vielleicht hat da ja jemand Tipps und kreative Ideen...

Helligkeitssensor_03_2016.ino (1.16 KB)

Lampe_Flur_03_2016.ino (9.16 KB)

Zentrale_5_2016_mit_IR.ino (41.3 KB)

Sehr knorke! Du kannst auch mit Farben tageszeitabhängig spielen. Morgens mehr Blau, dass wirkt aufmunternd, Abends einen Tick mehr rot.

Oder eine Lichtorgel. :slight_smile:

Jupp- genau das war auch meine Idee... Ich werde noch eine praktikable Lösung für Urlaubstage erarbeiten. Und wenn das steht, lasse ich mich morgens auch mit einem Sonnenaufgang wecken. Man muss ja dafür nur eine Uhrzeit definieren, wo man erst ein kalte Farbe setzt, mit Helligkeit erst auf 0, dann "Tempoan" relativ groß setzt und zeitgleich eine warme Farbe setzt... dann wird das Licht langsam heller und verläuft von blau nach orange- als Beispiel.

Mal ne dumme Frage... du schriebst, wenn man sich von einem Raum in einen anderen Raum bewegt, geht im 1. Raum das Licht aus.
Ist das Programm für einen Singlehaushalt ausgelegt, oder funktioniert es auch, wenn noch jemand im Wohnzimmer verbleibt und später von dort aus in einem anderen Raum, z.B. die Küche geht?

Klingt erst mal zu schön, um wahr zu sein. Da vermutlich etliche Leute dieses Projekt nachbauen wollen, würde es sich anbieten, per Eagle Leiterplatten für Master und Slave zu entwerfen und in China fertigen zu lassen. Die Boarddateien ebenfalls hier hochladen und wer mehr braucht (gerade bei Slaves) kann man beim Auftragsfertiger seines Vertauens dann gleich ein Zehnerpack ordern :smiley:
Wenn man den Atmega 2560 noch durch den 1284 ersetzen kann, ließe sich auch für die Zentrale ein handbestückbares Board erstellen :wink:

Im Prinzip ist es so gestaltet, dass nur der direkt verbundene Raum das Licht ausschaltet. Aktiviert wird das Licht generell immer wenn irgendwo Bewegung ist.

Sind also z.b. 3 Leute in der Wohnung verteilt, einer im Bad, einer in der Küche, einer im Wohnzimmer haben alle Licht. Geht der vom Bad in die Küche, geht das Licht im angrenzenden Raum, also dem Flur an... und wenn der in der Küche und der im Wohnzimmer schläft auch im Bad, in der Küche und im Wohnzimmer das Licht aus.
Da die Person aus dem Bad in die Küche geht, ist da das Licht direkt wieder an- bzw. das abdimmen wird gestoppt. Nur der im Wohnzimmer muss sich rühren sonst sitzt er im Dunkeln...
In der Praxis sieht das bei mir so aus, dass ich im Wohnzimmer an der Lampe 3 PIRs habe wovon einer schon reagiert, wenn man auf dem Sofa sitzend den Kopf bewegt... also zumindest bei mir ist es kein Problem, auch bei mehreren Personen in der Wohnung.

Um direkt Licht beim Betreten eines Raumes zu haben gebe ich die Fadingzeit zum hochdimmen sehr kurz vor- mit 2ms pro Schritt- also in 0,5sec von 0 auf 255.
Das runterdimmen kann man z.b. mit 100 wählen- dann dauert es gut eine halbe Minute bis das Licht komplett aus ist.
Das wird definiert über "Tempoan" und Tempoaus"

Ich werde mich aber bei Gelegenheit mal hinsetzen und so etwas wie einen Ereigniszähler entwerfen, der die Anzahl der Bewegungen der letzten X Minuten registriert und bei einer hohen ANzahl an Bewegungen das Abschalten einfach etwas verzögert.
Man kann sich aber natürlich auch generell eine Ausschaltverzögerung einbauen, die das Licht einfach noch eine Weile hält, bis dann das Licht abgeschaltet wird...
Bei mir läuft es seit 2 Wochen grundlegend- bis heute habe ich nur etwas Feinschliff vorgenommen- und bisher hatte ich auch bei Besuch kein Problem.

Prinzipiell kann man beliebige viele Sensoren ohne Beiwerk in einem Raum verteilen und einfach die entsprechende RaumID geben, er sendet dann mit der Adresse des Raumes sobald er eine Bewegung erkannt hat und ist dann still. Die Zentrale unterscheidet dabei nicht ob es 20 oder 2 Sensoren mit einer bestimmten RaumID gibt, es werden alle gleich behandelt und man muss diese auch nicht gesondert anmelden.
Ich haben den PIRs 3 Positionen im Array gegeben, um die Möglichkeit zu haben, die Position im Raum zu unterscheiden, falls erforderlich.

Edit: was den Entwurf und die Fertigung von Steuerungen angeht hab ich das auch schon mal überlegt. Da fehlen mir aber die Kentnisse und die Zeit. Ich habe eine Lampensteuerung in gut 1h aufgebaut, die nrf24 Module direkt mit ganz kurzem Flachkabeln auf die nanos gelötet und den Rest auf einer darunter liegenden Streifenrasteplatine mit Steckern für LEDs, Sensoren und Spannungsversorgung.

Für mich ist der Aufwand somit vertretbar, auch wenn ich das Projekt mal noch für andere mache....

Wenn hier aber jemand sowas startet bin ich gern dabei und kaufe direkt ein paar Module.

Für fie Zentrale würde mur natürlich auch was eleganteres besser gefallen, gern auch mit 5" Display und schön flach.
Da würde es dann auch Sinn machen eine Touchbedienung mit rein zu nehmen und die Werte über ein Menu einstellbar zu machen.

Ich hatte die Gen.1 dieses Netzwerk aber 2 Jahre in Betrieb und nie das Bedürfnis was zu ändern.
Gen.1 hatte die ganze Intelligenz in den Lampen sitze und die Zentrale hat nur zeitabhängige Programmnummern in den Raum gestellt. Da war es krampfig mal was zu ändern, weil ich immer an jede Lampe ran musste.
Mit der hier gezeigten Gen.2 kann ich alles an der Zentrale einstellen.

In deiner Initialisierung (Zentrale) fehlt eine Klammerung (else Teil), die du versucht hast mit Einrücken zu erreichen.
Das Benutzen von Strg-T für die automatische Formatierung ist wirklich zu empfehlen...

 if (timeStatus() != timeSet)
  {
    myGLCD.setColor(25, 0, 255);
    myGLCD.setBackColor(0, 0, 0);
    myGLCD.print("Uhrzeit kann nicht synchronisiert werden", 5, 2);
    delay(5000);
    myGLCD.clrScr();
  }
  else
    myGLCD.setColor(255, 55, 0);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.print("Uhrzeit wurde synchronisiert", 5, 2);

Oh, danke für den Tipp... laufen tuts aber komischerweise trotzdem.

Ich sammel mal solche Auffälligkeiten und mache dann demnächst ein Update.

Laufen tut alles- auch erstaunlich flüßig, ich kann immer ganz faziniert vor der Zentrale stehen und mich wundern wie schnell die Lampen ihren Status melden und ihren darauf folgenden Befehl umsetzen. Ich hab dafür mal einen Akku an dir Steuerung gehangen und bin durch die Eohnung gelaufen. Das ist keine 1/10Sekunde.... :slight_smile:

So, ich hab noch ein paar Kleinigkeiten optimiert- Ich hab z.b. für die Gestaltung des Displays Variablen für die Zeilen und Spalten eingeführt- dann muss man nicht lange suchen wo man überall was ändern muss, wenn das jemand anpassen möchte....

Zentrale_5_2016_mit_IR.ino (40.8 KB)