Treppenbeleuchtung WS2812B, HC-SR04, LDR

Hallo, die neue Treppe wurde endlich montiert. Jetzt geht es an die Beleuchtung ran. Es sind insgesamt 16 Stufen 85cm Breite, je Stufe 9 leds. Jede stuffe soll beim betreten aufleuchten und gedimmt ausgehen. Habe ein ws2811 led strip verwendet. Es wurde alles nach dem plan im Anhang angeschlossen. Ich habe nur statt den beiden Bewegungssensoren, zwei ultraschalsensore hc-sr04 verwendet. Ich habe leider von der Programmierung fast wie überhaupt keine Ahnung deswegen hoffe ich das mir jemand behilflich sein könnte . Ein Beispiel Sketch was angepasst werden müsste hänge ich mit dran. Vielen vielen Dank im voraus.

Als Netzteil verwende ich ein altes Xbox 360 Netzteil 12v 16 Ampere

treppe.ino (5.46 KB)

Die WS2812B und der Arduino funktionieren mit 5V nicht mit 12V. Hast Du Katzen oder Hunde? ich würde die Stufe vor dem Betreten beläuchten nicht nachdem Du den Fuß draufgesetzt hast. Grüße Uwe

Und du bist dir sicher, das das so funktioniert ? Woher soll denn dein US-Sensor wissen, dass du auf Stufe 3 bist und nicht auf Stufe 9 ?

ru-999:
Es wurde alles nach dem plan im Anhang angeschlossen. Ich habe nur statt den beiden Bewegungssensoren, zwei ultraschalsensore hc-sr04 verwendet. Ich habe leider von der Programmierung fast wie überhaupt keine Ahnung deswegen hoffe ich das mir jemand behilflich sein könnte .

Ein Beispiel Sketch was angepasst werden müsste hänge ich mit dran. Vielen vielen Dank im voraus.

Als Netzteil verwende ich ein altes Xbox 360 Netzteil 12v 16 Ampere

Setze Deinen Sketch direkt ins Forum, wenn Du willst, das ihn jemand liest. Benutze dazu Codetags (</> oben links im Editor).
Wenn der Sketch angepasst werden müßte, dann solltest Du das tun.

Was Dir schon gesagt wurde: Wenn Du die LEDs so an 12V anschließt, grillst Du sie und einige andere Bauteile auch.

Gruß Tommy

uwefed: Die WS2812B und der Arduino funktionieren mit 5V nicht mit 12V. Hast Du Katzen oder Hunde? ich würde die Stufe vor dem Betreten beläuchten nicht nachdem Du den Fuß draufgesetzt hast. Grüße Uwe

WS2812B ist 12v veriante. Arduino ist natürlich an den 5v ausgang angeschlossen. Es sind keine Tiere im Haushalt vorhanden. Das mit dem beläuchten vor dem drauf treten finde ich auch besser

WS2812B ist 12v veriante.

:o :o :o :o :o

Datenblatt

HotSystems: Und du bist dir sicher, das das so funktioniert ? Woher soll denn dein US-Sensor wissen, dass du auf Stufe 3 bist und nicht auf Stufe 9 ?

Wenn der Sensor oben oder unten auslöst sollen die Stufen nacheinander angehen.

