Projekt I05 - WS2812 RGB-LED-Ring steuern
Grundlagen der LED-Steuerung (B01-B03), Arrays und Schleifen verstanden
Der WS2812 NeoPixel Ring
Jede LED enthält einen eigenen Controller-Chip. Alle LEDs werden über nur einen Datenpin gesteuert!
Betriebsspannung: 5V, ca. 60mA pro LED bei voller Helligkeit
WS2812 LEDs können in Kette geschaltet werden: DOUT des ersten Rings an DIN des nächsten. So steuerst du hunderte LEDs mit nur einem Pin!
WS2812 nutzt ein spezielles 800kHz Signal. Die FastLED Library kümmert sich um das präzise Timing!
CRGB::Red = (255, 0, 0)
CRGB::Green = ( 0, 255, 0)
CRGB::Blue = ( 0, 0, 255)
CRGB::Yellow = (255, 255, 0)
CRGB::Magenta = (255, 0, 255)
CRGB::Cyan = ( 0, 255, 255)
CRGB::White = (255, 255, 255)
CRGB::Black = ( 0, 0, 0)
Tipp: Mit CRGB(r, g, b) kannst du eigene Farben mischen!
Einfache Verkabelung mit nur 3 Leitungen
Arduino Uno NeoPixel Ring
┌─────────────┐ ┌───────────┐
│ │ │ (8 LEDs) │
│ Pin 7 ────┼──────┼─▶ DIN │
│ │ │ │
│ 5V ─────┼──────┼── VCC │
│ │ │ │
│ GND ─────┼──────┼── GND │
│ │ │ │
└─────────────┘ │ DOUT ──┼─▶ ...
└───────────┘
Bei mehr als 8 LEDs: Externe 5V-Versorgung verwenden! Der Arduino-USB liefert nur ca. 500mA.
#include <FastLED.h>
// NeoPixel-Ring an Pin 7 mit 8 LEDs
#define DATA_PIN 7
#define NUM_LEDS 8
// Array für alle LED-Farben
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(9600);
// FastLED initialisieren: Chip-Typ, Pin, Farbreihenfolge
FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(128); // 50% Helligkeit (0-255)
Serial.println("NeoPixel Ring bereit!");
}CRGB leds[] - Array speichert Farbe jeder LEDaddLeds<WS2812> - Chip-Typ festlegenGRB - Farbreihenfolge (WS2812 Standard)setBrightness(128) begrenzt auf 50%. Spart Strom und schont die Augen beim Testen!
// Alle LEDs ausschalten
void clearAll() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
FastLED.show(); // WICHTIG: Änderungen übertragen!
}
// Alle LEDs auf eine Farbe setzen
void setAll(CRGB color) {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = color;
}
FastLED.show();
}
// Color Wipe: LEDs nacheinander füllen
void colorWipe(CRGB color, int wait) {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = color;
FastLED.show();
delay(wait);
}
}Änderungen am leds[] Array werden erst sichtbar, wenn du FastLED.show() aufrufst! Das ermöglicht komplexe Animationen vorzubereiten.
// Regenbogen-Zyklus über alle LEDs
void rainbowCycle(int wait) {
for (int j = 0; j < 256; j++) { // 256 Farbphasen
for (int i = 0; i < NUM_LEDS; i++) {
// Position im Farbkreis berechnen
int pos = (i * 256 / NUM_LEDS + j) & 255;
leds[i] = CHSV(pos, 255, 255); // HSV-Farbe
}
FastLED.show();
delay(wait);
}
}
void loop() {
colorWipe(CRGB::Red, 100); // Rot füllen
colorWipe(CRGB::Green, 100); // Grün füllen
colorWipe(CRGB::Blue, 100); // Blau füllen
rainbowCycle(20); // Regenbogen
}CRGB(r, g, b) - Rot, Grün, BlauCHSV(h, s, v) - Farbton, Sättigung, HelligkeitHSV ist ideal für Farbübergänge!
Hue (H) von 0-255: Rot → Gelb → Grün → Cyan → Blau → Magenta → Rot
Simulation in Wokwi
Erstelle ein neues Projekt mit Arduino Uno und NeoPixel Ring:
Probiere diese Aufgaben aus
Simuliere ein flackerndes Feuer oder eine Kerze mit zufälligen Orange/Rot-Tönen.
Ein Potentiometer steuert den Farbton (Hue) aller LEDs. Drehen = Farbwechsel!
Ein Lauflicht das hin und her wandert - wie beim berühmten Serien-Auto K.I.T.T.
Drücke den Taster genau wenn eine bestimmte LED leuchtet. Miss deine Reaktionszeit!
Du beherrschst jetzt adressierbare RGB-LEDs
Library eingebunden und konfiguriert
Einzelne LEDs angesteuert
Animationen programmiert
I06: Echtzeituhr (RTC) - Uhrzeit und Datum mit DS1307/DS3231