Schnelle Lieferung
Rabattkonditionen für Unternehmen
Bis zu 10% Rabatt für Schüler, Studenten und Bildungseinrichtungen
Europaweit: Versicherter Versand ab 4,90€
Filter schließen
Filtern nach:

Pulsierende LED am Raspberry Pi (Pulsweitenmodulation)

Eine LED soll pulsierend heller und dunkler werden. (Auch als „faden“ bezeichnet, nach dem engl. Verb to fade = abklingen, abnehmen). Umsetzen möchten wir dies mit der sogenannten Pulsweitenmodulation. Weitere Informationen zur Puslweitenmodulation am Raspberry Pi findet Ihr etwas weiter unten.

Im ersten Schritt schauen wir uns den Schaltplan an.

Der Schaltplan: Pulsierende LED am Raspberry Pi (PWM)

Der Schaltplan: Pulsierende LED am Raspberry Pi


Um die Helligkeit einer LED zu variieren, reicht es nicht aus, die Spannung zu variieren. Bauartbedingt (Diode!) wird eine gewisse Mindestspannung benötigt; diese sogenannte Flussspannung (engl. forward voltage) liegt in Abhängigkeit von der Farbe der LED zwischen ca. 1,6 und ca. 3 V. Oberhalb dieser Flussspannung wird die LED leitend, der Strom wird über einen Vorwiderstand begrenzt. Also: Anders als bei Glühlampen, wird die Helligkeit nicht über die Höhe der Spannung reguliert. Im Übrigen liefern die GPIO-Pins ohnehin nur genau 3,3V.

Abhilfe schafft hier die Pulsweitenmodulation (engl. pulse width modulation oder PWM). Dabei wird die Gleichspannung mit hoher Frequenz ein- und ausgeschaltet. Die insgesamt übertragene Energie wird durch das Verhältnis der Einschaltdauer zur gesamten Dauer eines Zyklus bestimmt. Dieser Tastgrad (engl. duty cycle) kann zwischen 0 und 100% liegen.

Bei dem Raspberry Pi kann man auf allen GPIO-Pins die software PWM benutzen. Es gibt aber auch zwei spezielle Hardware PWM Pins. Los geht’s!

Der erste Programmcode: Pulsierende LED am Raspberry Pi mit Pulsweitenmodulation

# Wir starten mit dem Importieren der Programm-Module
import RPi.GPIO as GPIO	       # Achtung: Schreibweise beachten: kleines i
import time
GPIO.setmode(GPIO.BCM)           # Wir stellen den Modus auf BCM ein
LED=23                                              # Das Wort „LED“ steht jetzt für die Zahl „23“.
GPIO.setup(LED,GPIO.OUT)          # „LED” (Pin 23) ist ein Ausgang.
Dimmer = GPIO.PWM(LED,100)  # Wir legen die LED als PWM mit einer Frequenz von 100 fest
Dimmer.start(0)                               # Dimmer wird gestartet
# Hier beginnt die Schleife
try:
while True:                                     #while-Schleife damit das Programm durchgehend läuft
for dc in range(0,101,5):          # Schleife des Tastgrads in 5er-Schritten.
Dimmer.ChangeDutyCycle(dc) # Ändern des Tastgrads des Dimmers.
time.sleep(0.1)                        # Warte 0.1 Sekunde.
for dc in range(100,-1,-5):      # Schleife des Tastgrads in -5er-Schritten.
Dimmer.ChangeDutyCycle(dc) # Ändern des Tastgrads des Dimmers.
time.sleep(0.1)                       # Warte 0.1 Sekunde.
except KeyboardInterrupt:            # Mit STRG+C unterbrechen wir das Programm
print (“Beendet”)                            # Schreibe “Beendet” in das Shell-Fenster
Dimmer.stop()                                 # Stop des Dimmers.
GPIO.cleanup()                                 # Beende das Programm.

In diesem Beispiel lernen wir eine weitere Form der Schleife kennen:
die for-Schleife. Auch diese Befehlszeile endet mit einem Doppelpunkt und anschließender Einrückung (engl. indentation) der zu wiederholenden Zeilen.

Die Variable dc (für duty cycle) wird im Bereich (engl. range) 0 bis ausschließlich 101 in Fünfer-Zählschritten vergrößert:
for dc in range(0,101,5):

In der zweiten for-Schleife wird von 100 bis ausschließlich -1 rückwärts gezählt um -5:
for dc in range(100,-1,-5):

Der zweite Programmcode: Pulsierende LED am Raspberry Pi mit Pulsweitenmodulation mit gpiozero Befehl

# Wir starten mit dem Importieren der Programm-Module
from gpiozero import PWMLED
import time
pwmled = PWMLED(23)                 # optionaler Parameter frequency=xxx (default 100)
# Hier beginnt die Schleife
try:
while True:                     # while-Schleife damit das Programm durchgehend läuft
for dc in range(0,101,5):   # Hochzählen des Tasgrads in 5er-Schritten.
pwmled.value = (dc/100) # Ändern des Tastgrads (zwischen 0 und 1) des Dimmers.
time.sleep(0.1)         # Warte 0.1 Sekunde.
for dc in range(100,-1,-5): # Herunterzählen des Tastgrads in -5er-Schritten.
pwmled.value = (dc/100) # Ändern des Tastgrads (zwischen 0 und 1) des Dimmers.
time.sleep(0.1)         # Warte 0.1 Sekunde.
except KeyboardInterrupt:           # Mit STRG+C unterbrechen wir das Programm
print ("Beendet")               # SchreibeBeendet in das Shell-Fenster
#    pwmled.value = 0                # 1. Methode zum Löschen der LED bei Programmende
pwmled.close()                  # 2. Methode zum Löschen der LED bei Programmende

Insgesamt ist der Programm-Code bei gpiozero schlanker.

Bitte beachten: Der Tastgrad liegt zwischen 0 und 100%. Während das Argument für den Tastgrad bei RPi.GPIO der %-Wert ist, erwartet gpiozero den Wert als Gleitkommazahl (engl. floating point number) zwischen 0.0 und 1. 0, also statt 50 [%] 0.5.

Themen: #raspberry
Bitte gebe die Zeichenfolge in das nachfolgende Textfeld ein.

Die mit einem * markierten Felder sind Pflichtfelder.

Passende Artikel
Breadboard (Steckbrett) mit 830 Kontakten Breadboard (Steckbrett) mit 830 Kontakten
Inhalt 1 Stück
2,22 € *
Artikel-Nr.: FUN-1010553
Hinzufügen
40 Stück Breadboardkabel männlich/männlich (20cm) 40 Stück Breadboardkabel männlich/männlich (20cm)
Inhalt 1 Stück
1,74 € *
Artikel-Nr.: FUN-1010558
Hinzufügen
100 Stück - Leuchtdioden mit 5mm Durchmesser (5 Farben) 100 Stück - Leuchtdioden mit 5mm Durchmesser (5...
Inhalt 1 Stück
1,97 € *
Artikel-Nr.: F23107316
Hinzufügen
100 Widerstände - Je 20x 100 Ohm, 200 Ohm, 330 Ohm, 1K Ohm, 10K Ohm 100 Widerstände - Je 20x 100 Ohm, 200 Ohm, 330...
Inhalt 1 Stück
1,72 € *
Artikel-Nr.: F23107216
Hinzufügen