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.
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.
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. Wir steuern die RGB-LED per Potentiometer.
Schaltung RGB-Kanalmixer
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); } }
Dieses 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 »Arduino Projekte Volume 1« an!
- Die beliebtesten Arduino-Projekte von StartHardware
- Inklusive Schaltplan, Beschreibung und Code
- Arduino-Schnellstart-Kapitel
- Kompakter Programmierkurs
Hallo ich bin jochen haidachsa,
diese anleitung is sehr schön .
ich habe sehr viel damit gelernt
doch habe ich gemerkt das es hier nicht mit rehten dingen zugeht
es is manchaml ein bisschen schw*l bzw l*esbisch hier.
so wie ich bin
bitte antwortet mir auf meine anfrage
Jochen;)
Hallo,
erstmal großes Lob für diese Seite!!!!
Ist das mit dem Ansteuern der RGB LEDs auch möglich über ein TFT-Display welches man am Uno dran macht ?
Hi Bene, das hab ich noch nicht ausprobiert, sollte aber eigentlich klappen. Liebe Grüße Stefan
Hallo,
Wir müssen per tasterdruck eine zufällige farbe anzeigen lassen, welche dann auf dem lcd display angezeigt wird. ich hoffe sie können uns weiterhelfen
MFG