LED WS2812 leuchtet von alleine

Hallo zusammen,

ich wollte meiner Mutter eine Freude machen und ihr eine automatische Treppenbeleuchtung mit Bewegungserkennung schenken. Soweit hat das alles auch mit größeren und kleineren Hindernissen funktioniert. Allerdings stehe ich jetzt am Ende vor einem Rätsel bei dem ich eure Hilfe benötige.

Die Treppe hat dafür an jeder Stufe einen LED Streifen (WS2812) und hat einen Abstandssensor (Sharp GP2Y0A02YKOF 20-150cm), welcher die Beleuchtung auslösen soll. Diese geht dann nach einer gewissen Zeit wieder aus. Allerdings ist es so, dass nach einiger Zeit ohne Auslösung die ersten LEDs einzelne Stufen farbig leuchten. Dabei ist sowohl die Anzahl der LEDs, die Stufe als auch die Farbe "zufällig". Dieses Phänomen lässt sich auch durch das Ein- bzw. Ausschalten einer Neonröhre im Haus erzwingen.

Verwendete Hardware:

Schaltplan:
Ich habe die Anzahl der LEDs reduziert und den zweiten Sensor ausgespart. Zudem wusste ich nicht wie der Abstandssensor aussehen müsste, daher habe ich ein IR-Sensor eingezeichnet. Da ich sowas noch nie erstellt habe, hoffe ich, dass dies in Summe so in Ordnung ist.

Vereinfachter Code: (Ich habe abereher das Gefühl, dass das Problem nicht aus dem Code kommt)

#include <FastLED.h>

// Wie viele LEDs gibt es?
#define LEDs_pro_Stufe 56
#define Anz_Stufen 2
CRGB leds[Anz_Stufen][LEDs_pro_Stufe];

//Allgemeine Parameter
#define Leuchtdauer 600
#define MaxHelligkeit 40 // Maximale Leuchtkraft wird beim Wert 255 erreicht
#define DistGrenzeUnten 190
int distUnten;


void setup()
{
  Serial.begin(9600); 
  // Lege die Outputpins am Arduino fest.
  FastLED.addLeds<NEOPIXEL,  40>(leds[ 0], LEDs_pro_Stufe);
  FastLED.addLeds<NEOPIXEL,  41>(leds[ 1], LEDs_pro_Stufe);
}


void loop() {
  distUnten = 0;
  for(int idx = 0; idx < 10; idx++){
    distUnten += analogRead(0);
  }
  distUnten /= 10;

  if(distUnten > DistGrenzeUnten){
    LEDChange(); //Erleuchten Hoch
  }
  delay(100);
}


void LEDChange() {
  // Schleife für die Zustände. Im 1. Durchlauf wird die Treppe erleuchtet und im 2. Durchlauf wieder abgedunkelt
  for (int schalter = 0; schalter < 2; schalter++)
  {
    // Schleife über die einzelnen Stufen
    for (int stufe = 0; stufe < Anz_Stufen - 1; stufe++)
    {      
      // Schleife über die LEDs der Stufe
      for (int aktLed = 0; aktLed < LEDs_pro_Stufe; aktLed++)
      {
        if (schalter == 0){
          leds[stufe][aktLed] = CRGB::Gold;
        }
        else{
          leds[stufe][aktLed] = CRGB::Black;
        }
        leds[stufe][aktLed].fadeLightBy(MaxHelligkeit);
      }
      //Führe den neuen Zustand der LEDs aus
      FastLED.show();
    }
    //Nachdem alles leuchtet, warte hier etwas bis das abdunkeln beginnt
    if (schalter == 0) delay(Leuchtdauer / 10);
  }
}

Hat hier jemand einen Vorschlag, was ich falsch gemacht habe oder was ich ausprobieren kann?
Kann ich vielleicht irgendwas ausmessen um den Fehler einzugrenzen?
Muss noch irgendwo ein Kondensator oder Wiederstand rein?

Vorab vielen Dank für eure Hilfe :slight_smile:

Schreib doch mal, was für einen Sensor du genau verwendest, bitte Link posten.
Ich vermute, deine Leitung zwischen Sensor und Controller ist zu lang und du fängst dir Störungen ein. Oder du nimmst den falschen Pin am Controller.

Hallo HotSystems,

vielen Dank für die schnelle Antwort!

