WS2812B mit Arduino Nano Farben passen nicht

Guten Tag,
ich steuere einen LED-Streifen WS2812B mit einem Arduino Nano an.
Ich habe mir ein 5V 3A Netzteil für sie Stromversorgung des LED-Streifen gekauft.
Den LED-Streifen habe ich auf 10 LEDs gekürzt.
Das Din-Signal kommt vom Arduino von Pin D3 und davor habe ich einen 220 Ohm Widerstand geschaltet. Außerdem ist der Ground des Arduino mit dem Ground des LED-Streifen verbunden.
Jetzt habe ich das Problem, dass wenn ich alle LEDs gleichzeitig anschalten möchte, passen die Farben nicht. Ich möchte zum Beispiel alle auf Rot haben und nur die ersten zwei sind Rot und der Rest hat andere Farben.
Wenn ich jede einzeln ansteuern möchte funktioniert das.
Auch das nacheinander aus und wieder an schalten funktioniert allerdings nur mit Rot oder Blau.
Wenn ich das mit Weiß machen möchte, gehen nur die letzten beiden an.(Zeitintervall passt)
Stromversorgung müsste eigentlich ausreichen (3A für 10 LEDs). Vielleicht liegt es am Querschnitt.
Bin für jede Hilfe dankbar
MFG

#include <FastLED.h>

#define DATA_PIN 3
#define NUM_LEDS 10
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

void setup() {
  // put your setup code here, to run once:
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(100);
}

void loop() {
  // put your main code here, to run repeatedly:
   // Turn the first led red for 1 second
      //leds[0] = CRGB::Red;
      //leds[1] = CRGB::Red;
      //leds[2] = CRGB::Red;
      //leds[3] = CRGB::Red;
      //leds[4] = CRGB::Red;
      //leds[5] = CRGB::Red;
      //leds[6] = CRGB::Red;
      //leds[7] = CRGB::Red;
      //leds[8] = CRGB::Red;
      //leds[9] = CRGB::Red;
      FastLED.show();
      //delay(1000);
      
      // Set the first led back to black for 1 second
      //leds[0] = CRGB::Black;
      //leds[1] = CRGB::Black;
      //leds[2] = CRGB::Black;
      //leds[3] = CRGB::Black;
      //leds[4] = CRGB::Black;
      //leds[5] = CRGB::Black;
      //leds[6] = CRGB::Black;
      //leds[7] = CRGB::Black;
      //leds[8] = CRGB::Black;
      //leds[9] = CRGB::Black;
      //FastLED.show();
      //delay(1000);
       for(int dot = 0; dot < NUM_LEDS; dot++) 
       { 
            leds[dot] = CRGB::Blue;
            FastLED.show();
            delay(100);
            // clear this led for the next time around the loop
            leds[dot] = CRGB::Black;
            FastLED.show();
            delay(100);
        }
}

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Normalerweise ist der Grund von nicht richtigen Farben ein zu schwaches Netzteil oder eine zu langer LED-Streifen mit zu wenig Einspeisungen. Bei einer niedrigeren Versorgungsspannung leuchten die Blauen LED nicht mehr.
Das schein mir bei Dir nicht zuzutreffen.
Ich erklähre mir Dein Problem nicht.
Kannst Du und mal einige Fotos mit den verschiedenen Farben zeigen?

Grüße Uwe

1 Like

Wenn Du alle LED´s über einen Pin ansteuerst, 10 LED´s brauchen unterschiedliche Spannung, zwischen 1,5 und 3,5 Volt, dann sollte Dir klar sein, das 5 Volt nicht ausreichend sind.

Schau mal nach, wie WS2812B LEDs funktionieren

Oki da war ich dann mit meiner Antwort doch zu schnell...


Beim ersten Bild habe ich nur die letzten beiden LEDs in Rot angesteuert und beim zweiten alle zusammen.
Müssteb eigentlich alle Rot sein.
Jede LED einzeln funktioniert. Ab drei zusammen nicht mehr.

Führst du den ganzen Strom über das Steckboard? Mach mal dicht an den Anfang des Stripes ein 1000µF zur Stabilisierung

Die Komunikation der WS2812B ist folgende:

