Arduino Grundlagen Teil 8: Eine LED dimmen

Jetzt folgt der nächste Schritt: wir wollen eine LED dimmen! Prinzipiell gibt es dafür verschiedene Möglichkeiten.

  • Verringerung des Stroms (sollte die LED mit höherem Strom betrieben werden, wird die Lebensdauer verringert und sie kann ggf. kaputt gehen).
  • Ansteuerung über ein PWM-Signal.

Komponenten-Liste

Für die Umsetzung brauchen wir folgende Komponenten:

Was haben wir vor?

Was wir jetzt machen wollen, ist eine Ansteuerung über ein PWM-Signal. PWM steht für Pulsweitenmodulation. Bei diesem Codierungs-Verfahren von Signalen werden normalerweise durch Änderung der Einschalt- und Periodendauer eines Rechteck-Signals (High und Low) Daten übertragen. Man kann dieses Verfahren aber auch nutzen, um LEDs zu dimmen. Dimmen ist in diesem Fall eigentlich der komplett falsche Ausdruck. Bei einem PWM-Signal liegt immer das High- bzw. Low-Signal an. Ein Arduino hat beispielsweise eine Ausgangsspannung an den digitalen Ausgängen von 5V (High) bzw. 0V (Low). Dazwischen gibt es nichts. Durch das PWM-Signal wird die LED aber so schnell an- und ausgeschaltet, dass das menschliche Auge denkt, die LED wäre gedimmt.

In diesem Beispiel wollen wir eine LED langsam vom ausgeschalteten Zustand auf volle Helligkeit und wieder zum Aus-Zustand faden. Dies soll in einer Schleife ablaufen, also quasi wie der LED Blinker im Artikel >> Eine LED blinken lassen bloß „hübscher“.

Was brauchen wir dafür?

Um das Beispiel zu realisieren, brauchen wir folgende Komponenten

  • 1 x Arduino (z.B. Nano)
  • 1 x Breadboard
  • 1 x LED
  • 1 x Vorwiderstand XXXOhm
  • 1 x Set Jumper Wire (Testleitungen zum Stecken)
  • 1 x USB-Kabel

Vorbereitungen

Die Vorbereitungen fallen recht gering aus. Prinzipiell müssen wir für die LED einen passenden Vorwiderstand berechnen und danach die Schaltung aufbauen.

Vorwiderstand der LED berechnen

Im Artikel >> Mehrere LEDs blinken lassen haben wir uns bereits die Berechnung des Vorwiderstandes genauer angeschaut. Solltest Du die Berechnung noch nicht durchgeführt haben, schau Dir bitte den Artikel an.

Die von uns verwendete rote LED ist mit einer Spannung ULED von ca. 1,6V und einem Strom ILED von 10mA angegeben. Der Arduino hat an den digitalen Ausgängen eine Spannung Uges von 5,0V.

1)   Spannung berechnen, die am Vorwiderstand abfällt:

UR = Uges – ULED  = 5,0V – 1,6V = 3,4V

2)   Minimalen Vorwiderstand berechnen:

R1 = UR1 / IR1 = UR1 / ILED = 3,4V / 10mA = 340Ω

3)   Nächst größeren vorhandenen Widerstand wählen (z.B. 470Ω) und den Strom ILED kontrollieren:

ILED = IR1 = UR1 / R1 = (Uges – ULED) / R1 = (5,0V – 1,6V) / 470Ω = 3,4V / 470Ω = 7,23mA

7,23mA liegen unter den maximalen 10mA und der Widerstand kann somit verwendet werden.

Aufbau der Schaltung

Als Schaltung nehmen wir das fertige Breadboard aus dem Artikel >> Mehrere LEDs blinken lassen. Alternativ funktioniert es natürlich auch mit der Schaltung für eine LED aus dem Artikel >> Die LED Schaltung im Detail. Solltest Du noch keine fertige Schaltung aufgebaut haben, kannst Du Dir in den genannten Artikeln anschauen, wie man dabei vorgeht.

Achtung!
Wir gehen davon aus, dass Du die LEDs an dieselben digitalen Ausgänge angeschlossen hast wie wir, also D3, D5, D6 und D9. Diese Ausgänge haben wir absichtlich so gewählt, weil sie mit PWM angesprochen werden können.

Mit dem Aufbau der Schaltung sind wir somit fertig und können direkt zur Programmierung kommen.

Das Programm: eine LED dimmen

Das Programm ist bis zur Main-Loop identisch zum Beispiel aus dem Artikel >> Die LED Schaltung im Detail. Du kannst den Anfang des Programms also einfach kopieren bzw. übernehmen. Die Main-Loop müsstest Du aber entsprechend anpassen oder aus Listing 1 übernehmen.

#define out_LED1 3	// Den vier angeschlossenen Pins des 
#define out_LED2 5	// Arduinos einen Namen zuweisen.
#define out_LED3 6
#define out_LED4 9

