LED Lauflicht mit Bewegungserkennung.

 

Die Idee war es, das Treppenlicht zu automatisieren, jedoch nicht stumpf die Deckenlampe zu schalten. Es sollte irgend wie was anderes her.

Wie in dem Video zu sehen, schaltet das Licht je nach dem von wo man kommt in die richtige Richtung, möchte ich nach oben, so läuft das Licht nach oben, von oben kommend dann wieder nach unten.

Damit die Treppe nicht „dauernd“ schaltet bei Bewegung, wurde zusätzlich noch ein Lichtsensor zu dem Bewegungsmelder verbaut.

Was benötige ich?:

1 x Arduino
2 x HC-SR501 Bewegungsmelder
1 x Lichtsensor 
5m ws2812b ( oder die länge die benötigt wird )
5V Netzteil
Jumperkabel
Die länge an Kabel die benötigt werden
Lötkolben
Kondensator 1000uF 25V
Schrumpfschlauch 
Werkzeug

Wir öffnen nun die Arduino IDE und laden folgenden Code:
Adafruit_NeoPixel.h wird benötigt!

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN_links 6 //links
#define PIN_rechts 7 // rechts
#define NUMPIXELS 120
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN_links, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixel = Adafruit_NeoPixel(NUMPIXELS, PIN_rechts, NEO_GRB + NEO_KHZ800);
int delayval = 20;

const int bewegung_oben = 8;
const int bewegung_unten = 9;
const int lichtsensor = 10;
int bewegungsstatus_oben = 0; 
int bewegungsstatus_unten = 0;
int lichtsensor_status = 0;
int i = 0;


void setup()
{
  pinMode(bewegung_oben, INPUT);
  pinMode(bewegung_unten, INPUT);
  pinMode(lichtsensor, INPUT);
  Serial.begin(9600);
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif

  pixels.begin();
  pixel.begin();
  pixel.show();
  pixels.show();
}

void loop() //Der Loop-Teil beginnt
{ //Mit dieser Klammer wird der Loop-Teil geöffnet.
  bewegungsstatus_oben = digitalRead(bewegung_oben);
  bewegungsstatus_unten = digitalRead(bewegung_unten);
  lichtsensor_status = digitalRead(lichtsensor);
  
  if (bewegungsstatus_oben == HIGH and bewegungsstatus_unten == LOW and lichtsensor_status == HIGH)
  {
    // hier die leds schalten für beide Seiten (oben ) 
    for(int i=0;i<NUMPIXELS;i++){
    pixel.setPixelColor(i, pixel.Color(0,0,145)); //blau
    pixels.setPixelColor(i, pixels.Color(0,0,145)); // Beide LED Streifen aktivieren
    pixel.show(); 
    pixels.show();
    delay(delayval); // 
    }
    delay(20000);
    for(int i=0;i<NUMPIXELS;i++){
    pixel.setPixelColor(i, pixel.Color(0,0,0)); // LED ausschalten
    pixels.setPixelColor(i, pixels.Color(0,0,0));
    pixel.show();
    pixels.show();
    delay(5);
    }
  }
  if (bewegungsstatus_unten == HIGH and bewegungsstatus_oben == LOW and lichtsensor_status == HIGH)
  {
    // LED Schalten von unten nach oben.
    for(int i = 119; i<NUMPIXELS;i--){

    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,0,145)); // Farbe definieren ( RGB )
    pixel.setPixelColor(i, pixel.Color(0,0,145));
    pixels.show();
    pixel.show(); 
    Serial.print(i);
    delay(delayval);
    if(i==-1) {
    delay(20000);
    for(int g=119;g<NUMPIXELS;g--){
    pixels.setPixelColor(g, pixels.Color(0,0,0));
    pixel.setPixelColor(g, pixel.Color(0,0,0));
    pixels.show();
    pixel.show();
    delay(5);
    Serial.print(i); 
    if(g==0) {
    break;
    }
    }
    }
    if(i==-1){
      break;
    }
    }
  }
} //Mit dieser letzten Klammer wird der Loop-Teil geschlossen.

 

Nachtrag:

Hier als UPDATE der Schaltplan:

Der Code ist so ziemlich simple aufgebaut und leicht zu verstehen:

Nachtrag2 24.02.2020:

Da dieser Artikel sehr beliebt ist und so einige Fragen per E-Mail kommen, möchte ich den Arduino Sketch ein wenig mehr Erklären:

#define NUMPIXELS 120
Gibt die Gesamtanzahl der LED pro Seite an. 

