Nr.05 RGB LED

Inhaltsverzeichnis

Eine RGB-LED ansteuern

Aufgabe: Eine RGB LED soll in verschiedenen Farben leuchten.

rgb-led-versuchsaufbau
Versuchsaufbau - Beispiel: Schaltung einer RGB LED am Funduino UNO R3

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 „Rot“, „Grün“ und „Blau“. 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 die gemeinsame  Kathode (Common cathode). Mit den drei kürzeren Beinchen werden die einzelnen Farben der RGB-LED angesteuert.

Common cathode: Das längste Beinchen der LED ist „-“ (GND) und die drei kürzeren Beinchen werden über die digitalen Pins angesteuert.

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“.

RGB LED Farbspektrum Arduino
Farbspektrum der RGB LEDs

Mikrocontroller kennen an ihren digitalen Ausgängen nur „Spannung an“ oder „Spannung 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 (externer Link, abgerufen am 09.01.24). 

Beim Arduino UNO kann die PWM (Pulsweitenmodulation) nur an den digitalen Pins verwendet werden, an denen auf dem Board eine kleine Welle aufgedruckt ist.

Bei den anderen Mikrocontrollern können alle digitalen Pins verwendet werden.

 

PWM-Pins sind am Arduino UNO mit einem Wellensymbol (~) gekennzeichnet

Die PWM lässt die Spannung zwischen +5V und 0V pulsieren. Die Spannung wird also im Millisekundenbereich ein- und ausgeschaltet. Bei einer hohen PWM liegt das 5V Signal nahezu durchgehend am jeweiligen Pin an. Bei einer geringen PWM ist das 5V Signal kaum noch vorhanden (Da dies eine sehr kompakte Zusammenfassung ist, sollte man sich im Internet nach weiteren Erläuterungen umsehen). Mit dieser PWM kann man bei LEDs einen ähnlichen Effekt erreichen, als würde man die Spannung variieren.

Schaltpläne

Drei einzelne Farben

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
}

Wemos D1 Mini

int LEDrot = D1;
int LEDgruen = D2;
int LEDblau = D3;

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
}

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
}

NodeMCU

int LEDrot = D1;
int LEDgruen = D2;
int LEDblau = D3;

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
}

Farbmischung von drei Farben

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

Wemos D1 Mini

int LEDrot = D1;
int LEDgruen = D2;
int LEDblau = D3;
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);
}

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

NodeMCU

int LEDrot = D1;
int LEDgruen = D2;
int LEDblau = D3;
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);
}

Funduino - Dein Onlineshop für Mikroelektronik

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