Inhaltsverzeichnis
Für dieses Projekt benötigst du
- 1* UNO R3 Mikrocontroller mit passendem USB-Kabel
- 1* Steckbrett
- 40* Steckkabel männlich/männlich
- 1* LED
- 1* Widerstand 220 Ohm
Eine LED pulsieren lassen
Aufgabe: Eine LED soll pulsierend heller und dunkler werden. (Auch als engl. „faden“ bezeichnet)
Das Programm im Film
https://funduino.de/wp-content/uploads/2023/12/LED_PWM.mp4Mikrocontroller 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, https://www.high-endrolex.com/38sollte 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 bis zu 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.