Lektion 13 – LEDs dimmen mit der analogen Ausgabe
Du kannst LEDs jetzt schon ein- und ausschalten. Nun wollen wir versuchen, ob wir sie auch dimmen, also weniger stark leuchten lassen können.
Dein Zimmerlichtschalter kann das Licht ein- und ausschalten. Alles, was genau zwei Zustände kennt, nennt Arduino digital. Du hast das mit den Befehlen digitalWrite() und digitalRead() schon kennengelernt. An manchen Lampen hat man aber auch ein Drehrädchen oder einen Schieber, mit dem man die Lampe dimmen kann. Die Leuchtstärke kennt dann nicht nur An und Aus, sondern auch Zustände dazwischen. Das nennt Arduino analog.
Um eine LED zu dimmen, können wir den Befehl analogWrite() benutzen.
analogWrite(ledPin, leuchtstärke);
Auch hier übergeben wir zwei Parameter. Der erste Parameter ist wie bei digitalWrite() die Pinnummer. Der zweite Parameter ist nun nicht HIGH oder LOW, sondern ein Wert zwischen 0 bis 255. Damit können wir die Leuchtstärke der LED in 256 Stufen beeinflussen.
Die Schaltung kennst du ja schon. Es handelt sich um eine LED, die über einen Vorwiderstand mit dem Minus-Pol (GND) und direkt mit dem Pin 9 verbunden ist.
So könnte ein Programmtext zum Testen aussehen:
int ledPin = 9; void setup(){ } void loop(){ analogWrite(ledPin, 200); }
Ist dir aufgefallen, dass im Setup gar nichts steht? Wenn wir die analoge Ausgabe verwenden, müssen wir – im Gegensatz zur digitalen Ausgabe – keine Grundeinstellungen im Arduino vornehmen. Probier jetzt einfach ein paar andere Werte anstelle der 200 aus (z.B. 50, 250, 0, 100) und sieh, was passiert.
Info: PWM
Um LEDs zu dimmen, benutzt Arduino einen Trick. Normalerweise müsste man dafür nämlich die Spannung reduzieren. Arduino kann das nicht. Es ist nur in der Lage, Pins an- und auszuschalten. Das kann es dafür aber sehr schnell. Das Verhältnis der Zeit zwischen An und Aus entscheidet darüber, wie hell die LED leuchtet. Wenn sie lange an und nur kurz ausgeschaltet wird, dann leuchtet sie heller, als wenn sie lange aus- und nur kurz angeschaltet wird. Dieses Verfahren wird Pulsweitenmodulation (PWM) genannt. Arduino kann die Pulsweitenmodulation aber nicht an jedem Pin ausführen, sondern nur an denen, die mit einer Wellenlinie gekennzeichnet sind. Das sind die Pins 3, 5, 6, 9, 10 und 11.Dimmen mit der for-Schleife
Im Kapitel 10 haben wir uns die for-Schleife angesehen. Lass uns diese jetzt benutzen, um die LED automatisch zu dimmen. Bei der for-Schleife können wir eine Variable pro Schleifendurchlauf verändern. Ich schlage vor, wir benutzen sie für die Helligkeit der LED. Die Variable soll bei 0 anfangen und bis 255 zählen. Das sieht dann so aus:
for (int helligkeit=0; helligkeit <=255; helligkeit = helligkeit +1){
Wenn man nicht so viel schreiben möchte, kann man statt
helligkeit = helligkeit + 1
auch
helligkeit++
schreiben. Das erhöht die Variable auch um 1. Der Klarheit halber bleiben wir aber bei der ausgeschriebenen Variante. Der Code könnte dann so aussehen:
int ledPin = 9; void setup(){ } void loop(){ for (int helligkeit =1; helligkeit <= 255; helligkeit = helligkeit +1){ analogWrite(ledPin, helligkeit); delay(20); } }
Ein kleines delay ist nötig, damit wir die Änderung wahrnehmen können. Lade das Programm nun auf das Arduino.
Jetzt dimmt sich die LED langsam an. Was müssen wir jetzt machen, wenn sie sich danach wieder ausdimmen soll? Wir müssen eine zweite for-Schleife schreiben, bei der die Variable helligkeit bei 255 anfängt und sich pro Durchlauf um 1 reduziert. Das soll solange durchgeführt werden, wie helligkeit größer 0 ist.
Probier es einmal selber zu schreiben. Ansonsten findest du hier die Lösung:
int ledPin = 9; void setup(){ } void loop(){ for (int helligkeit =1; helligkeit <= 255; helligkeit = helligkeit +1){ analogWrite(ledPin, helligkeit); delay(20); } for (int helligkeit =255; helligkeit >= 0; helligkeit = helligkeit -1){ analogWrite(ledPin, helligkeit); delay(20); } }