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