Anzeige

Mit Arduino RGB-LEDs steuern

In diesem Artikel erkläre ich dir, wie du mit Arduino RGB-LEDs steuern kannst. Wir reden über Arten, Bauformen und die Ansteuerung.

Was ist eine RGB-LED?

Eine RGB-LED ist eine LED, die über drei Farbkanäle in den Farben Rot, Grün, Blau verfügt. Bei diesen Farben handelt es sich um die Primärfarben der Lichtfarben. Mischt man sie, kann man (fast) jede Farbe im Farbspektrum erzeugen.

Arduino RGB LED Farbrad

Ein Beispiel: Mischt man Rot und Grün erhält man Gelb.

Was? Gelb? Wird aus Rot und Grün nicht Braun? Das stimmt schon, allerdings nur für Körperfarben, z. B. denen aus einem Malkasten. Diese leuchten nicht selbst, sondern filtern das Umgebungslicht. Grüne Farbe filtert also z. B. die Rot- und Blauanteile aus weißem Licht heraus. Mischt man es mit Rot, wird auch ein Anteil Grün herausgefiltert und es ergibt sich braun. Bei einer grünen Lichtfarbe, z. B. einer grünen LED wird tatsächlich ein grünes Lichtspektrum gesendet. Gibt man ein zweites Spektrum, z. B. ein rotes hinzu, ergibt sich Gelb.

Zur Farbtheorie könnte ich noch viel schreiben, das sprengt aber den Rahmen. Vielleicht noch ein Hinweis, den ich immer spannend fand: Goethe nahm sich selbst weniger als Dichter, sondern eher als Farbforscher wahr. Dichtung war nur die Quelle, um seine Wissenschaft zu finanzieren. Seine Farbenlehre (https://de.wikipedia.org/wiki/Farbenlehre_(Goethe))  ist legendär, wenn auch physikalisch nicht ganz richtig. Jetzt aber zurück zur LED :-)

Welche Arten von RGB-LEDs gibt es?

RGB-LEDs lassen sich in Bauformen und inneren Aufbau unterscheiden. Es gibt sie für die Durchsteckmontage (THT) in 3, 5 und 10mm Durchmesser. Diese sind für Arduino und Breadboard-Betrieb besonders geeignet. Darüber hinaus gibt es sie als Streifen oder Ringe. Auch für die Oberflächenmontage (SMD) gibt es sie in unterschiedlichen Größen und Pin-Belegungen.

Während es RGB-LEDs gibt, bei denen einfach drei Farben in einem Gehäuse vergossen sind, gibt es auch LEDs mit eingebauter Elektronik.

Farbwechsel-LEDs

Farbwechsel-LEDs kennt man aus allerlei leuchtenden Dekorationsartikeln. Sie werden einfach mit dem Strom verbunden und zeigen dann eine voreingestellte Farbabfolge, wie ein Disco-Licht oder ein stimmungsvolles Farb-Fading. Diese Funktionen sind allerdings nicht steuerbar.

WS2812

Eine besonders beliebte Art der RGB-LEDs sind einzeln adressierbare LEDs, die sogenannten WS2812-LEDs. Erhältlich sind sie in Streifen, Panelen und Ringen und zeichnen sich durch große Helligkeit und schnelle Reaktion aus. Besonders macht sie aber, dass man jede LED einzeln ansprechen kann. Dazu wird nur ein einziger Pin des Arduino-Boards benötigt. Den WS2812-LEDs habe ich ein eigenes Kapitel gewidmet und verweise hier gern darauf.

Standard RGB-LEDs

Konzentrieren wir uns hier nun auf »normale« RGB-LEDs. Wie beschrieben sind die LEDs für die Durchsteckmontage im Arduino-Umfeld gebräuchlich. Durch ihre Beinchen lassen sie sich gut per Breadboard verwenden. Je nach Bauart gibt es diese LEDs mit vier oder sechs Beinchen. Während sich RGB-LEDs mit vier Beinchen entweder die Anode (Common Anode) oder Kathode (Common Cathod) teilen, führen RGB-LEDs mit sechs Beinchen für jede Farbe jeweils Anode und Kathode aus.

Arduino RGB LEDs Bauformen

Wie die Pinbelegung der jeweiligen LED beschaffen ist, muss man im Einzelfall im Datenblatt der LED ablesen oder ausprobieren. Wichtig ist, dass auch RGB-LEDs Vorwiderstände benötigen. Es muss pro Farbe je ein Vorwiderstand verwendet werden. Bei LEDs mit gemeinsamen Beinchen (Common Anode oder Common Cathode) reicht ein Widerstand im gemeinsamen Anschluss also nicht aus.

Wie steuere ich mit Arduino RGB-LEDs?

Wenn man ein größtmögliches Farbspektrum erreichen möchte, bietet es sich an, drei analoge Outputs des Arduino-Boards zu verwenden. Steuern wir die RGB-LED per Potentiometer.

Schaltung RGB-Kanalmixer

Schaltung Arduino RGB LEDs

In dieser Schaltung verwende ich eine RGB-LED mit gemeinsamen Ground (Common Cathode). Drei Potentiometer werden per analogem Input ausgelesen und ihre Werte an die RGB-LED gesendet.

Code für Arduino RGB-LEDs

int redPin = 10;
int greenPin = 9;
int bluePin = 11;

int potPin1 = A0;
int potPin2 = A1;
int potPin3 = A2;

void setup() {
  
}

void loop() {
  analogWrite(redPin, analogRead(potPin1)/4);
  analogWrite(greenPin, analogRead(potPin2)/4);
  analogWrite(bluePin, analogRead(potPin3)/4);
}

Dieses Programm liest die analogen Inputs aus, teilt die Werte durch vier, da der Wertebereich der analogen Inputs (0 – 1024) in den Wertebereich der analogen Outputs (0 – 255) umgerechnet werden muss, und gibt diesen Wert jeweils an einen der Farbkanäle der RGB-LED aus.

Code für nur ein Potentiometer als Farbrad

int redPin = 10;
int greenPin = 9;
int bluePin = 11;

int potPin1 = A0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int phase = round(analogRead(potPin1) / 171);   
  int frame = analogRead(potPin1) % 171;          
  frame = map(frame, 0, 171, 0, 255);
  Serial.print(phase);
  Serial.print("\t");
  Serial.println(frame);

  if (phase == 0) {
    analogWrite(redPin, 255);
    analogWrite(greenPin, frame);
    analogWrite(bluePin, 0);
  } else if (phase == 1) {
    analogWrite(redPin, 255-frame);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 0);
  } else if (phase == 2) {
    analogWrite(redPin, 0);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, frame);
  } else if (phase == 3) {
    analogWrite(redPin, 0);
    analogWrite(greenPin, 255-frame);
    analogWrite(bluePin, 255);
  } else if (phase == 4) {
    analogWrite(redPin, frame);
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 255);
  } else if (phase == 5) {
    analogWrite(redPin, 255);
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 255-frame);
  }
}

