Materialien zum Unterricht

RGB-LED mit PWM ansteuern

Das bedeutet: Eine Lichtemitterdiode (LED), die aus drei einfarbigen LED besteht (R=Rot, G=Grün, B=Blau) wird über das Verfahren der Pulsweitenmodulation (PWM) so angesteuert, dass sie in verschiedenen Helligkeiten und Farben leuchten kann.

Klingt vernünftig, ist aber nicht selbstverständlich!

Der Mikrocontroller arbeitet digital, er kennt nur die beiden Werte Aus oder An (0 oder 1). Dazwischen gibt es für ihn nichts. Die RGB-LED soll aber analog leuchten, also viele verschiede Farben und Helligkeiten zeigen. Der Mikrocontroller und die RGB-LED müssen zusammengebracht werden. Und das geht über die Pulsweitenmodulation. Der Begriff klingt viel schlimmer, als es eigentlich ist.

Es wird als erstes eine Taktzeit festgelegt. Sie beträgt im Beispiel eine Tausenstel Sekunde. Das entspricht einer Frequenz vom 1 kHz=1000 Hz. Während dieser Zeit kann ein digitaler Ausgang nur sehr kurz auf 1 (An) und die meiste Zeit auf 0 (Aus) sein oder eben genau anders herum, mehr An als Aus. Da unser Auge recht träge reagiert, bekommt es die schnellen Wechsel gar nicht mit. Im ersten Fall sieht es die LED einfach dunkler als im zweiten Fall.

PWM

Ist das nun schwer zu programmieren? NEIN! Es gibt eine fertige Klasse mit dem Namen PWM, die bereits alles kann. Man braucht die Klasse nur zu importieren und dann Instanzen davon ableiten.

Die neuen Objekte heißen pwm_rot, pwm_gruen und pwm_blau. Sie wissen nach der Initialisierung, an welchen Pin ihre LED angeschlossen ist (Rot: 18, Grün: 19 und Blau 20). Die Pins sind für die Ausgabe bereit (Pin.OUT) und die Frequenz ist auf 1000 Hz eingestellt.

PWM

Um die Helligkeit für eine Farbe einzustellen, schreibt man nun einfach

pwm_rot.duty(1023)

oder, da die Farbobjekte in dem Array farben stecken

farben[0].duty(1023)

Der Parameter, der der Methode duty übergeben werden muss, liegt zwischen 0 und 1023. Je größer der Wert ist, um so länger sind je einen Takt die LED-An-Phasen. (duty=Aufgabe)

Die Funktion für die Helligkeit einer LED erwartet 4 Parameter:

  1. das Array der Objekte
  2. die Nummer der Farbe, die geändert werden soll (0: Rot, 1: Grün, 2: Blau)
  3. die Helligkeit der LED zwischen 0 (Aus) und 1023 (An)
  4. eine Wartezeit in Millisekunden, damit unser träges Gehirn überhaut etwas sieht

Wichtig: Die Funktion muss gleich nach dem Import der Klassen eingefügt werden. Ansonsten funktioniert sie nicht richtig.

PWM

Bevor man nun den Regenbogen startet, stellt man die wartezeit und die Starthelligkeiten ein: Rot auf ganz hell und Grün und Blau auf ganz aus.

PWM

In der unendlichen Schleife beginnt man mit dem Einschalten von Grün und dann dem Ausschalten von Rot. Insgesamt 6 for-Schleifen bringen den Regenbogen zustande.

Aufgabe: Informiere dich über die Zeile for i in range(1023, 0, -1). Welche Bedeutung haben die drei Werte in der Klammer?

PWM