Nr.04 Pulsierende LED

Inhaltsverzeichnis

Eine LED pulsieren lassen

Aufgabe: Eine LED soll pulsierend heller und dunkler werden. (Auch als engl. „faden“ bezeichnet)

Das Programm im Film

Mikrocontroller kennen an ihren Ausgängen nur „5 Volt an“ oder „5V aus“. Um die Helligkeit einer LED zu verändern, müsste man die Spannung jedoch variieren können. Zum Beispiel 5V wenn die LED hell leuchtet. 4 Volt, wenn sie etwas dunkler leuchtet usw. DAS FUNKTIONIERT AN DIGITALEN PINS ABER NICHT. Es gibt jedoch eine Alternative. Sie nennt sich Pulsweitenmodulation (PWM). Die PWM lässt die 5V Spannung 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

Programmcode

Arduino UNO

Arduino UNO PWM-Pins

alle Pins, die mit ~ gekennzeichnet sind

3, 5, 6, 9, 10 und 11

int LED = 6;  // Das Wort "LED“ steht jetzt für den Pin 6

// Fadeschritte: bestimmt die Geschwindigkeit des „fadens“.
int Fadeschritte = 5;  

// Das Wort "Helligkeit“ steht nun für den Wert, der bei der PWM ausgegeben wird. 
// Die Zahl 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;  

void setup()  // Hier beginnt das Setup.
{
  // bei analogWrite ist kein setup notwendig
}

void loop() 
{
  /*
    Mit der Funktion analogWrite wird hier an der LED die PWM-Funktion aktiviert.
    Der PWM-Wert ist der Wert, der unter dem Namen „Helligkeit“ gespeichert ist.
    in diesem Fall „0“ (siehe ersten Programmabschnitt)
  */  
  analogWrite(LED, Helligkeit);

  /*
    Nun wird der Wert für die PWM-Ausgabe verändert. Zum Wert „Helligkeit“ 
    wird jetzt zum vorherigen Helligkeit der Wert für die Fadeschritte addiert. 
    In diesem Fall: Helligkeit = 0 + 5. Der neue Wert für "Helligkeit“ ist also nicht mehr 0 sondern 5. 
    Sobald der loop-Teil einmal durchgelaufen ist, wiederholt er sich. 
    Dann beträgt der Wert für die Helligkeit 10. Im nächsten Durchlauf 15 usw. usw…
  */
  Helligkeit = Helligkeit + Fadeschritte;    

  // Die LED soll für 25 ms (Millisekunden), also nur ganz kurz die Helligkeit beibehalten. 
  // Verringert man diesen Wert, wird das Pulsieren ebenfalls schneller.
  delay(25);
  
  /*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    wechselt der Wert für die "Fadeschritte“ von positiv zu negativ bzw. umgekehrt. 
    Die LED wird zunächst bei jedem Durchlauf des loop-Teils immer ein bisschen heller. 
    Allerdings ist irgendwann der Maximalwert für die PWM-Ausgabe mit dem Wert 255 erreicht. 
    Die LED soll dann wieder Schritt für Schritt dunkler werden. 
    Also wird dem Wert für die "Fadeschritte“ 
    an dieser Stelle ein Minuszeichen davor gesetzt.
    Solange der Wert kleiner als 255 ist, wird zu "Fadeschritte" jeweils 5 addiert,
    Ist der Wert größer als 255, wird solange 5 rückwärts gezählt, bis der Wert 0 erreicht ist.   
  */
  if (Helligkeit == 0 || Helligkeit == 255) 
  {
    Fadeschritte = -Fadeschritte;  
  }

}  // Mit dieser letzten Klammer wird der loop-Teil geschlossen.

Wemos D1 Mini

Beim Wemos D1 Mini können alle digitalen Pins für analogWrite verwendet werden.

Wemos D1 Mini PWM-Pins

D0           D1
D5           D2
D6           D3
D7           D4
D8

int LED = D5;  // Das Wort „LED“ steht jetzt für den Pin D5

// Fadeschritte: bestimmt die Geschwindigkeit des „fadens“.
int Fadeschritte = 5;  

// Das Wort "Helligkeit“ steht nun für den Wert, der bei der PWM ausgegeben wird. 
// Die Zahl 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;  

