
Met deze tutorial wil ik met een druk op de knop een led langzaam laten oplichten en door nog een keer te drukken de led langzaam laten uitdoven. Aangezien ik PWM gebruik voor het aansturen van de led ben ik in staat hiermee mijn 220V dimmer aan te sturen. De verlichting op mijn kamer gaat nu chic aan en uit.
Daar gaan we…
Sluit de drukknop en de led als volgt op de Raspberry Pi aan:
- De anode (+) van de led wordt via een weerstand (~220-330Ω) met GPIO18 (pin 12) verbonden.
- De kathode (-) van de led wordt met ground (GND) verbonden.
- Sluit een contact van de drukknop aan op GPIO17 (pin 11). Ik gebruik in het script de interne pull-up weerstand, er is dus geen extra weerstand nodig.
- Het andere contact van de drukknop wordt met ground (GND) verbonden.
Met elke druk op de knop wisselt het in- en uitschakelen door gedimd in te schakelen (0% → 100%) en uit te schakelen (100% → 0%), via PWM op GPIO18.
Het script
In het script kun je met FADE_STEP_DELAY instellen hoe snel het dimmen gaat (kleiner = sneller). Met FADE_STEP_SIZE stel je de stapgrootte per keer in.
Maak met je favoriete editor zoals nano een bestand aan, zoals led_dimmer.py. Kopieer onderstaand script en plak deze in de editor. Sla het bestand op en start het met python led_dimmer.py.
#!/usr/bin/env python3
"""
LED dimmer met drukknop voor Raspberry Pi
-------------------------------------------
- Eén druk op de knop: LED dimt geleidelijk IN (van uit naar vol)
- Volgende druk: LED dimt geleidelijk UIT (van vol naar uit)
- enzovoort...
Aansluiting:
LED: GPIO18 (pin 12) -> weerstand (~220-330 ohm) -> LED -> GND
Knop: GPIO17 (pin 11) -> knop -> GND
(interne pull-up wordt gebruikt, dus geen externe weerstand nodig)
"""
import RPi.GPIO as GPIO
import time
# ------------- Instellingen -------------
LED_PIN = 18 # PWM-geschikte GPIO-pin voor de LED
BUTTON_PIN = 17 # GPIO-pin voor de drukknop
PWM_FREQ = 1000 # PWM-frequentie in Hz
FADE_STEP_DELAY = 0.01 # tijd (s) tussen elke helderheidsstap -> hoe sneller/langzamer het dimmen gaat
FADE_STEP_SIZE = 1 # stapgrootte in procent per keer (1-100)
DEBOUNCE_TIME = 0.2 # ontdenderingstijd voor de knop in seconden
# ------------- GPIO setup -------------
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # knop naar GND, dus pull-up
pwm = GPIO.PWM(LED_PIN, PWM_FREQ)
pwm.start(0) # LED begint uit (0% duty cycle)
led_aan = False # huidige status: uit
huidige_helderheid = 0 # 0-100%
def fade_naar(doel_helderheid):
"""Dimt de LED geleidelijk naar de opgegeven helderheid (0-100)."""
global huidige_helderheid
if doel_helderheid > huidige_helderheid:
stap = FADE_STEP_SIZE
else:
stap = -FADE_STEP_SIZE
while huidige_helderheid != doel_helderheid:
huidige_helderheid += stap
# zorg dat we niet over het doel heen schieten
if (stap > 0 and huidige_helderheid > doel_helderheid) or \
(stap < 0 and huidige_helderheid < doel_helderheid):
huidige_helderheid = doel_helderheid
pwm.ChangeDutyCycle(huidige_helderheid)
time.sleep(FADE_STEP_DELAY)
def wacht_op_knopdruk():
"""Wacht tot de knop wordt ingedrukt (blocking, met eenvoudige debounce)."""
GPIO.wait_for_edge(BUTTON_PIN, GPIO.FALLING)
time.sleep(DEBOUNCE_TIME) # ontdendering
try:
print("Klaar. Druk op de knop om de LED te dimmen (Ctrl+C om te stoppen).")
while True:
wacht_op_knopdruk()
led_aan = not led_aan # status omdraaien
if led_aan:
print("Dimmen naar AAN...")
fade_naar(100)
else:
print("Dimmen naar UIT...")
fade_naar(0)
except KeyboardInterrupt:
print("\nProgramma gestopt door gebruiker.")
finally:
pwm.stop()
GPIO.cleanup()230V PWM-dimmer
Mocht je willen weten welke 230V dimmer ik gebruik? Hier is de link: https://www.picademie.nl/index.php/2020/10/25/dimmer-voor-lamp-230v/
Conclusie
Om een led en daarmee een 230V lamp die via een PWM-dimmer aangesloten is met slechts één drukknop mooi in- en uit te schakelen is dit een chique oplossing.
Have A Nice Day!

Laat een reactie achter