Ich verwende 2x den Sensor GP2Y0A02YKOF von Sharp (https://global.sharp/products/device/lineup/data/pdf/datasheet/gp2y0a02yk_e.pdf). Einer von den beiden ist tatsächlich relativ weit von dem Board entfernt - ich würde um die 5m schätzen. Allerdings wüsste ich nicht, wie ich die Distanz verringern soll, da die Positionen recht fix sind.

Aber um Missverständnisse zu vermeiden: Im Fehlverhalten leuchten nur einzelne LEDs. Es ist also nicht so, dass der Sensor durch eine Schwankung auslösen würde und die ganze Treppe leuchtet. Sprich der Code zum beleuchten der Treppe wird nicht ausgeführt.

Ok, das deutet auf Spannungsproblemen an den Leds hin.
Da entstehen vermutlich Spannungsschwankungen oder Einbrüche an den Leds.
Das kannst du prüfen oder verhindern, wenn du Elkos (1000yF) jeweils an die Anschlüsse der leds lötest.

Zum Sketch, ich sehe nicht, wo die Sensoren abgefragt werden.

Und da ist wohl etwas falsch eingetragen.

1 Like

Vielen vielen Dank! Dann werde ich mir die Woche mal Elkos holen und das ausporbieren.
Ich melde mich dann mit dem Ergebnis.

Den Sonsor frage ich 10x ab um addiere die Ergebnisse. Daher teile ich den Wert dann wieder durch 10 um einen Mittelwert zu erhalten, welcher möglichst Schwankungsarm ist.

  distUnten = 0;
  for(int idx = 0; idx < 10; idx++){
    distUnten += analogRead(0);
  }
  distUnten /= 10;

Ok, das mit "analogRead(0)" habe ich tatsächlich übersehen.
Der Lesbarkeit wegen, schreibe ich da auch (A0) rein.

Das könnte man auch per Hardware Tiefpass erledigen.
Macht aber keinen Unterschied bei deinem Problem.

Ja, ich sehe bei dir auch EM Einsteuungen.
Gerade die Neonröhren schnattern gerne in Verstärker und ihre Radios. Über die Luft und auch über Kabel.

Abhilfe?
Abgeschirmte Leitungen, vielleicht.
Und die genannten Stützkondensatoren.
evtl die weit verbreiteten Ferrit Kerne. Die gibts zum Kabel durchschieben, und auch als Klapp Kerne. Beispiel: Klapp-Ferritkern-Sortiment

Das ist ein Zeichen, daß die Schaltung störanfällig ist.

Loge mal die Sensorwerte mit der Seriellen Schnittstelle.
Wie dick sind die Kabel zwischen Netzteil und LED-Streifen.

Hast Du an der 230V Seite einen Netzfilter?

5V an Vin des Mega ist definitiv zu wenig. Vin braucht mindestens 7V. Du kannst 5V am 5V Pin anschließen. (Dann mußt Du aber zum Hochladen des Sketches einem USB Kabel verwenden wo die 5V Ader unterbrochen wurde.

GND mit Erde verbinden; Abgeschirmte Kabel für Signalverbindung Sensor verwenden.

Dein Wort in Gottes Ohr.

Bekommst Du mit dem geposteten Sketch das Problem?

Grüße Uwe

Ist das noch ein alte Neonröhren-Starter für alte Neonröhren. ??

oder

Sind da schon Moderne LED-Neonröhren mit speziellen Modul drin.

Vielleicht liegt es auch am Starter (wenn alte Röhren). Hatte ein Freund von mir damals ein ähnliches Problem. Den Starter ausgetauschtt, und der Stress war weg. Allerdings hat die ALTE Neonröhre vorher geflackt wie doll bis sie endlich lief.

Gruß

Pucki

Die Verbindung zwischen µC und LED-Streifen ist hochohmig, wenn ich mich richtig entsinne fließt 1 µA, weshalb Adafruit kurze Leitungen empfiehlt.

In einem anderen Thema waren, wie bereits erwähnt, abgeschirmte Leitungen hilfreich. Schirm einseitig an GND anschließen.

Die Datenblätter der WS281x nennen eine maximale Distanz (Kabellänge) von 5 bis 10m zwischen den Controllern.

Das gilt für Audio-signale und Brummschleifen (mehrere GND in verschiedenen Kabeln)
Wenn man die Abschirmung als GND Leitung für einen Sensor verwendet funktioniert das auch.
Grüße Uwe

Ich kenne mich mit den Neo-Pixeln nicht so mega aus.

Gibt es eine Lösung die zu Reseten. ???

Also das man den Datenstrom unterbricht und dann komplett neu sendet. VIELLEICHT hilft so ein Reset dann aus damit die sich wieder fangen.

Ist aber nur so eine Idee.

Gruß

Pucki

Das kannst du ändern!

Es ist kein fortlaufender Datenstrom. Wenn die WS2812b ihre Daten erhalten hat, leuchten ihre LEDs (RGB) solange in ihrer Helligkeit, bis neue Daten kommen.

Ein Reset erfolgt somit automatisch beim erneuten senden der Daten.

Das Problem besteht bei der Störung der Daten. Wenn da falsche ‘Bits‘ interpretiert werden, kommen komische Farben und Muster zustande.

Wenn die ersten Pixel flackernd leuchten, obwohl sie eigentlich dunkel sein sollten, kommt das oft davon, das die Datenleitung irgendwelche ‘Bits‘ empfängt, die gar nicht gesendet werden. Daher der Tipp mit der Schirmmung, um die Störung durch Funk zu minimieren.

Nicht ausgeschlossen ist, dass das China Netzteil den Elektrosmog herstellt, und sogar über die Versorgung verteilt.

Ohne Reset ist das die Lösung. Du sendest die aktuelle Animation und überschreibst damit Störungen. Das gilt dann auch für dunkle LEDs.

Wenn Du Zeiten mit millis() anstelle delay realisierst, ist das auch problemlos möglich.

Du packst damit das Problem allerdings nicht an der Wurzel, es ist nur eine kosmetische Reparatur.

Kann sein, aber ich halte immer noch den Starter der Neonröhre für den Schuldigen. Die alten Teile sind URALT-Technik. Heutzutage bekommt modernste Elektronik die Kriese wenn es zu "Netzhusten" kommt.

Musste deshalb in der Firma die wichtigsten PC alle mit USV ausstatten weil unser Versorger schon mal die Lampen flackern lies.

Gruß

Pucki

Nein, denn auch ohne dies tritt der Fehler auf.

Dies kannst du im Eingangspost nachlesen.
Klar, dass diese Störungen auch das Problem auslösen, aber nicht nur dadurch.
Somit sind auch andere Maßnahmen nötig, wie z.B. die genannten Abschirmungen usw.

Formulieren wir doch einfach "... ich halte immer noch den Starter der Neonröhre für den Mitschuldigen."

Auch Motoren beispielsweise in Staubsaugern können intensive elektromagnetische Wellen aussenden.

Bei einer nicht sicherheitsrelevanten Spaßbeleuchtung kann man aber locker an die Sache rangehen. Ich empfehle wissenbasiertes Probieren :slightly_smiling_face:

Ok, und würdest du dann den Motor soweit entstören, dass die hier besagten Leds nicht mehr beeinflusst werden ?

Genau und dazu gehören erstmal die genannten Dinge, die eine Beeinflussung verhindern, ohne dass Leuchtstoffröhren oder Staubsauger o.ä. eingeschaltet werden. Da diese ja nur on Top eine Beeinflussung erzeugen.

Hier war ja seit gestern noch richtig was los :smiley:
Deswegen vorab nochmals ein dickes Dankeschön für euren ganzen Input!

Ich komme zwar leider frühestens Freitag dazu eure Tipps und Ratschläge umzusetzen, aber ich versuche schon mal auf alles hier einzugehen.

@combie: Über den Begriff Ferritkern bin ich bei meiner Suche auch schon mal gestolpert und bin da auf Anhieb nicht wirklich schlau draus geworden. Weder auf welche Kenngrößen man da ggf. achten muss, noch um welche Kabel ich das Teil packe. Aber dann setze ich mich nochmal dran und lese mich da ein. Jetzt weiß ich ja immerhin, dass ich es nicht "unnötig" lese.

@uwefed: Es müssten 1,5mm² Kabel sein. Kann das aber ehrlich gesagt nicht mehr mit Sicherheit sagen, da ich die vor über einem Jahr gekauft habe.
Ein Netzfilter? Das sagt mir nichts und ein kurzer Blick mit Google lässt mich ein recht deutliches "Nein" vermuten.
Das umstecken von Vin auf 5V wird dann meine erste Tat. Zum Hochladen eines neuen Sketches entferne ich ohnehin immer die Kabel zur Stromversorgung des Boards. Hatte ganz am Anfang mal gelesen, dass der Zeitgleiche Anschluss des USB-Kabel den ganzen Spaß grillen könnte.
Ja, auch mit dem Sketch bekomme ich die Probleme. Das aÁusdünnen des Codes und weitere Testläufe waren mein erster Ansatz, als ich noch nicht wusste, dass ich den Fehler mit der Neonröhre auch reproduzieren kann.

@pucki007: Muss ich ehrlich gesagt grade raten, da ich mich da auch nicht auskenne. Ich würde aber vermuten, dass es ein alter Starter ist.

@agmue: Das regelmäßige Senden an die LEDs, dass diese in schwarz "leuchten" sollen, ist aktuell die Übergangslösung. Allerdings fand ich das an sich sehr unbefriedigend. Hab das ganze Projekt für mich auch als Chance gesehen etwas über die Materie zu lernen. Ich war und bin halt nur erschrocken, wie viel es zu lernen gibt und wie wenig ich bisher weiß :smiley: