Eine WS2812B RGB LED Stripe ist meist eine flexible, Aneinanderreihung von RGB LEDs.
Diese LEDs können einzeln adressiert werden. D.h. jede LED in dieser “Kette” kann eine definierbare Farbe oder Zustand (AN / AUS) einnehmen.
Des Weiteren kann man zwischen Wasserfest (waterprof) und zwei verschiedenen Platinenfarben (weiß, schwarz) wählen.
Bezug
Die WS2812B RGB LED Stripes, gibt es in diversen Längen zu kaufen. Ich habe mir für dieses Tutorial 1 m bei ebay.de* besorgt.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Technische Daten des WS2812B RGB LED Stripe
Die technischen Daten für ein solches LED Stripe sind unterschiedlich,
denn je nach Länge und somit mit steigender bzw. fallender Anzahl der LEDs steigt auch der Stromverbrauch und die Stromaufnahme.
Folgende Daten gelten für eine 1 m WS2812B RGB LED Stripe mit 30 LEDs:
- Breite 11 mm
- LED Typ 5050 SMD
- Betriebsspannung 5V
- Betriebstemperatur -20 °C bis +45 °C
Das mir vorliegende Model ist NICHT Wasserfest. Es gibt diese LED Stripes auch in Wasserfest, diese sind dann jedoch deutlich teurer.
Anschluss & Schaltung
Als Erstes wollen wir die Schaltung auf einem Breadboard aufbauen, dieses hat den Vorteil das man schnell zu einem
Ergebnis kommt und noch Änderungen vorgenommen werden können.
Benötigte Bauelemente
Für die nachfolgende Schaltung wird benötigt:
- 5x Breadboardkabel,
- 2x Krokoklemmen,
- 1x 220 Ohm Widerstand,
- 1x 1000µF 6,3V Kondensator,
- 1x Arduino UNO,
- 1x WS2812B RGB LED Stripe,
- 1x USB Anschlußkabel Typ A-B,
- 1x Netzteil 5V mit min. 1A
Quellcode
Hier nun ein kleines, einfaches Beispiel wie man über alle LEDs iteriert und diese in der Farbe Weiß aufleuchten lässt. Man kann theoretisch jede RGB Farbe darstellen.
Möchte man eine LED “ausschalten” so muss man nur dieser LED die Farbe Schwarz zuordnen.
#include <Adafruit_NeoPixel.h> //Bibliothek für den betrieb des WS2812B RGB Stripe #define NUM_PIXELS 28 //Anzahl der RGS im Stripe (Zähler beginnt bei 0) #define PIN 6 //RGB LED Chip auf dem digitalen PIN D6 //Einrichten des Objektes Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_PIXELS, PIN, NEO_GRB + NEO_KHZ800); //Pause zwischen den wechseln der Pixel int pause = 125; void setup() { //Begin der Kommunikation pixels.begin(); } void loop() { //Schleife über die RGB Pixel des Stripe for(int i=0;i<NUM_PIXELS;i++){ //Setzen der Farbe weiß auf jeden Pixel pixels.setPixelColor(i, pixels.Color(255,255,255)); //RGB Stripe aktualisieren pixels.show(); //kleine Pause delay(pause); //RGB Pixel wieder ausschalten (Farbe Schwarz setzen) pixels.setPixelColor(i, pixels.Color(0,0,0)); } }
Video
Fazit & Ausblick
Den RGB Stripe habe ich günstig über einen Anbieter bei ebay.de gekauft. Und die erste LED war defekt, das hatte etwas Arbeit gemacht es herauszufinden, um dann doch noch den Stripe zu betreiben. Danach hatte jedoch alles reibungslos geklappt.
Als Nächstes werde ich nun ein kleines Projekt mit dem RGB Stripe durchführen. Welches die nächsten Tage auf diesem Blog veröffentlicht wird.
To be contrinue…..
Hallo Stefan,
ich habe einen Arduino Uno und 10 ws2812 geschenkt bekommen. Habe auch schon einige Beispiele ausbropiert und sie funktionieren. Nun habe ich mir überlegt,was mache ich damit. Ich habe drei Solar LED Kugeln im Garten, die aber nicht mehr so richtig funktionieren, die möchte ich damit bestücken. Verdrahtung ist kein Proplem, aber ich habe noch keinen Ansatz für ein Programm gefunden. Sie sollen in drei Farben leuchten und dann in langsamen Schritten die Farben gegenseitig ändern (Rot langsam gegen 0 und langsam hoch in Blau, Grün gegen Rot , Blau gegen Grün im zwei Minuten Takt. Wie müsste das Programm aussehen. Habe schon die diversesten Programme kombieniert, komme aber zu keinem Ergebniss. Bin eben Anfänger.
Vielen Dank
Gerald
Hi
Da die WS2812(b) recht viel Strom fressen, wird die Versorgung mit dem Leuchten-Akku wohl eher keinen langen Spielspaß geben.
Zum Programm:
Du kannst ja jedem Pixel sagen, in welcher Farbe Er leuchten soll.
Du möchtest, daß dieser Ablauf sich endlos wiederholt.
Das ‘riecht’ nach Schrittkette/endlicher Automat/state machine. (alle 3 sollten sich finden lassen)
Unterm Strich hast Du verschiedene Status (ist ebenfalls die Mehrzahl) und wartest eher die ganze Zeit, daß Du zum Nächsten springen darfst:
//Library für Neopixel einbinden
void setup() {
// Neopixel-Setup nach Deren Beispielen
}
void loop() {
static uint32_t lastmillis = 0; //Uhrzeit der letzten Aktion
static uint16_t status = 0; //aktueller Status
uint32_t aktmillis = millis(); //die aktuelle ‘Uhrzeit’
const uint32_t waitmillis = 200; //Wartezeit zwischen den Status
if (aktmillis – lastmillis >= waitmillis) {
//die Wartezeit ist vorbei, also zum nächsten Schritt
lastmillis = aktmillis; //die Uhrzeit dieser Aktion merken
bool ledhaschanged = false;
switch (status) {
case 0://änder irgendetwas
ledhaschanged = true;
break;
case 1://änder irgendetwas
ledhaschanged = true;
break;
case 2://änder irgendetwas
ledhaschanged = true;
break;
case 3://änder irgendetwas
ledhaschanged = true;
status = 0; //wieder zurück zum Anfang
break;
default://hier kommen wir normal NIE hin
status = 0;
break;
}
if (ledhaschanged) {
//stripe neu anzeigen lassen – was in der Art stripe.show();
ledhaschanged = false;
}
}
//Hier kannst Du noch weitere Funktionalität einbringen, achte darauf, NICHT blockierend zu programmieren
//also kein delay() für Wartezeiten, benutze aktmillis.
//Zum Merken der jeweils letzten Aktion brauchst Du jeweils eine
//’lastmillis’-Variable (klar mit anderm Namen) und eine Wartezeit
//oben ist Das die waitmillis.
//Dinge, Die sich NIE ändern, als const deklarieren – kann der Kompiler direkt im Code einbinden und braucht keinen teuren Variablen-Speicher
//Dinge, Die Du auch beim nächsten loop()-Durchlauf noch wissen willst
//als static declarieren – diese Variablen verbleiben im Speicher, alle Anderen
//z.B. aktmillis, wird beim Ende von loop() zerstört.
//Für Arduino-Fragen dürfte aber ein Arduino-Forum besser geeignet sein, als ein Blog
//Im Forum wird’s gerne gesehen, von wo Du kommst (also Link zum Blog), ob hier ein Link zu Deinem Foren-Thread gerne gesehen wird – ich denke,
//spricht Nichts dagegen und führt andere Hilfesuchende ebenfalsl zum Ziel.
//und wenn’s doch nicht gerne gesehen ist, löscht der Blog(g)er den Link halt, fertsch.
}
Compiliert bei mir (Arduino-IDE 1.8.8, portable) mit den üblichen Warnungen zum ESP01s (Generic ESP8266 Module) – mit Dem spiele ich gerade 🙂
Beim Uno sollte keine Warnung ect.pp. auftauchen.
Der Sketch macht SO noch Nichts – in den verschiedenen Status steht ja Nichts drin, etwas Spielen musst Du damit halt noch selber 😉
Ich bin absoluter Anfänger und habe eine Frage, kann man mit dem Arduino und einem WS2812 Led Streifen 15 Led´s von 1-15 nacheinander anschalten und sterben sollen, solange die Spannung abgeschaltet wird. Ich brauche es für eine Leuchtreklame.
Für eure Hilfe bin ich sehr Dankbar
Liebe Grüße Dietmar
Hi,
das ist recht einfach durch die gegebene Anzahl von 15 LEDs, kommt man damit sogar mit nur einem digitalen Pin aus.
Ich werde mich dem einfach mal annehmen und einen kleinen Beitrag dazu verfassen.
Gruß,
Stefan Draeger