int delayval = 20;
Die Variable delayval legt in Millisekunden fest, wann die nächste LED geschaltet wird.
Ein höherer Wert verzögert, einer kleinerer Wert verkürzt die „Schaltdauer“

pixel.setBrightness(64); // Wert von 0 -255, wobei 0 aus und 255 volle Helligkeit ist
Mit dieser Variable kann man, wenn benötigt oder gewünscht, die Helligkeit regeln.
Sollte die Variable genutzt werden wollen, muss diese in folgenden Bereich eingefügt werden:

#endif
 
  pixel.setBrightness(64); 
  // Wert von 0 -255, wobei 0 aus und 255 volle Helligkeit ist
  
  pixels.begin();
  pixel.begin();
  pixel.show();
  pixels.show();

delay(20000);
Diese „Variable“ bzw diese Unterbrechung wird auch in Millisekunden angegeben. 
Bei einem Wert von 20000 ergibt das 20 Sekunden wo die LED angeschaltet bzw bis diese wieder aus gehen. 

Da bei einem delay das „ganze“ Programm angehalten wird, werden keine weiteren Befehle abgearbeitet oder verarbeitet. 
In diesem Fall nicht weiter tragisch.

Wer allerdings mit weiteren Sensoren oder Programm seitig was verarbeiten möchte, der sollte mit millis() arbeiten .