Zuerst ein langer HIGH Impuls (>50µS) um die Komunikation zu starten und dann 24 bit für die 3 Farben (3x8 bit) die erste Ws2812 nimmt sich die ersten 24 bit und schickt alle weiteren an die nächste weiter. bei 10 WS2812 werden dann 240 bit geschickt.

Ich habe 2 Ideen:
versuch es mal mit der NEOPIXEL Bibliothek.

Hast Du LED mit 4 Farben (RGB+ weiss) Das würde falsche Farben erklähren aber nicht für 3 LED hintereinander und auch nicht daß einzeln angesteuert die farben stimmen. Auch wie die WS2812 auf Deinem Foto ausschauen scheinen es mir die RGB Version zu sein.

Schick uns bitte noch ein Foto vom Nano auf dem Breadbord.

Grüße Uwe

Mir fehlen da die 5V für den NANO.

Grüße Uwe

Den Nano versorge ich über usb vom pc.
Habe jetzt auch mal die Bibliothek Adafruit_NeoPixel ausprobiert, habe dort aber das gleiche Problem.

Wenn ich jetzt mit adafruit eine einzelne LED ansteuern möchte und bei strip.Color(100, 0, 0) nur den Wert für Rot ändere, dann habe ich von ca (80, 0, 0) bis ca (200, 0, 0) rot und außerhalb eine andere Farbe. Und die Farbe Weiß bekomme ich z.B. garnicht.

Bis 8 WS2812 können über USB versorgt werden mit allen LEDs eingeschaltet. Versuch mal mit dem verwendeten Streifen den Streifen vom NANO zu versorgen. Bei einer Farbe gehen auch bis zu 32 WS2812.
Versuch mal das. Ändert sich da was?

dann
Versuch mal mit einem anderen WS2812 Streifen, am besten von einer anderen Lieferung/Verhäufer.
Zur Not mit einem anderen Teil vom der gleichen Lieferung.

Grüße Uwe

Ich werde mir mal einen neuen LED-Streifen besorgen und dann nochmal berichten

Kleiner Nachtrag: wenn ich 4 LEDs ansteuer passt es, aber sobald es 5 sind nicht mehr




Gib uns mal die beiden Sketch und nicht Fotos davon.

Also wenn jede LED allein genau das tut, was sie soll, und die Probleme erst auftauchen, sobald eine gewisse Anzahl LEDs ins Spiel kommen, kann es (aus meiner Erfahrung) doch nur mit der Spannungsversorgung zusammenhängen?

Also Netzteil, Kabellänge oder der Aufbau mit diesen JumperKabeln auf dem Breadboard..

Kleines Testprogramm, um nur die Pixel einzeln zu testen:

#include <FastLED.h>

// How many leds in your strip?
#define NUM_LEDS 10

// For led chips like WS2812, which have a data line, ground, and power, you just
// need to define DATA_PIN.  
#define DATA_PIN 3


// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() { 
    // Uncomment/edit one of the following lines for your leds arrangement.
    FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
    // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
    

}

void loop() { 
  for (uint8_t test = 0; test < NUM_LEDS; test++) {
    leds[test] = CRGB::Red;
    FastLED.show();
    delay(500);
    leds[test] = CRGB::Green;
    FastLED.show();
    delay(500);
    leds[test] = CRGB::Blue;
    FastLED.show();
    delay(500);
    leds[test] = CRGB::White;
    FastLED.show();
    delay(500);
    leds[test] = CRGB::Black;
    FastLED.show();
    delay(500);
  }
}

Wenn hier schon eine einzelne LED nicht mitspielt und eine Farbe falsch darstellt, kann es auch sein, daß der WS281..-Controller in einer LED (kann auch die eins vor der vermeintlich "defekten" LED sein) den Hau hat..

Das Testprogramm funktioniert nicht. Da leuchtet nur die letzte LED so wie es sein soll.
Morgen kommt ein neuer streifen, den werde ich dann nochmal Testen. An der Stromversorgung kann es eigentlich nicht liegen, 3A sollten ja eigentlich für 10 LEDs locker reichen.
Könnte höchsten an der Verdrahtung liegen.

Wie dick sind denn die Drähte zur Versorgung und was für welche sind es?
Also schlecht kontaktierte Dupont-Kabel können da schon Probleme bringen.

Gruß Tommy