Aufgabe:Eine RGB-LED soll in unterschiedlichen Farben leuchten.
1.Einführung
Was ist eine RGB-LED?
Eine RGB-LED ist eine Leuchtdiode, die die Fähigkeit besitzt, in verschiedenen Farben zu leuchten. Die Abkürzung RGB steht für die Farben „Rot“, „Grün“ und „Blau“. Diese spezielle LED besteht intern aus drei separaten LEDs, die unabhängig voneinander in den genannten Farben leuchten können. Daher verfügt eine RGB-LED über vier Anschlüsse. Das längste Bein repräsentiert die gemeinsame Kathode (Common cathode). Die drei kürzeren Beine ermöglichen die individuelle Ansteuerung der Farben der RGB-LED.
Gemeinsame Kathode: Das längste Bein, gekennzeichnet als „-“ (GND), ist die gemeinsame Kathode, während die drei kürzeren Beine über die digitalen Pins angesteuert werden.
Bildquellen: https://projecthub.arduino.cc/semsemharaz/interfacing-rgb-led-with-arduino-b59902
Durch die Mischung der Farben können zahlreiche weitere Farbnuancen erzeugt werden. Als Beispiel führt die Ansteuerung der Farben „Blau“ und „Grün“ zur Entstehung der Farbe „Türkis“.
Mikrocontroller erkennen an ihren digitalen Ausgängen lediglich zwei Zustände: "Spannung an" oder "Spannung aus". Um mit einer RGB-LED die Vielfalt der Farben zu erzeugen, müssen die einzelnen Farben der LED jedoch präziser gesteuert werden.
Beim Arduino UNO steht die PWM-Funktion nur an den digitalen Pins zur Verfügung, die auf dem Board durch eine kleine Welle gekennzeichnet sind.
Andere Mikrocontroller erlauben die Verwendung von PWM an allen digitalen Pins.
2.Schaltpläne
2.1. Arduino UNO
2.2.ESP32-Wroom
3.Die Code
3.1.Drei einzelne Farben
3.1.1 Arduino UNO
int LEDrot = 5;
int LEDgruen = 6;
int LEDblau = 3;
int Pause = 1000; // Pause mit 1000ms also 1 Sekunde
int Helligkeit = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
void setup()
{
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
}
void loop()
{
analogWrite(LEDrot, Helligkeit); // rot einschalten
delay(Pause); // Pause
analogWrite(LEDrot, LOW); // rot ausschalten
analogWrite(LEDgruen, Helligkeit); // gruen einschalten
delay(Pause); // Pause
analogWrite(LEDgruen, LOW); // gruen ausschalten
analogWrite(LEDblau, Helligkeit); // blau einschalten
delay(Pause); // Pause
analogWrite(LEDblau, LOW); // blau ausschalten
}
3.1.2. ESP32 Wroom
int LEDrot = 5;
int LEDgruen = 17;
int LEDblau = 16;
int Pause = 1000; // Pause mit 1000ms also 1 Sekunde
int Helligkeit = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
void setup()
{
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
}
void loop()
{
analogWrite(LEDrot, Helligkeit); // rot einschalten
delay(Pause); // Pause
analogWrite(LEDrot, LOW); // rot ausschalten
analogWrite(LEDgruen, Helligkeit); // gruen einschalten
delay(Pause); // Pause
analogWrite(LEDgruen, LOW); // gruen ausschalten
analogWrite(LEDblau, Helligkeit); // blau einschalten
delay(Pause); // Pause
analogWrite(LEDblau, LOW); // blau ausschalten
}
3.2.Farbmischung von drei Farben
3.2.1 Arduino UNO
int LEDblau = 3;
int LEDrot = 5;
int LEDgruen = 6;
int Pause = 1000; // Pause mit 1000ms also 1 Sekunde
int Helligkeit = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
void setup()
{
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
}
void loop()
{
// gruen und rot ein = gelb
analogWrite(LEDgruen, Helligkeit);
analogWrite(LEDrot, Helligkeit);
delay(Pause);
// gruen und rot aus = gelb aus
analogWrite(LEDgruen, LOW);
analogWrite(LEDrot, LOW);
// gruen und blau ein = türkis
analogWrite(LEDgruen, Helligkeit);
analogWrite(LEDblau, Helligkeit);
delay(Pause);
// gruen und blau aus = türkis aus
analogWrite(LEDgruen, LOW);
analogWrite(LEDblau, LOW);
// rot und blau ein = lila
analogWrite(LEDrot, Helligkeit);
analogWrite(LEDblau, Helligkeit);
delay(Pause);
// rot und blau aus = lila aus
analogWrite(LEDrot, LOW);
analogWrite(LEDblau, LOW);
}
3.2.2. ESP32-Wroom
int LEDrot = 5;
int LEDgruen = 17;
int LEDblau = 16;
int Pause = 1000; // Pause mit 1000ms also 1 Sekunde
int Helligkeit = 150; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
void setup()
{
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
}
void loop()
{
// gruen und rot ein = gelb
analogWrite(LEDgruen, Helligkeit);
analogWrite(LEDrot, Helligkeit);
delay(Pause);
// gruen und rot aus = gelb aus
analogWrite(LEDgruen, LOW);
analogWrite(LEDrot, LOW);
// gruen und blau ein = türkis
analogWrite(LEDgruen, Helligkeit);
analogWrite(LEDblau, Helligkeit);
delay(Pause);
// gruen und blau aus = türkis aus
analogWrite(LEDgruen, LOW);
analogWrite(LEDblau, LOW);
// rot und blau ein = lila
analogWrite(LEDrot, Helligkeit);
analogWrite(LEDblau, Helligkeit);
delay(Pause);
// rot und blau aus = lila aus
analogWrite(LEDrot, LOW);
analogWrite(LEDblau, LOW);
}