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.

Benötigte Teile

Bauteile

Schaltung

Bauplen Analoge Ausgabe

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

}

Titelbild von gilliu00_, CC-BY

8 thoughts on “Lektion 13 – LEDs dimmen mit der analogen Ausgabe

  1. Gute Info für Anfänger! Ich möchte eine LED für eine gewisse Zeit, ca. 10 sec., gedimmt einschalten. Danach soll sie wieder ausgehen. Wie würde der Code dann aussehen?

    1. Hallo Peter,

      ich denke, das geht so:

      ledPin = 9;

      void setup(){} // nichts zu tun hier

      void draw(){
      analogWrite(ledPin, 100); // statt der 100 kannst du Werte zwischen 0 und 255 eingeben
      delay(10000);
      analogWrite(ledPin, 0);
      delay(10000);
      }

      Ich hoffe, das hilft Dir weiter.

      Liebe Grüße

      Stefan

  2. super LED dimmen ! einfach erklärt !

    ich möchte aber das die LED nach dem hochfahren an bleibt !
    und
    nach dem runterfahren aus bleibt.

    das Programm wird ja immer neu gestartet !!!!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.