🌈

NeoPixel LEDs

Projekt I05 - WS2812 RGB-LED-Ring steuern

Intermediate
WS2812
RGB
1
Lernziele

Was du lernst

  • Adressierbare LEDs - Jede LED im Ring einzeln ansteuern
  • FastLED Library - Die mächtige Bibliothek für LED-Strips
  • RGB-Farbmischung - 16 Millionen Farben aus Rot, Grün und Blau
  • Lichteffekte - Animationen wie Rainbow, Wipe und Lauflicht

Voraussetzungen

Grundlagen der LED-Steuerung (B01-B03), Arrays und Schleifen verstanden

Komponenten

Der WS2812 NeoPixel Ring

💎

WS2812 LED-Ring (8 LEDs)

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

🔌

Anschlüsse

  • VCC: 5V Stromversorgung
  • GND: Masse
  • DIN: Data-In (vom Arduino)
  • DOUT: Data-Out (zum nächsten Ring)

Verkettung (Daisy Chain)

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!

2
Theorie

RGB-Farbmodell und Timing

24-Bit Farben

  • Jede LED hat RGB-Werte: 0-255
  • Rot: 8 Bit = 256 Stufen
  • Grün: 8 Bit = 256 Stufen
  • Blau: 8 Bit = 256 Stufen
  • 256 x 256 x 256 = 16.7 Mio Farben

Das Timing-Protokoll

WS2812 nutzt ein spezielles 800kHz Signal. Die FastLED Library kümmert sich um das präzise Timing!

Farbbeispiele

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!

Schaltplan

Einfache Verkabelung mit nur 3 Leitungen

Wokwi-Aufbau

     Arduino Uno          NeoPixel Ring
    ┌─────────────┐      ┌───────────┐
    │             │      │  (8 LEDs) │
    │  Pin 7  ────┼──────┼─▶ DIN     │
    │             │      │           │
    │  5V    ─────┼──────┼── VCC     │
    │             │      │           │
    │  GND   ─────┼──────┼── GND     │
    │             │      │           │
    └─────────────┘      │    DOUT ──┼─▶ ...
                         └───────────┘
            

Wichtige Verbindungen

  • Arduino Pin 7 → Ring DIN
  • Arduino 5V → Ring VCC
  • Arduino GND → Ring GND

Hinweis zur Stromversorgung

Bei mehr als 8 LEDs: Externe 5V-Versorgung verwenden! Der Arduino-USB liefert nur ca. 500mA.

3
Code

Schritt 1: Setup mit FastLED

#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!");
}

Erklärung

  • CRGB leds[] - Array speichert Farbe jeder LED
  • addLeds<WS2812> - Chip-Typ festlegen
  • GRB - Farbreihenfolge (WS2812 Standard)

Helligkeit

setBrightness(128) begrenzt auf 50%. Spart Strom und schont die Augen beim Testen!

3
Code

Schritt 2: Grundfunktionen

// 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);
  }
}

Wichtig: FastLED.show()

Änderungen am leds[] Array werden erst sichtbar, wenn du FastLED.show() aufrufst! Das ermöglicht komplexe Animationen vorzubereiten.

3
Code

Schritt 3: Regenbogen-Effekt

// 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
}

CHSV vs CRGB

  • CRGB(r, g, b) - Rot, Grün, Blau
  • CHSV(h, s, v) - Farbton, Sättigung, Helligkeit

HSV ist ideal für Farbübergänge!

Der Farbkreis

Hue (H) von 0-255: Rot → Gelb → Grün → Cyan → Blau → Magenta → Rot

Ausprobieren

Simulation in Wokwi

Wokwi Projekt

Erstelle ein neues Projekt mit Arduino Uno und NeoPixel Ring:

So testest du

  • Klicke (+) → Suche "neopixel" → NeoPixel Ring hinzufügen
  • Klicke auf den Ring → setze "pixels" auf 8
  • Verbinde: VCC→5V, GND→GND, DIN→Pin 7
  • Kopiere den Code und klicke Play!
4
Challenges

Erweiterungen

Probiere diese Aufgaben aus

🔥

Challenge 1: Feuer-Effekt

Simuliere ein flackerndes Feuer oder eine Kerze mit zufälligen Orange/Rot-Tönen.

🎨

Challenge 2: Poti-Farbsteuerung

Ein Potentiometer steuert den Farbton (Hue) aller LEDs. Drehen = Farbwechsel!

🚗

Challenge 3: Knight Rider

Ein Lauflicht das hin und her wandert - wie beim berühmten Serien-Auto K.I.T.T.

🎮

Challenge 4: Reaktionsspiel

Drücke den Taster genau wenn eine bestimmte LED leuchtet. Miss deine Reaktionszeit!

🌈

Geschafft!

Du beherrschst jetzt adressierbare RGB-LEDs

FastLED

Library eingebunden und konfiguriert

CRGB Array

Einzelne LEDs angesteuert

Effekte

Animationen programmiert

Nächstes Projekt

I06: Echtzeituhr (RTC) - Uhrzeit und Datum mit DS1307/DS3231

← →
1 / 11