Diese Programm unterteilt die Farbausgabe der RGB-LEDs in sechs Phasen. Die aktuelle Phase wird in der Variablen phase gespeichert. Wo man ich innerhalb dieser Phase befindet, ermittelt die Variable frame. Wenn du den Seriellen Monitor öffnest (Baud-Rate 115200), kannst du etwas besser erkennen, wie das passiert.

Dann wird via if-else-Anweisungen eine Funktion für die jeweilige Phase ausgeführt.

Und weiter?

Nun kannst du die RGB-LEDs als Stimmungslicht nutzen, oder schöne Geburtstagsgeschenke daraus basteln. Wie wäre es zur Beleuchtung von Origami-Faltungen? Vielleicht hast du aber auch eine bessere Idee? Schreib es mir gern in die Kommentare. Das würde mich sehr freuen :-)


Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book an!

Darin findest du die beliebtesten Arduino-Projekte von StartHardware. Jedes Projekt umfasst Schaltplan, Bauteile, Beschreibung und Code. Für Einsteiger gibt es ein Arduino-Schnellstart-Kapitel und einen kompakten Programmierkurs. Zusätzlich findest du Zwischenkapitel mit Expertenwissen zu den Komponenten, die verwendet werden. Alle Code-Beispiele gibt es natürlich als Download.

Weitere Informationen findest du auf der Produktseite. Klicke jetzt auf den Button, um Details anzusehen.


Stefan Hermann

Ich bin Stefan und arbeite seit 2007 mit Arduino. Als Designer und Produktmanager setze ich das Board in erster Linie zum Bau von Prototypen ein. Hier teile ich meine Faszination und Erfahrung mit dir!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.