//Programm läuft mit zwei Ultraschallsensoren HC-SR04 und dem LED-Stripe WS2912B, der jede Farbe darstellen kann
// die Bibliothek NewPing.h wird benötigt, um die HC-SR04 nur mit einer Datenleitung anzuschließen,
// sowohl Senderichtung als auch Empfangsrichtung sind über den gleichen PIN möglich 
#include "FastLED.h"
#include <NewPing.h>
#define PIN 6 // PIN für die Steuerung des LED- Streifens
#define PingOben  8 // PIN für den HC-SR04 Sensor Treppe oben
#define PingUnten  9 // PIN für den HC-SR04 Sensor Treppe unten
#define BreiteOben 85 //max Breite der Treppe in cm oben
#define BreiteUnten 85 //max Breite der Treppe in cm unten
NewPing SR04Oben(PingOben, PingOben, BreiteOben);
NewPing SR04Unten(PingUnten, PingUnten, BreiteUnten);
int     fadezeit = 15; // Wartezeit zwischen dem Schalten der einzelnen LEDs, hier kann das Ein-und Ausblenden der LEDs eingestellt werden
#define ledAnzahl 144  // Anzahl der angeschlossenen LEDs
int nachlaufzeit = 30; // falls ein Sensor nicht richtig ausgelöst wird oder aber über den Sensor hinweggegangen wird, schaltet nach 30 Sekunden die Treppe wieder auf dunkel
CRGB leds[ledAnzahl];
boolean lastoben, lastunten, jetztunten,jetztoben;

int  wandabstand = 60; // alles unterhalb dieses Wertes löst den Ultraschallsensor aus
int    ledNummer = 0; // Nummer der LED, die im Programm angesprochen wird
int k, untenMessung, obenMessung, ent2;

boolean ledsAn = 0, allesAus = 0, ende = 0;

unsigned long startLED, intervall_oben, intervall_unten; 


void setup() {
 FastLED.addLeds<WS2812B, PIN, GRB>(leds, ledAnzahl); //je nach Stripe muss hier RGB oder GRB eingegeben werden sonst stimmen die Farben nicht
 }
void loop() {
 lastoben = jetztoben; // die letzte Messung oben
 lastunten = jetztunten; // die letzte Messung unten
 delay(50); // Wartezeit zwischen zwei Abfragen der Ultraschallsensoren, sollte mindestens 30 Millisekunden sein
 unsigned int unten = SR04Unten.ping();         // Sendet einen Ping und erhält die Ping-Zeit in Microsekunden zurück
 untenMessung = unten / US_ROUNDTRIP_CM;     // errechnet aus den Microsekunden den Abstand in cm
 unsigned int oben = SR04Oben.ping();         // Sendet einen Ping und erhält die Ping-Zeit in Microsekunden zurück
 obenMessung = oben / US_ROUNDTRIP_CM;     // errechnet aus den Microsekunden den Abstand in cm
 untenMessung = unten / US_ROUNDTRIP_CM; // die neue Messung oben
 obenMessung = oben / US_ROUNDTRIP_CM;   // die neue Messung unten
 if(obenMessung  > wandabstand) jetztoben = true; else jetztoben = false;
 if(untenMessung  > wandabstand) jetztunten = true; else jetztunten = false;

 if(untenMessung  > 0 && obenMessung  > 0){     // kleiner oder gleich Null ist Fehlmessung
  if(millis() - startLED > 4000){ // nach einer Aktion wird 4 Sekunden nichts unternommen, ist notwendig, wenn beide Beine registriert werden oder zwei Personen direkt hintereinander
                                  // durch den Sensor gehen dann würde sofort wieder nach dem einschalten ausgeschaltet oder umgekehrt
   if ((untenMessung  < wandabstand) && (lastunten != jetztunten)){ // letzte Messung muß ungleich der aktuellen Messung sein, es wird also nur auf Änderungen reagiert, nicht wenn man z.B. in der Schranke stehen bleibt
    if (ledsAn == 0) { // Abfrage sind die LEDs an wird ausgeschaltet, sind sie aus wird eingeschaltet
     UntenNachOben(255); startLED = millis();ledsAn = !ledsAn; allesAus = 1;} 
     else if (ledsAn == 1) {ObenNachUnten(0); startLED = millis();ledsAn = !ledsAn; allesAus = 0;}
    }
  if ((obenMessung  < wandabstand) && (lastoben != jetztoben)){ // alles was oben gemacht wird wird hier für unten gemacht
   if (ledsAn == 0) {
    ObenNachUnten(255); startLED=millis(); ledsAn=!ledsAn; allesAus = 1;}
    else if (ledsAn == 1) {UntenNachOben(0);startLED = millis();ledsAn=!ledsAn; allesAus = 0;}
  }      
 }
}
 if (millis() - startLED > (nachlaufzeit*1000) && allesAus) { 
  ende = 1; aus(0); // hier wird die Prozedur aus aufgerufen, die LEDs blinken 10mal als Warnung und schalten sich dann aus
 }
}
//----------------------------------------------------------------------
void UntenNachOben(int x){ // LEDs an oder aus von Unten nach Oben
 for(ledNummer = ledAnzahl; ledNummer >= 0; ledNummer--){ 
  dimmen (x, ledNummer, fadezeit);
 }
}
//----------------------------------------------------------------------
void ObenNachUnten(int x){ // LEDs an oder aus von Oben nach Unten
 for(ledNummer = 0; ledNummer < ledAnzahl; ledNummer++){ 
  dimmen (x, ledNummer, fadezeit); 
 }
}
//---------------------------------------------------------------------------
void dimmen(int a, int b,int c){
  if (a == 255) leds[b] = CRGB::Red; // hier können alle Farben eingesetzt werden, z.B. Red, Blue, Yellow, Green, Silver..........es gibt unendlich viele Möglichkeiten aus der FastLED
  else leds[b] = CRGB::Black; // Black bedeutet alle LEDs aus
  if (!ende) FastLED.show();
  delay(c);
}
//----------------------------------------------------------------------
void aus(int x){ // LEDS werden nach 10maligem Blinken ausgeschaltet
  for (int i = 0; i < 20; i++){
  delay(500); 
  if (i == 0 || i ==2 || i == 4 || i == 6 || i == 8 || i ==10 || i == 12 || i == 14 || i ==16 || i == 18){
   for(ledNummer = 0; ledNummer < ledAnzahl; ledNummer++){ // hier wird jede LED hochgedimmt
  dimmen (255, ledNummer, 0); 
   }
  FastLED.show();
 }
 else{
   for(ledNummer = 0; ledNummer < ledAnzahl; ledNummer++){ // hier wird jede LED hochgedimmt
    dimmen (0, ledNummer, 0); 
   }
  FastLED.show();
 }
 }
ledsAn = 0; allesAus = 0; ende = 0;
}

