WS2812 LEDs – in Arbeit

Wie bringe ich „LED Pixel“, hier WS2812 LEDs (vergleichbar mit Neopixel LEDs), mit dem Arduino zum leuchten?

Was sind LED Pixel?

Beschreibung, Vorteile, Bauformen, Video, Links zum Shop

Infos hier:

http://playground.boxtec.ch/doku.php/led/ledpixel_guide?s[]=ws2811

http://playground.boxtec.ch/doku.php/led/ledpixel_guide?s[]=ws2811#verweisereferenzen

https://learn.adafruit.com/adafruit-neopixel-uberguide

 

Programmierung

Eine 8×8 Pixel-Matrix soll mit einem Arduino angesteuert werden. Zunächst verzichten wir dabei auf komplexe Farbspielereien und tolle Regenbogeneffekte, um Schritt für Schritt den Code kennen zu lernen. Wir beginnen daher damit, nur einzelne LEDs anzusteuern. Ob man dabei nun wie wir eine Pixelmatrix verwendet oder einen Streifen mit WS2812 LEDs, oder einen Ring aus WS2812 LEDs ist letztlich egal. Der unten genannte Code funktioniert mit allen Variationen.

Der Aufbau ist für die folgenden Aufgaben immer der gleiche. Die Pixel-Matrix (oder Strefen, oder Ring…) wird mit nur drei Kabeln an den Funduino / Arduino Mikrocontroller angeschlossen. Dabei gibt es die 5V (+) Spannungsversorgung, GND (-) und die Datenleitung.

Skizze Fritzing oder Foto falls es da kein Symbol gibt

Vorbereitung

Vor dem Programmieren wird für die LED-Pixel noch eine Library benötigt, welche die Programmierung mit der Arduinosoftware wesentlich vereinfacht. Wir verwenden dafür die Library von Adafruit. Diese findet man in der Arduinosoftware im Librarymanager unter dem Suchbegriff „Adafruit Neopixel“.

Im Sketch muss immer zu Beginn angegeben werden, über wie viele LED-Pixel das angeschlossene Pixel-Modul verfügt (in unserem Fall 8×8=64) und an welchem Pin die Datenleitung angeschlossen wird. Dann kann es aber auch wirklich losgehen.

Aufgabe 1 – Einen einzelnen Pixel leuchten lassen

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 9 // Datenleitung an Pin 9

Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  strip.begin();
  strip.show(); // Alle Pixel zu Beginn ausschalten
}

void loop() 
{ 
 strip.setPixelColor(22, (strip.Color(255, 0, 0))); // Der Pixel Nr.23 wird mit der Farbe Rot angesteuert (Der erste Pixel hat die Bezeichnung 0 und der letzte der 64 Pixel hat die Bezeichnung 63). Die Farbe des Pixels ist in diesem Fall rot. Die Farbe kann aber einfach geändert werdenm, indem man den Zahlencode hinter "strip.color" verändert. Die drei Zahlen stehen für die Farben "Rot", "Grün" und "Blau". Je nach größe der Zahl, zwischen 0 und 255, leuchtet die entsprechende Farbe heller oder dunkler. Aus der Kombination von zwei oder allen drei Farben können sehr viele unterschiedliche Farben erzeugt werden.
 strip.show(); // Dieser Befehl aktiviert die zuvor genannten LEDS, in diesem Fall nur die Nummer 23.
}

Aufgabe 2 – Zwei einzelne Pixel gleichzeitig in unterschiedlichen Farben leuchten lassen

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 9 // Datenleitung an Pin 9

Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  strip.begin();
  strip.show(); // Alle Pixel zu Beginn ausschalten
}

void loop() 
{ 
strip.setPixelColor(10, (strip.Color(0, 255, 0))); // Der Pixel Nr.11 wird mit der Farbe Grün angesteuert.
strip.setPixelColor(20, (strip.Color(0, 0, 255))); // Der Pixel Nr.21 wird mit der Farbe Blau angesteuert.
strip.show(); // Dieser Befehl aktiviert die zuvor genannten LEDS, in diesem Fall nur die Nummern 11 und 21.
}

Aufgabe 3 – Drei einzelne Pixel in unterschiedlichen Farben nacheinander leuchten lassen

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 9 // Datenleitung an Pin 9

Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  strip.begin();
  strip.show(); // Alle Pixel zu Beginn ausschalten
}

void loop() 
{ 
// Pixel 11 aktivieren und deaktivieren
strip.setPixelColor(10, (strip.Color(0, 255, 0))); // Der Pixel Nr.11 wird mit der Farbe Grün angesteuert.
strip.show(); // Die LED Nr.11 wird aktiviert.
delay (1000); // Die LED Nr.12 bleibt 1000ms (1 Sekunde) an.
strip.setPixelColor(10, (strip.Color(0, 0, 0))); // Der Pixel Nr.11 wird mit keiner Farbe angesteuert - Farbe (0,0,0).
strip.show(); // Die LED Nr.11 wird entsprechend des vorherigen Befehls deaktiviert.

// Pixel 12 aktivieren und deaktivieren
strip.setPixelColor(11, (strip.Color(0, 0, 255))); // Der Pixel Nr.12 wird mit der Farbe Blau angesteuert.
strip.show(); // Die LED Nr.12 wird aktiviert.
delay (1000); // Die LED Nr.12 bleibt 1000ms (1 Sekunde) an.
strip.setPixelColor(11, (strip.Color(0, 0, 0))); // Der Pixel Nr.12 wird mit keiner Farbe angesteuert - Farbe (0,0,0).
strip.show(); // Die LED Nr.12 wird entsprechend des vorherigen Befehls deaktiviert.

// Pixel 13 aktivieren und deaktivieren
strip.setPixelColor(12, (strip.Color(255, 0, 0))); // Der Pixel Nr.13 wird mit der Farbe Rot angesteuert.
strip.show(); // Die LED Nr.13 wird aktiviert.
delay (1000); // Die LED Nr.13 bleibt 1000ms (1 Sekunde) an.
strip.setPixelColor(12, (strip.Color(0, 0, 0))); // Der Pixel Nr.13 wird mit keiner Farbe angesteuert - Farbe (0,0,0).
strip.show(); // Die LED Nr.13 wird entsprechend des vorherigen Befehls deaktiviert.
}