Snelle levering
Kortingsvoorwaarden voor bedrijven
Tot 10% korting voor scholieren, studenten en onderwijsinstellingen
Verzending binnen Europa voor € 4,90
Filter sluiten
Filter op:

Pulserende LED op de Raspberry Pi (pulsbreedtemodulatie)

Van een LED wordt gezegd dat hij pulserend feller en donkerder wordt. (Ook wel"fade"genoemd, naar het Engelse werkwoord to fade = vervagen, verminderen). We willen dit graag implementeren met de zogenaamde pulsbreedtemodulatie. Je kunt hieronder meer informatie vinden over pulsbreedtemodulatie op de Raspberry Pi.

In de eerste stap bekijken we het schakelschema.

Het schakelschema: Pulserende LED op de Raspberry Pi (PWM)

Het schema van het circuit: Pulserende LED op de Raspberry Pi


Om de helderheid van een LED te variëren, is het niet voldoende om de spanning te variëren. Door het ontwerp (diode!) is er een bepaalde minimumspanning nodig; deze zogenaamde voorwaartse spanning ligt tussen ongeveer 1,6 en ongeveer 3 V, afhankelijk van de kleur van de LED. Boven deze voorwaartse spanning wordt de LED geleidend en wordt de stroom beperkt door een serieweerstand. Dus: in tegenstelling tot gloeilampen wordt de helderheid niet geregeld door het spanningsniveau. Overigens leveren de GPIO pinnen sowieso maar precies 3,3V.

De oplossing hiervoor is pulsbreedtemodulatie (PWM). Dit schakelt de gelijkspanning aan en uit met een hoge frequentie. De totale uitgezonden energie wordt bepaald door de verhouding tussen de duty cycle en de totale duur van een cyclus. Deze duty cycle kan tussen 0 en 100% liggen.

Op de Raspberry Pi kun je de softwarematige PWM op alle GPIO-pinnen gebruiken. Maar er zijn ook twee speciale hardware PWM pinnen. Aan de slag!

De eerste programmacode: Pulserende LED op de Raspberry Pi met pulsbreedtemodulatie

# We beginnen met het importeren van de programmamodules
import RPi.GPIO als GPIO # Let op: Let op de notatie: kleine i
importeer tijd
GPIO.setmode(GPIO.BCM) # We stellen de modus in op BCM
LED=23 # Het woord "LED" staat nu voor het getal "23".
GPIO.setup(LED,GPIO.OUT) # "LED" (pin 23) is een uitgang.
Dimmer = GPIO.PWM(LED,100) # We stellen de LED in als PWM met een frequentie van 100
Dimmer.start(0) # Dimmer wordt gestart
# De lus begint hier
proberen:
while True: #while loop zodat het programma continu doorloopt
voor dc in range(0,101,5):         # Lus de duty cycle in stappen van 5.
Dimmer.ChangeDutyCycle(dc) # Verander de duty cycle van de dimmer.
time.sleep(0,1) # Wacht 0,1 seconde.
for dc in range(100,-1,-5):     # Lus de activiteitscyclus instappen van -5.
Dimmer.ChangeDutyCycle(dc) # Verander de duty cycle van de dimmer.
time.sleep(0.1) # Wacht 0.1 seconde.
except KeyboardInterrupt: # Met CTRL+C onderbreken we het programma
print ("Finished") # Schrijf "Finished" in het commandoregelvenster
Dimmer.stop() # Stop de dimmer.
GPIO.cleanup() # Beëindig het programma.

In dit voorbeeld leren we een andere vorm van een lus kennen:
de for-lus. Deze opdrachtregel eindigt ook met een dubbele punt gevolgd door inspringen van de regels die herhaald moeten worden.

De variabele dc (voor duty cycle) wordt verhoogd in het bereik 0 tot en met 101 in stappen van vijf:
for dc in range(0,101,5):

De tweede for-lus telt terug van 100 naar -1 met -5:
for dc in range(100,-1,-5):

De tweede programmacode: Pulserende LED op Raspberry Pi met pulsbreedtemodulatie met gpiozero commando

# We beginnen met het importeren van de programmamodules
van gpiozero importeer PWMLED
import tijd
pwmled = PWMLED(23) # optionele parameter frequentie=xxx (standaard 100)
# De lus beginthier
proberen:
while True: # while-lus zodat het programma continudraait
for dc in range(0,101,5):  #Verhoog de tasgrade in stappen van 5.
pwmled.value = (dc/100) # Verander de duty cycle (tussen 0 en 1) van de dimmer.
time.sleep(0.1) # Wacht 0.1 seconde.
voor dc in range(100,-1,-5): # Tel de activiteitscyclus af in  stappen van -5.
pwmled.value = (dc/100) #Verander de duty cycle (tussen 0 en 1) van de dimmer.
time.sleep(0,1) # Wacht 0,1 seconde.
except KeyboardInterrupt: # Met CTRL+C onderbreken we het programma
print ("Finished") # Schrijf"Finished" in het commandoregelvenster
# pwmled.value = 0 # 1e methode omde LEDtewissen aan het einde van het programma
pwmled.close() # 2e methodeom deLED te wissen aan het einde van het programma

Over het algemeen is de programmacode slanker met gpiozero.

Let op: De duty cycle ligt tussen 0 en 100%. Terwijl het argument voor de duty cycle in RPi.GPIO de %-waarde is, verwacht gpiozero de waarde als een floating point getal ( getal) tussen 0,0 en 1. 0, dus 0,5 in plaats van 50 [%].

Onderwerpen: #raspberry
Voer de tekenreeks in het onderstaande tekstveld in.

De velden met een * zijn verplicht.

Bijpassende artikelen
Breadboard (insteekkaart) met 830 contacten Breadboard (insteekkaart) met 830 contacten
Inhoud 1 Stück
€ 2,22 *
Artikelnr: FUN-1010553
Voeg toe
40 stuks breadboardkabel mannelijk/vrouwelijk (20cm) 40 stuks breadboardkabel mannelijk/vrouwelijk...
Inhoud 1 Stück
€ 1,74 *
Artikelnr: FUN-1010558
Voeg toe
100 stuks - LED's met een diameter van 5 mm (5 kleuren) 100 stuks - LED's met een diameter van 5 mm (5...
Inhoud 1 Stück
€ 1,97 *
Artikelnr: F23107316
Voeg toe
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...
Inhoud 1 Stück
€ 1,72 *
Artikelnr: F23107216
Voeg toe