combie: :o :o :o :o :o

Datenblatt

Ich entschuldige mich es handelt sich um den WS2811 Strip

ru-999:
Wenn der Sensor oben oder unten auslöst sollen die Stufen nacheinander angehen.

Und das macht er zur zeit nicht ?

Was macht er denn ?

Kannst du bitte mal etwas mehr Infos geben, wo das Problem liegt !

Und ein Link zu deinen Leds ist auch nötig.

HotSystems: Und das macht er zur zeit nicht ?

Was macht er denn ?

Kannst du bitte mal etwas mehr Infos geben, wo das Problem liegt !

Und ein Link zu deinen Leds ist auch nötig.

Also im momet passiert garnichts, die Stufen bleiben dunkel.

Es handelt sich um den WS2811 strip

Ohne die Sensoren kann ich den stip ohne probleme ansteuern

ru-999: Also im momet passiert garnichts, die Stufen bleiben dunkel.

Tolle Auskunft. Geht es auch ausführlicher ?

Es handelt sich um den WS2811 strip

Das hattest du schon geschrieben, ist aber kein Link. Weißt du was ein Link ist ?

WS2811 LINK

ru-999: Ohne die Sensoren kann ich den stip ohne probleme ansteuern

Ok letzter Versuch:

Was hast du alles probiert ?

Hast du die Sensoren einzeln getestet ?

Hast du das Netzteil richtig angeschlossen ?

a) zum Strip: hast Du ein Datenblatt dazu? Nicht, dass der Datenpin auch ein 12V-Signal erwartet...

b) Hab mal den Code überflogen, aufgefallen ist mir folgendes: 1)dimmen() sorgt bei Dir dafür, dass die LEDs im 15ms-Sekunden Abstand nacheinander angeschaltet werden, ist das so gewollt? 2)

 if(obenMessung  > wandabstand) jetztoben = true; else jetztoben = false;
 if(untenMessung  > wandabstand) jetztunten = true; else jetztunten = false;