void setup()  // Hier beginnt das Setup.
{
  // bei analogWrite ist kein setup notwendig
}

void loop() 
{
  /*
    Mit der Funktion analogWrite wird hier an der LED die PWM-Funktion aktiviert.
    Der PWM-Wert ist der Wert, der unter dem Namen „Helligkeit“ gespeichert ist.
    in diesem Fall „0“ (siehe ersten Programmabschnitt)
  */  
 analogWrite(LED, Helligkeit);

 /*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    wechselt der Wert für die "Fadeschritte“ von positiv zu negativ bzw. umgekehrt. 
    Die LED wird zunächst bei jedem Durchlauf des loop-Teils immer ein bisschen heller. 
    Allerdings ist irgendwann der Maximalwert für die PWM-Ausgabe mit dem Wert 255 erreicht. 
    Die LED soll dann wieder Schritt für Schritt dunkler werden. 
    Also wird dem Wert für die "Fadeschritte“ 
    an dieser Stelle ein Minuszeichen davor gesetzt.
    Solange der Wert kleiner als 255 ist, wird zu "Fadeschritte" jeweils 5 addiert,
    Ist der Wert größer als 255, wird solange 5 rückwärts gezählt, bis der Wert 0 erreicht ist.   
  */
  Helligkeit = Helligkeit + Fadeschritte;    

  // Die LED soll für 25 ms (Millisekunden), also nur ganz kurz die Helligkeit beibehalten. 
  // Verringert man diesen Wert, wird das Pulsieren ebenfalls schneller.
  delay(25);
  
/*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    wechselt der Wert für die "Fadeschritte“ von positiv zu negativ bzw. umgekehrt. 
    Die LED wird zunächst bei jedem Durchlauf des loop-Teils immer ein bisschen heller. 
    Allerdings ist irgendwann der Maximalwert für die PWM-Ausgabe mit dem Wert 255 erreicht. 
    Die LED soll dann wieder Schritt für Schritt dunkler werden. 
    Also wird dem Wert für die "Fadeschritte“ 
    an dieser Stelle ein Minuszeichen davor gesetzt.
    Solange der Wert kleiner als 255 ist, wird zu "Fadeschritte" jeweils 5 addiert,
    Ist der Wert größer als 255, wird solange 5 rückwärts gezählt, bis der Wert 0 erreicht ist.   
  */
  if (Helligkeit == 0 || Helligkeit == 255) 
  {
    Fadeschritte = -Fadeschritte;  
  }

}  // Mit dieser letzten Klammer wird der loop-Teil geschlossen.

NodeMCU

NodeMCU PWM-Pins:

D0
D1
D2
D3
D5
D6
D7
D8

int LED = D1;  // Das Wort „LED“ steht jetzt für den Pin D1

// Fadeschritte: bestimmt die Geschwindigkeit des „fadens“.
int Fadeschritte = 5;  

// Das Wort "Helligkeit“ steht nun für den Wert, der bei der PWM ausgegeben wird. 
// Die Zahl 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;  

void setup()  // Hier beginnt das Setup.
{
  // bei analogWrite ist kein setup notwendig
}

