Adressierung von LED Strips (WS2812B) mit dem Arduino

Adressierung von LED Strips (WS2812B) mit dem Arduino - Control-LED

In diesem Tutorial zeige ich dir, wie du LED Strips einfach mit der NEOPIXEL Library von Adafruit adressieren kannst.
Du benötigst dafür einen Arduino,einen LED Streifen und einen 300-500 Ohm Widerstand. Auf dem LED Streifen ist ein Chip integriert, durch den die LEDs mit nur einer Datenleitung adressierbar sind.

Mit Hilfe der Adafruit Neopixel library ist das Programmieren der LED Strips sehr einfach.

Im folgendem, findest du eine Anleitung, wie du die LED Strips anschließen musst und wie du das Programm einstellst um schöne Farbfades anzuschauen.

 

1. LED Strip an den Arduino anschließen.

 

►Die Datenleitung (DIN) mit einem 300-500 Ohm Widerstand mit D6 des Arduino verbinden.

►Das Netzteil (5V) mit +5V(Arduino + LED Strip) und GND (Arduino + LED Strip) verbinden. (Je nach Länge des Strips muss ein stärkeres Netzteil verwendet werden)

►Der 5V Anschluss des Arduino kann ebenfalls für ganz kurze Ketten (<500mA) verwendet werden. Beachte eine LED in weißem Zustand verbraucht ca. 60mA.

►Bei längeren Ketten empfiehlt sich ebenfalls ein großer Kondensator an dem Netzteil, weil die Spannung bei längeren Ketten am Ende einbricht und die Farben sich dadurch verändern.

LED Strip Arduino anschließen

Beachte das eine LED bis zu 60mA benötigt.
 

 

 

2. Arduino programmieren:

 

►Lade den Sketch im Anhang herunter.

►Entpacke die Dateien led_strip_anzeige.ino und neopixel_fade_sketch.ino.

►Öffne die Dateien.

►Downloade in der Arduino IDE die Neopixel library. Die library befindet sich unter den Reiter
Sketch->Bibliothek einbinden->Bibliothek verwalten->Suche: Neopixel library

 

Arduino Neopixel library

 

►Uploade den Sketch auf den Arduino.

 

Lese das nächste Kapitel "3. Funktion des Sketches" um den Code anzupassen.

 

3. Funktion des Sketches

 

►Schau dir das Funktionsdiagramm void loop an.


♦Zuerst wird die Anzahl der Fades eingestellt. Das bedeutet, das ein Farbverlauf zwischen zwei Farben entsteht.
Die Farben werden als RGB Werte gespeichert.

Funktionsdiagramm Fade LED

 

Die Farbwerte werden im array "led_color_soll" über 3 for-Schleifen aufgerufen und anschließend in der Funktion "led_strip_anzeige" eingestellt . 
In der Funktion "led_strip_anzeige" werden die "led_color_soll" Werte mit den "led_color_ist" Werten verglichen und dementsprechend um 1 erhöht oder gesenkt. Die neuen Farbwerte werden daraufhin über die Neopixel library auf den LED Strip übertragen und das ganze wiederholt sich, bis alle Soll Werte erreicht sind.

 

Funktionsdiagramm Anzahl Fades

Die Farben werden als RGB Werte gespeichert. Dafür werden Werte zwischen 0-255 vergeben. Damit werden die RGB Farben gemischt und Zwischenfarben entstehen. Das nächste Bild zeigt die Mischzusammensetzungen der Farben.

 

RGB Farben

Jeder Farvwechsel (RGB (0,255,0) zu RGB (0,255,255)) ist ein Fade.
Weiterhin wird die Anzahl der LEDS in einer Variablen deklariert, sowie ein Variablenspeicher "farbwerte" für die späteren Vergleichswerte.

 

3.1 Neopixel library einstellen:

 

Die Adafruit_Neopixel library in der Arduino IDE unter ->Sketch->Bibliothek einbinden->Bibliothek verwalten suchen und downloaden. Sie wird mit dem Befehl #include Adafruit_NeoPixel.h in Zeile 1 importiert.

#include Adafruit_NeoPixel.h 
#define PIN 6 //DatenPin D6 am Arduino 
#define num_pixel 6 //Anzahl der LEDs 

 

3.2 Farbwerte einstellen

#define n_fades 6 //Anzahl der Fadevorgäne 
#define n_leds 6 //Anzahl der LEDs 
#define farbwerte 3 //Anzahl der Farbwerte 

int led_color_soll[n_leds][n_fades][farbwerte] = {{{0,0,255}, {255,0,100}, {255,0,0}, {255,255,0}, {0,255,0}, {0,255,255}}, //LED1
                                                  {{255,0,0}, {255,255,0}, {0,255,0}, {0,255,255}, {0,0,255}, {255,0,255}}, //LED2
                                                  {{255,255,0}, {0,255,0}, {0,255,255}, {0,0,255}, {255,0,255}, {255,0,0}}, //LED3
                                                  {{0,255,0}, {0,255,255}, {0,0,255}, {255,0,255}, {255,0,0}, {255,255,0}}, //LED4
                                                  {{0,255,255}, {0,0,255}, {255,0,255}, {255,0,0}, {255,255,0}, {0,255,0}}};//LED5
                                                                                              