-->Wenn der Sensor einen größeren Abstand misst als zur Wand...sicher? Wenn eine Person zwischen Wand und Sensor tritt sollte der Abstand eigentlich kleiner werden...

Ok, der WS2811 kann 12V, aber der Arduino nicht. Du kannst den Fotowiderstand LDR nicht an 12V legen.

Die Ultraschallsensoren funktioniern auch nicht mit 12 V.

Fang mal einfach an. Auslesen der US Sensoren und einschalten von LED an Pin 13. Zuerst den einen dann den anderen. Gleiches mit dem LDR dann ansteuerung der WS2811.

und wenn alles einzeln funktioniert dann zusammenfügen.

Grüße Uwe

uwefed: Ok, der WS2811 kann 12V, aber der Arduino nicht. Du kannst den Fotowiderstand LDR nicht an 12V legen.

Die Ultraschallsensoren funktioniern auch nicht mit 12 V.

Fang mal einfach an. Auslesen der US Sensoren und einschalten von LED an Pin 13. Zuerst den einen dann den anderen. Gleiches mit dem LDR dann ansteuerung der WS2811.

und wenn alles einzeln funktioniert dann zusammenfügen.

Grüße Uwe

Also das die Sensoren und Arduino nicht an die 12v dran kommen ist mir schon klar. Die Sensoren und LDR funktionieren einzel gut. Ich kriege es aber mit dem Sketch nicht zum laufen. Die leds gehen einfach nicht an.

DerLehmi: a) zum Strip: hast Du ein Datenblatt dazu? Nicht, dass der Datenpin auch ein 12V-Signal erwartet...

b) Hab mal den Code überflogen, aufgefallen ist mir folgendes: 1)dimmen() sorgt bei Dir dafür, dass die LEDs im 15ms-Sekunden Abstand nacheinander angeschaltet werden, ist das so gewollt? 2)

 if(obenMessung  > wandabstand) jetztoben = true; else jetztoben = false;
 if(untenMessung  > wandabstand) jetztunten = true; else jetztunten = false;

-->Wenn der Sensor einen größeren Abstand misst als zur Wand...sicher? Wenn eine Person zwischen Wand und Sensor tritt sollte der Abstand eigentlich kleiner werden...

zu a) Strip kann ich ja mit Beispiel FastLED oder Adafrui_NeoPixel test sketch ansteuern

b 1) ist so gewollt b 2) kann ich leider nichts dazu sagen weil ich den fertigen sketch bekommen habe und so gut wie nicht von der programmierung verstehe

HotSystems:
Ok letzter Versuch:

Was hast du alles probiert ?

Hast du die Sensoren einzeln getestet ?

Hast du das Netzteil richtig angeschlossen ?

1.Sensoren einzel getestet funktioniert soweit alles bestens.

2.Netzteil ist auch richt angeschlossen.

Led Strip an 12v

Arduino, Sensoren an 5v

Mit FastLED sketch ohne die Sensoren funktionieren die LEDS kann auch jeden Pixel ansteuern.

Mit dem sketch den ich gepostet habe läuft es aber leider nicht.

ru-999: zu a) Strip kann ich ja mit Beispiel FastLED oder Adafrui_NeoPixel test sketch ansteuern

b 2) kann ich leider nichts dazu sagen weil ich den fertigen sketch bekommen habe und so gut wie nicht von der programmierung verstehe

Ich hatte verstanden, den Sketch hast du selbst geschrieben.

Ok, dann solltest du die Basics lernen und den Sketch selbst schreiben. Stück für Stück aus dem Beispielsketch aufbauen. Daraus lernst du und wir können dir helfen. Aber einen kopierten Sketch mal eben anpassen, macht hier keiner gern.

Ok, evtl. kommt doch noch einer und baut ihn dir um.