void loop() 
{
  /*
    Mit der Funktion analogWrite wird hier an der LED die PWM-Funktion aktiviert.
    Der PWM-Wert ist der Wert, der unter dem Namen „Helligkeit“ gespeichert ist.
    in diesem Fall „0“ (siehe ersten Programmabschnitt)
  */  
 analogWrite(LED, Helligkeit);

  /*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    wechselt der Wert für die "Fadeschritte“ von positiv zu negativ bzw. umgekehrt. 
    Die LED wird zunächst bei jedem Durchlauf des loop-Teils immer ein bisschen heller. 
    Allerdings ist irgendwann der Maximalwert für die PWM-Ausgabe mit dem Wert 255 erreicht. 
    Die LED soll dann wieder Schritt für Schritt dunkler werden. 
    Also wird dem Wert für die "Fadeschritte“ 
    an dieser Stelle ein Minuszeichen davor gesetzt.
    Solange der Wert kleiner als 255 ist, wird zu "Fadeschritte" jeweils 5 addiert,
    Ist der Wert größer als 255, wird solange 5 rückwärts gezählt, bis der Wert 0 erreicht ist.   
  */
  Helligkeit = Helligkeit + Fadeschritte;    

  // Die LED soll für 25 ms (Millisekunden), also nur ganz kurz die Helligkeit beibehalten. 
  // Verringert man diesen Wert, wird das Pulsieren ebenfalls schneller.
  delay(25);
  
/*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    wechselt der Wert für die "Fadeschritte“ von positiv zu negativ bzw. umgekehrt. 
    Die LED wird zunächst bei jedem Durchlauf des loop-Teils immer ein bisschen heller. 
    Allerdings ist irgendwann der Maximalwert für die PWM-Ausgabe mit dem Wert 255 erreicht. 
    Die LED soll dann wieder Schritt für Schritt dunkler werden. 
    Also wird dem Wert für die "Fadeschritte“ 
    an dieser Stelle ein Minuszeichen davor gesetzt.
    Solange der Wert kleiner als 255 ist, wird zu "Fadeschritte" jeweils 5 addiert,
    Ist der Wert größer als 255, wird solange 5 rückwärts gezählt, bis der Wert 0 erreicht ist.   
  */
  if (Helligkeit == 0 || Helligkeit == 255) 
  {
    Fadeschritte = -Fadeschritte;  
  }

}  // Mit dieser letzten Klammer wird der loop-Teil geschlossen.

Der ESP32-Wroom weist eine Besonderheit auf:

Der Befehl analogWrite existiert nicht, stattdessen müssen die Pins 25 und 26 mit dacWrite angesprochen werden.

int LED = 26;  // Das Wort „LED“ steht jetzt für den Pin 26

// Fadeschritte: bestimmt die Geschwindigkeit des „fadens“.
int Fadeschritte = 5;  

// Das Wort "Helligkeit“ steht nun für den Wert, der bei der PWM ausgegeben wird. 
// Die Zahl 0 ist dabei nur ein beliebiger Startwert.
int Helligkeit = 0;  

void setup()  // Hier beginnt das Setup.
{
  // bei analogWrite ist kein setup notwendig
}

void loop() 
{
  /*
    Mit der Funktion analogWrite wird hier an der LED die PWM-Funktion aktiviert.
    Der PWM-Wert ist der Wert, der unter dem Namen „Helligkeit“ gespeichert ist.
    in diesem Fall „0“ (siehe ersten Programmabschnitt)
  */  
  dacWrite(LED, Helligkeit);

  /*
    Nun wird der Wert für die PWM-Ausgabe verändert. Zum Wert „Helligkeit“ 
    wird jetzt zum vorherigen Helligkeit der Wert für die Fadeschritte addiert. 
    In diesem Fall: Helligkeit = 0 + 5. Der neue Wert für "Helligkeit“ ist also nicht mehr 0 sondern 5. 
    Sobald der loop-Teil einmal durchgelaufen ist, wiederholt er sich. 
    Dann beträgt der Wert für die Helligkeit 10. Im nächsten Durchlauf 15 usw. usw…
  */
  Helligkeit = Helligkeit + Fadeschritte;    

  // Die LED soll für 25 ms (Millisekunden), also nur ganz kurz die Helligkeit beibehalten. 
  // Verringert man diesen Wert, wird das Pulsieren ebenfalls schneller.
  delay(25);
  
  /*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    wechselt der Wert für "Fadeschritte“ von positiv zu negativ bzw. umgekehrt. 
    Die LED wird zunächst bei jedem Durchlauf des loop-Teils immer ein bisschen heller. 
    Allerdings ist irgendwann der Maximalwert für die PWM-Ausgabe mit dem Wert 255 erreicht. 
    Die LED soll dann wieder Schritt für Schritt dunkler werden. 
    Also wird dem Wert für die "Fadeschritte“ 
    an dieser Stelle ein Minuszeichen davor gesetzt.
    Solange der Wert kleiner als 255 ist, wird zu "Fadeschritte" jeweils 5 addiert,
    Ist der Wert größer als 255, wird solange 5 rückwärts gezählt, bis der Wert 0 erreicht ist.   
  */
  if (Helligkeit == 0 || Helligkeit == 255) 
  {
    Fadeschritte = -Fadeschritte;  
  }

}  // Mit dieser letzten Klammer wird der loop-Teil geschlossen.

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