In Array "led_color_soll" kannst du die Farbwerte (0-255) eintragen zwischen den gefadet werden soll.
Davor musst du n_fades, n_leds ebenfalls eintragen, damit die Listengröße bekannt ist.

Trage in der Liste "led_color_soll" die Farben ein.

 

Der Befehl Adafruit_NeoPixel strip = Adafruit_NeoPixel(num_pixel, PIN, NEO_GRB + NEO_KHZ800); stellt die Datensignale ein.
Dabei beschreibt NEO_GRB die Datenfolge des Bitstream und NEO_KHZ800 die Geschwindigkeit des Bitstream.

 

3.3 void_loop:

void loop() {
  for (int fade =0; fade< n_fades; fade++){                              
   for (int i = 0; i<255;i++) {                     
      for (int led =0; led

Es werden immer alle 3 Farben an die Funktion "led_strip_anzeige" übergeben. Sobald eine Fade durchgeführt wurde, kann durch das delay in Zeile 38 eine kurze Pause zwischen den Fades eingestellt werden.
In Zeile 35 werden der Bitstream mit Befehl strip.show() aus dem Speicher geladen und auf die LEDs übertragen.

 

3.4 Fade-Funktion "led_strip_anzeige"

int vergleiche_ist_soll_wert(int ist_wert, int soll_wert) {                 
    int differenz = soll_wert - ist_wert;   
    return differenz;                                                      
}
int neuer_ist_wert(int differenz, int wert ) {                              
                                                                      
    if (differenz > 0) {                                                                                                                 
       wert += 1;                                     
    }
    else if (differenz < 0) {               
       wert -= 1;                                       
    }
    else if(differenz == 0) {                           
       wert = wert;
    }
    
  if ( wert > 255) {                                   
     wert = 255;
  } 
  else if (wert < 0) {
     wert = 0;
  }
  int neuer_wert_ist = wert;
  return neuer_wert_ist;                                            

}
int led_strip_anzeige(int color[3], int led) {

int soll_farbwert_rot = color[0];
int soll_farbwert_gruen = color[1];
int soll_farbwert_blau = color[2];

int differenz_rot = vergleiche_ist_soll_wert(led_color_ist[led][0], soll_farbwert_rot);          
int differenz_gruen = vergleiche_ist_soll_wert(led_color_ist[led][1], soll_farbwert_gruen); 
int differenz_blau = vergleiche_ist_soll_wert(led_color_ist[led][2], soll_farbwert_blau);
 
int neuer_ist_wert_rot = neuer_ist_wert(differenz_rot, led_color_ist[led][0]);  
int neuer_ist_wert_gruen = neuer_ist_wert(differenz_gruen, led_color_ist[led][1]);
int neuer_ist_wert_blau = neuer_ist_wert(differenz_blau, led_color_ist[led][2]);

led_color_ist[led][0] = neuer_ist_wert_rot;                             
led_color_ist[led][1] = neuer_ist_wert_gruen;
led_color_ist[led][2] = neuer_ist_wert_blau;

strip.setPixelColor(led , led_color_ist[led][0], led_color_ist[led][1], led_color_ist[led][2]);

►Die Funktion "led_strip_anzeige" überprüft den Soll-Wert der Farbe mit dem aktuellen Ist-Wert. Die Differenz dafür wird in "vergleiche_ist_soll_wert"(Zeile 2) berechnet. Je nach Ergebnis wird der neue Ist-Wert um 1 kleiner (Zeile 11) oder um 1 größer (Zeile 8), ansonsten bleibt er gleich. Die nachfolgende if Abfrage (Zeile 17-Zeile 22) dient zur Überprüfung, damit der Wert nicht größer als 255 bzw. kleiner als 0 wird.

►Der neue Wert wird in "led_color_ist" eingetragen und mit der Neopixel Funktion strip.setPixelColor() in den Speicher für die Datenleitung gesetzt.

►Dieser Vorgang wiederholt sich für alle Werte, die in led_color_soll eingetragen werden.

 

Es gibt sicher noch elegantere Lösungen. Damit kannst du jedoch schon schöne Effekte programmieren!

 

Bauteilliste:

Bauteil Beschreibung Link
RGB LED Streifen WS2812B LED Streifen amazon* affiliate
Bestellen
1x Arduino Nano Entwicklerboard mit CH340 Chip Atmega328P amazon* affiliate
Bestellen
300-500Ohm Widerstand Widerstand 1/4W  
Schaltnetzteil 5V, 2A, 10W amazon* affiliate
Bestellen
Elektroausrüstung Kabel, Stecker, Lochrasterplatine