for(int i = 119; i<NUMPIXELS;i–){

Die Anzahl an LED die wir am Anfang des Sketch eingetragen haben, müssen in diesem Teil auch „-1“ eingetragen werden.

Beispiel:
#define NUMPIXELS 120

Anschließend muss in der Code wie folgt aussehen:

for(int i = 119; i<NUMPIXELS;i–){
( 120 – 1 = 119 )
Wieso ist das so?
Nun, die 0 ist auch eine LED: 0 – 119 = 120 Physisch vorhandene LED

Hab dazu mal einen passenden Kommentar in einem Forum gelesen:

Nen Zollstock beginnt mit 0 (schau mal nach!), das Lebensalter wird gezählt ab 0 (du wirst nicht mit einem jahr geboren). Es macht schon Sinn.

Immer wo euch im Sketch die Variable:

pixel.Color(0,0,145)

begegnet, muss ein RGB Wert angeben werden um die Farbe zu definieren.
Eine RGB Tabelle könnt Ihr hier einsehen: RGB Tabelle.

Was passiert?

Wenn Bewegung oben erkannt wird, schaltet der HC-SCR auf „High“, ist der untere auf „low“ ( keine Bewegung ) und der Lichtsensor auf „High“
( Schwelle sollte so gewählt werden das bei Dämmerung der Sensor auf „High“ schaltet ) so werden die LED von oben nach unten durchgeschaltet.

Das gleiche in anderen Richtung.

Sollten Ihr Fragen haben, so schreibt mir einfach in die Kommentare, ich bemühe mich die Fragen zu beantworten! 🙂

Bis zum nächsten Projekt 🙂

 

27 Replies to “LED Treppenlauflicht mit ws2812b ( Video + Code )”

    1. Hallo Marcel,

      ich habe mal eben einen Schaltplan erstellt.
      Siehe Nachtrag.

      Geb mir bitte Bescheid wenn dieser nicht ausreichen sollte.

      Güße

    1. Hallo Tobias,

      dies hängt von der Leitungslänge ab.
      In meinen Fall habe ich 220 Ohm an die jeweilige Datenleitung gehangen.

      Grüße

  1. Hallo! Vielen Dank für das tolle tut…
    Ich hätte da aber eine Frage wäre das ganze auch umsetzbar mit einem analogen keramik piezo sensor anstelle der bw melder, die wollte ich ganz gerne unter die Treppenstufe anbringen, wir haben nämlich eine Katze und ich möchte nicht das jedesmal wenn die Katze da nachts lang läuft die bw melder ansprechen?! Anderes Problem wäre, ich kenn mich mit der Programmiersprache nicht aus, hab schon versucht Sketche zu schreiben wie deinen, bin aber immet gescheitert, deshalb war ich froh deinen gefunden zu haben. Über eine Antwort würde ich mich sehr freuen. MfG L. Buchhop

    1. Hallo Herr Buchhop,

      es ist möglich den Bewegungsmelder gegen einen anderen Sensor zu tauschen.
      Von der Idee her ist es gar nicht mal schlecht einen Vibrationssensor zu verwenden.

      Die Schwierigkeit wird denke ich mal nur der „Schwellenwert“ sein.
      Analog auslesen und verarbeiten ist nicht das Problem, eine zuverlässige „Mitte“ zu finden wo er nicht wegen jeder Kleinigkeit reagiert wird schon schwieriger.
      Dies müsstest Du dann vor Ort testen und ggf. nach justieren.

      Aber ja, es ist möglich.

      Wenn Du mir den Typ bzw den genauen Sensor mitteilst ( Gerne per E-Mail: p.vens-cappell@online.de ) kann ich Dir bei der Umsetzung des Scripts helfen.

      P.s.:
      Haben selber eine Katze die hoch und runter läuft, meine Bewegungsmelder habe ich deswegen auf Körperhöhe ( ca 1,2m ) gehangen und somit ist die Katze aus dem „Sichtfeld“ der Sensoren.

      Grüße

  2. Hallo Herr Buchhop,
    tolles Projekt, ich habe das ganze mal auf ein Steckbrett ausprobiert, bekomme es leider nicht zum laufen, mache ich was falsch?. Ich habe den Code ins Arduino geladen so wie er auf der Seite abgebildet ist. Adafruit_NeoPixel-master ist installiert, Bitte um Hilfe.
    Gruß Dietmar

    1. Hallo Dietmar,

      wie sieht denn Deine Beschaltung aus?
      Kannst Du mal bitte ein Bild posten?

      Ist der Flashvorgang erfolgreich gewesen?
      Zwei Bewegungsmelder und einen Lichtsensor eingebunden?
      Ansonsten muss der Sketch umgeschrieben werden.

      Welche Teile möchtest Du denn einsetzen?
      Darauf hin kann man gezielter helfen.

      Grüße

  3. Schön das sie helfen, ich habe die Schaltung genau so aufgebaut wie auf den Schaltbild fritzing zu sehen, 2xBewegungssensor, 1x Helligkeitssensor und 2x Ws2812, 1m entspricht 30 LED´s pro Seite.
    Habe auch im Programm auf 30 LED´s geändert. Der Flashvorgang ist erfolgreich gewesen. Wenn ich die beiden Sensoren auf 8 und 10 Stecke und den Helligkeitssensor auf 9, dann funktioniert ein Sensor und die beiden 2812 laufen durch, alle 30 Led´s.

    1. Vielleicht mal versucht den Bewegungsmelder auf den anderen Pin zu setzen? Bzw mal auf den funktionierenden Pin?
      Vielleicht ist auch ein Sensor nicht ganz in Ordnung?

    1. Hallo,

      ich habe Deine Mail erhalten und bereits geantwortet.

      Ich kann Dir gerne helfen wenn Du mir paar Sachen in der Mail beantwortest.

      Grüße

  4. Hallo Pascal, tolles Projekt… gefällt mir echt sehr gut. Siehst du eine Möglichkeit den Sketch so abzuändern, dass das Einschalten und Ausschalten „smother“ geht? Also die einzelnen Leds nacheinander mit fade in einzuschalten, bzw. mit fade out auszuschalten? Ich habe in diversen Foren nach Beispielen gesucht, aber leider nichts passendes gefunden.
    Grüße Andy

    1. Hallo Andreas,

      entschuldige die späte Antwort.
      Ich werde mir heute Abend paar Gedanken machen, generell erlaubt die Bibliothek ein fade in bzw fade out.

      Ich melde mich so fix es geht.

      Grüße

      1. Hallo Pascal,
        vielen Dank für deine schnelle Reaktion und Rückinfo. Und…keine Hektik…es ist nur Bastelei, es gibt aktuell sicher wichtigeres.

        Grüße Andy

  5. Hallo ,
    habe voe Tagen dieses super Projekt hier entdeckt. Da ich im Moment Zeit habe möchte ich dieses Projekt nachbauen, allerdings nur mit einer ws2812b-. Habe mir alles organisiert also kann ich eigentlich starten, und natürlich keine Ahnung von sowas . Hättest du eventuell auch einen Schaltplan und Code für eine Seite? ich würde mich sehr darüber freuen .
    Gruß Manfred

    1. Hallo Manfred,

      schaue mal bei dem Code: überalle wo pixel steht, betrifft die rechte Seite und wo pixels steht, betrifft die linke Seite.
      Du müsstest einfach jede Zeile wo pixels steht mit // auskommentieren und oben bei der Definition die linke Seite mit // auskommentieren. (Zeile 6 und 9)

      Gruß Andy

  6. Hallo.
    Schaut richtig super aus. Wir wollen demnächst auch unsere Treppe plus Flur renovieren.
    Das mit dem Touchsensor oben ist super.
    Was sind den die gesamtkosten dafür? Und wie lange dauert sowas?
    Ich persönlich hab von sowas null Ahnung, aber einen Elektriker in der Familie.

    Danke
    Lg

    Bleibt gesund

    1. Hallo Sebastian, bin auch ganz neu hier finde es auch das es spitze aussieht. Ich bin noch am üben irgendwann habe ich es raus und es läuft dann . Der ganze Spaß ist gar nicht so teuer. Habe mir das komplette Arduino Starterkit für 25 €uro bei Ebay geholt. und die 5 Meter WS 2812b bei Aliexpress. Natürlich habe ich das erst zum üben wenn ich es zum lauen bekomme bastel ich mir ein für den Garten. Gruß

  7. Hallo Pascal,

    wow, tolles Projekt. Vor allem gefällt mir dass Du gute Notizen hier bereitstellst.
    Ich suche nach so einem Lauflicht für die Treppe im neuen Haus, aber wegen, naja, „neuem Haus“ und „Kinder“ (und „fehlendes know-how“) habe ich nicht die Zeit alles von null selbst zu machen.

    Ich hatte eigentlich gedacht ich kann einfach so einen LED-player nehmen wie etwa diesen hier:
    https://amzn.to/2KPGEvd
    Da dann ein Programm für „Treppe hoch“ und eins für „Treppe runter“ drauf.
    Dummerweise konnte ich keinen einzigen finden, der per Kontakt getriggert werden kann. Das hätte da ganze elegant gelöst, ganz ohne Programmierung.

    Ich habe vor allerdings ein paar Sachen anders zu machen:
    – ich nehme einen RGBWW-strip, weil ich sowieso weiss beleuchten will. Ich nehme an, wenn überhaupt muss ich ggf. das Format von pixel.Color(0,0,145) ändern? Das bekomme ich raus.

    – Außerdem nehme ich einen Strip mit 12V. Deine Stripes sind doch sicher 4-5m lang, oder? Das geht über 5V? Hast Du beidseitig eingespeist? Bin überrascht.

    – Ich würde noch einen weiteren Eingangs-Pin für manuelles „Licht an“ über einen Taster nutzen (realisiert über einen shelly, der einen Kontakt schliesst)

    Als Anregung möchte ich das Stichwort „fade in / fade out“ was weiter oben schon fiel, nochmal aufgreifen. Das wäre schon schick, denke ich.

    Außerdem gestatte mir eine Frage:
    Eigentlich ist das abzuspielende Programm ja recht einfach.
    Könnte man nicht auch einen „pixel player“ nehmen, also einen digital-controller der ein Programm von SD-Karte abspielt? Müsste mal halt einen finden der sich per dry contact ansteuern lässt… Das wäre aber ggf nochmal günstiger und einfacher als der Arduino…

    Ich denke mir das mal durch und gebe dann hier Feedback wie ich das ganze angegangen bin.

    Danke und viele Grüße,
    Jan

  8. Hallo Pascal,
    tolles Projekt hast Du da mit der Treppenbeleuchtung realisiert.
    Ich habe bei mir im Treppenhaus vor einer Weile auch die Neo-Pixel über 3 Stockwerke gezogen, aber nur auf einer Seite. Da meine Programmierkenntnisse schlecht sind, suche ich einen passenden Code dazu. Deine Treppenbeleuchtung ist so ähnlich wie meine ): . Wie kann ich im Code die PIR-Sensoren durch IR-Sensoren tauschen.
    Bin schon seit ein paar Tagen dran mir deinen Code auf meine Treppenbeleuchtung anzupassen. Habe zwar schon meine IR-Sensoren eingefügt und es funktioniert auch halb richtig. Ich weiß jetzt nicht wie ich richtig die Entfernung auf die Bewegung programmiere. Wenn ich feste Werte nehme dann klappt es auch, aber dann müsste ich ständig immer an der gleichen Stelle an Sensoren vorbei laufen.
    Ich verwende IR-Sensoren Sharp GP2Y0A02YK0F.
    Könntest du mir eventuell weiter helfen?
    Danke

    1. Du müsstest einen Bereich festlegen, also zwischen 20 und 60 cm zum Beispiel.

      Kannst Du mir den Code mal an meine Email Adresse senden?
      Vielleicht schaffe ich es morgen Nachmittag diesen umzuschreiben.

      Vielleicht gibst Du die Parameter auch gleich mit:

      Treppenbreite, wie soll was passieren etc.
      Das würde helfen 🙂

      Grüße

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.