Nr. 05 – Eine RGB-LED ansteuern (NodeMCU)

Inhaltsverzeichnis

Eine RGB-LED am NodeMCU ansteuern

Was ist eine RGB-LED? Eine RGB-LED ist eine LED, die in verschiedenen Farben leuchten kann. Hinter der Bezeichnung RGB verbergen sich die Farben „Red“, „Green“ und „Blue“. 

Die LED besteht im Inneren aus drei einzeln ansteuerbaren LEDs, die in den drei Farben leuchten. Deswegen hat eine RGB-LED auch so viele Beinchen, nämlich genau vier. Das längste der vier Beinchen ist je nach Version die gemeinsame Anode (+) bzw. Kathode (-). Mit den drei kürzeren Beinchen werden die einzelnen Farben der RGB-LED angesteuert.

Version A: „Common cathode“ – Das längste Beinchen der LED ist „-“ und die drei kürzeren Beinchen werden über „+“ (Spannung) angesteuert.

Version B: „Common anode“ – Das längste Beinchen der LED ist „+“ und die drei kürzeren Beinchen werden über „-“ (GND) angesteuert.

Welche Version man selber hat, findet man durch einfaches Umstecken von „+“ und „-“ an der LED heraus. Die LED leuchtet nur bei richtigem Anschluss.

Durch eine Mischung der Farben können noch sehr viele weitere Farben erzeugt werden. Zum Beispiel entsteht durch die Ansteuerung der Farben „Blau“ und „Grün“ die Farbe „Türkis“.

Aufbau für eine RGB-LED Version A - common cathode

Aufbau für eine RGB-LED Version B - common anode

Die Programmierung

Das NodeMCU ist ein digitaler Mikrocontroller. Er kennt an seinen digitalen Ausgängen nur „5 Volt (3,3V) an“ oder „5V (3,3V) aus“. Damit man mit einer RGB-LED die vielen verschiedenen Farben erzeugen kann, müssen die einzelnen Farben der LED jedoch genauer angesteuert werden. Dazu verwendet man die Pulsweitenmodulation, welche wir bereits in der Anleitung Nr. 04 kennengelernt haben. Das NodeMCU verfügt über insgesamt 9 PWM-Pins (D1-D8 und RST).

Die folgenden Codes funktionieren für beide RGB-Versionen gleichermaßen. Es muss nur eine Sache beachtet werden: Bei der LED Version B (common anode) muss der Wert für „dunkel“ auf 255 gesetzt werden. Das hat zur Folge, dass dann nicht nur am gemeinsamen Pluspol der LED eine positive Spannung anliegt, sondern auch an der entsprechenden Farbe.

Dann kann zwischen den beiden Kontakten der LED kein Strom mehr fließen und die jeweilige Farbe der LED bleibt aus. Daher ist auch für die Farbmischung zu beachten, dass bei dieser Version der Leuchtdiode, die Farbe heller wird, wenn der Wert kleiner wird. So leuchtet die Farbe Blau an Pin D3 in diesem Sketch hell, wenn der Code für die blaue Farbe so gewählt wird:

int brightness1a = 0;

Sketch 1 - Farben nacheinander ein- und ausschalten

int LEDblau = D3; // Farbe blau an Pin 3
int LEDrot = D5; // Farbe rot an Pin 5
int LEDgruen=D6; // Farbe gruen an Pin 6
int p=1000; // p ist eine Pause mit 1000ms also 1 Sekunde
int brightness1a = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int brightness1b = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int brightness1c = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int dunkel = 0; // Zahlenwert 0 bedeutet Spannung 0V – also LED aus

void setup()
{
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
}

void loop()
{
analogWrite(LEDgruen, brightness1c); // gruen und rot ein = gelb
analogWrite(LEDrot, brightness1b);
delay(p);
analogWrite(LEDgruen, dunkel); // gruen und rot aus = gelb aus
analogWrite(LEDrot, dunkel);
analogWrite(LEDgruen, brightness1c); // gruen und blau ein = türkis
analogWrite(LEDblau, brightness1b);
delay(p);
analogWrite(LEDgruen, dunkel); // gruen und blau aus = türkis aus
analogWrite(LEDblau, dunkel);
analogWrite(LEDrot, brightness1b); // rot und blau ein = lila
analogWrite(LEDblau, brightness1b);
delay(p);
analogWrite(LEDrot, dunkel); // rot und blau aus = lila aus
analogWrite(LEDblau, dunkel);
}

Sketch 2 - Farben mischen

In diesem Code werden die drei einzelnen Farben jeweils paarweise nacheinander ein- und ausgeschaltet. Dadurch entstehen die Farbmischungen Gelb, Türkis und Lila.

int LEDblau = D3; // Farbe blau an Pin 3
int LEDrot = D5; // Farbe rot an Pin 5
int LEDgruen= D6; // Farbe gruen an Pin 6
int p=1000; // p ist eine Pause mit 1000ms also 1 Sekunde
int brightness1a = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int brightness1b = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int brightness1c = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int dunkel = 0; // Zahlenwert 0 bedeutet Spannung 0V – also LED aus

void setup()
{
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
}

void loop()
{
analogWrite(LEDgruen, brightness1c); // gruen und rot ein = gelb
analogWrite(LEDrot, brightness1b);
delay(p);
analogWrite(LEDgruen, dunkel); // gruen und rot aus = gelb aus
analogWrite(LEDrot, dunkel);
analogWrite(LEDgruen, brightness1c); // gruen und blau ein = türkis
analogWrite(LEDblau, brightness1b);
delay(p);
analogWrite(LEDgruen, dunkel); // gruen und blau aus = türkis aus
analogWrite(LEDblau, dunkel);
analogWrite(LEDrot, brightness1b); // rot und blau ein = lila
analogWrite(LEDblau, brightness1b);
delay(p);
analogWrite(LEDrot, dunkel); // rot und blau aus = lila aus
analogWrite(LEDblau, dunkel);
}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 2.000 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE