Een rotary encoder is een sensor die draaibewegingen omzet in digitale signalen, waardoor nauwkeurige controle over positie, snelheid en richting mogelijk is. Het wordt veel gebruikt in volumeregelaars, robotica, CNC-machines en menunavigatie. Deze handleiding laat zien hoe je een rotary encoder instelt en gebruikt met een Raspberry Pi via Python.
Wat je nodig hebt
- Raspberry Pi (elk model met GPIO-ondersteuning, bijv. Pi 3, Pi 4)
- Rotary Encoder (bijv. KY-040)
- Breadboard en jumperkabels
- Python geïnstalleerd op de Raspberry Pi
Stap 1: Begrijpen hoe een rotary encoder werkt
Een rotary encoder heeft twee hoofduitgangen:
- CLK (A) – Klokpulssignaal
- DT (B) – Richtingssignaal
- SW (optioneel) – Drukknop (gebruikt voor het selecteren van opties)
Wanneer de encoder wordt gedraaid, genereren de CLK- en DT-pinnen pulsen. De volgorde van deze pulsen bepaalt de draairichting.
Stap 2: De rotary encoder aansluiten op de Raspberry Pi
| Rotary Encoder Pin | Raspberry Pi Pin | Functie |
|---|---|---|
| VCC | 3.3V (Pin 1) | Voeding |
| GND | Ground (Pin 6) | Aarde |
| CLK (A) | GPIO17 (Pin 11) | Klokpuls |
| DT (B) | GPIO27 (Pin 13) | Richtingssignaal |
| SW (Knop) | GPIO22 (Pin 15) | Knop indrukken |
Stap 3: Vereiste bibliotheken installeren
Update je Raspberry Pi en installeer de RPi.GPIO bibliotheek voor het afhandelen van GPIO-interrupts.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Stap 4: Python-code om de input van de rotary encoder te lezen
Basis Python-code om rotatie te lezen
import RPi.GPIO as GPIO
import time
# Definieer GPIO-pinnen
CLK = 17
DT = 27
counter = 0
last_state = None
# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(CLK, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Lees initiële status
last_state = GPIO.input(CLK)
try:
while True:
current_state = GPIO.input(CLK)
if current_state != last_state:
if GPIO.input(DT) != current_state:
counter += 1
direction = "Met de klok mee"
else:
counter -= 1
direction = "Tegen de klok in"
print(f"Positie: {counter}, Richting: {direction}")
last_state = current_state
time.sleep(0.01) # Debounce-vertraging
except KeyboardInterrupt:
print("Afsluiten...")
finally:
GPIO.cleanup()
Detectie van knopindruk toevoegen
# Definieer knoppin
SW = 22
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def button_pressed(channel):
print("Knop ingedrukt!")
# Voeg event-detectie toe voor knopindruk
GPIO.add_event_detect(SW, GPIO.FALLING, callback=button_pressed, bouncetime=300)
Stap 5: Toepassingen van een rotary encoder met Raspberry Pi
- Menunavigatie – Scroll door LCD- of OLED-menu's.
- Volumeregeling – Pas het volume aan in mediatoepassingen.
- CNC-machines – Nauwkeurige bewegingscontrole in stappenmotortoepassingen.
- Robotica – Detecteer wielrotatie voor snelheids- en positietracking.
- Smart Home-automatisering – Gebruik als keuzeschakelaar voor verschillende huisfuncties.
Probleemoplossing
-
Rotary encoder reageert niet
- Controleer de bedrading en GPIO-pintoewijzingen.
- Zorg ervoor dat pull-up weerstanden zijn ingeschakeld (
PUD_UP).
-
Stappen overslaan of onregelmatige beweging
- Voeg een debounce-vertraging toe (
time.sleep(0.01)). - Gebruik GPIO-interrupts in plaats van polling (
GPIO.add_event_detect).
- Voeg een debounce-vertraging toe (
-
Knopindruk wordt niet gedetecteerd
- Zorg ervoor dat de knoppin correct is verbonden met GND.
- Voeg een debounce-tijd van 300ms toe in
GPIO.add_event_detect.
Conclusie
Een rotary encoder is een veelzijdig invoerapparaat voor menunavigatie, motorbesturing en positietracking. Door deze handleiding te volgen, kun je eenvoudig een rotary encoder integreren met je Raspberry Pi voor interactieve projecten. 🚀