// Das Setup
void setup() {
  pinMode(out_LED1, OUTPUT);	// Die vier Pins als
  pinMode(out_LED2, OUTPUT);	// Ausgänge deklarieren.
  pinMode(out_LED3, OUTPUT);
  pinMode(out_LED4, OUTPUT);
}

// Die Haupt-Schleife (Main-Loop)
void loop() {
  for (int i = 0 ; i <= 255 ; i++ ){ 
    analogWrite(out_LED1, i);
    analogWrite(out_LED2, i);
    analogWrite(out_LED3, i);
    analogWrite(out_LED4, i);
    delay(10);
  }
  for (int i = 255 ; i >= 0 ; i-- ){
    analogWrite(out_LED1, i); 
    analogWrite(out_LED2, i);
    analogWrite(out_LED3, i);
    analogWrite(out_LED4, i);
    delay(10);
  }
}

Listing 1: Das erste Programm zum Dimmen von LEDs

Nach einem Upload werden die LEDs wie in folgendem Video langsam hoch und runter faden.

Hier wieder ein kurzes Beispiel-Video (ohne Ton!):

Was ist neu?

In diesem Beispiel gibt es zwei neue Dinge. Zum einen die For-Schleife und zum anderen die Funktion analogWrite(). Hinzu kommt noch die abgekürzte Schreibweise für Inkrement und Dekrement.

Die For-Schleife

Eine For-Schleife wird meist als Zähler (Counter) eingesetzt. Dafür gibt es eine Start-Bedingung, eine End-Bedingung und eine Angabe, was währenddessen gemacht werden soll. Die erste For-Schleife kann also wie folgt verstanden werden:

for (Start-Bedingung ; bis End-Bedingung ; mache folgendes)
und führe folgenden Code bzw. folgende Kommandos aus;
}

In obigem Beispiel nutzen wir dafür:

int i = 0     Erstelle als Start-Bedingung eine Variable namens i und setze sie auf den Wert 0.

i <= 255   Arbeite die Schleife ab, solange i kleiner gleich 255 ist.

i++                    Erhöhe i bei jedem Schleifen-Durchlauf um den Wert 1.

Die zweite For-Schleife funktioniert quasi genauso, nur zählt sie von 255 rückwärts bis zum Wert 0.

analogWrite()

An einem Ausgang des Arduinos kann keine analoge Spannung ausgegeben werden. Also z.B. eine Spannung von 2,5V oder 3,3V. Die Name der Funktion analogWrite() ist also so gesehen etwas schlecht gewählt. Die Funktion analogWrite() nutzt viel mehr ein PWM-Signal. Einfach gesagt, wechselt bei einem PWM-Signal die Spannung in unterschiedlichen zeitlichen Abständen zwischen 0V und der Ausgangs-Spannung des Arduinos, in diesem Fall 5V. Dafür bietet der Arduino 256 Schritte.

  • Der Funktion wird der Ausgang und ein Wert übergeben, also
    analogWrite(Ausgang, Wert)
  • Es stehen 256 Schritte zur Verfügung. Der Wertebereich geht von 0 bis 255. 0 (ausgeschaltet) plus 255 einstellbare Schritte sind insgesamt 256 unterschiedliche Werte.
  • Wird analogWrite(Ausgang, Wert) der Wert 0 übergeben, ist der Ausgang konstant auf 0V, also komplett ausgeschaltet.
  • Wird analogWrite(Ausgang, Wert) der Wert 255 übergeben, ist der Ausgang konstant auf 5V, also komplett angeschaltet.

Bei einer LED wirkt sich diese schnelle Folge von an- und ausgeschalteten Zuständen so aus, dass das menschliche Auge denkt, dass die LED „gedimmt“ ist.

Inkrement / Dekrement

Die Schreibweise

i++

bedeutet eigentlich

i = i + 1

i wird um den Wert 1 und wieder als i gespeichert. Dies nennt man Inkrement.

In der zweiten Schleife wird ein Dekrement genutzt.

i–

bedeutet eigentlich

i = i – 1

 

In Kürze wird es mit dem nächsten Schritt weitergehen! Dann zeigen wir wie man mehrere LEDs nacheinander dimmen kann – also praktisch ein Lauflicht programmiert!

 


Arduino Grundlagen Kurs im Überblick:

>> Teil 1: Der Arduino im Detail
>> Teil 2: Die Bauteile des Arduino
>>Teil 3: Ein Programm auf einen Arduino laden
>> Teil 4: Eine LED blinken lassen!
>> Teil 5: Eine externe LED blinken lassen
>> Teil 6: Die LED Schaltung im Detail
>> Teil 7: Mehrere LEDs ansteuern & blinken lassen
>> Teil 8: Eine LED dimmen
>> Teil 9: Mehrere LEDs dimmen
>> Teil 10: Taster an Arduino anschließen
>> Teil 11: Serielle Schnittstelle
>> Teil 12: Softwareserial Library

Kommentar hinterlassen zu "Arduino Grundlagen Teil 8: Eine LED dimmen"

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.


*


*