FREE SHIPPING ON ALL ORDERS OVER £20

60 DAY HASSLE-FREE RETURNS

Met behulp van een roterende encoder met de Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

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

  1. Raspberry Pi (elk model met GPIO-ondersteuning, bijv. Pi 3, Pi 4)
  2. Rotary Encoder (bijv. KY-040)
  3. Breadboard en jumperkabels
  4. 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

  1. Menunavigatie – Scroll door LCD- of OLED-menu's.
  2. Volumeregeling – Pas het volume aan in mediatoepassingen.
  3. CNC-machines – Nauwkeurige bewegingscontrole in stappenmotortoepassingen.
  4. Robotica – Detecteer wielrotatie voor snelheids- en positietracking.
  5. Smart Home-automatisering – Gebruik als keuzeschakelaar voor verschillende huisfuncties.

Probleemoplossing

  1. Rotary encoder reageert niet

    • Controleer de bedrading en GPIO-pintoewijzingen.
    • Zorg ervoor dat pull-up weerstanden zijn ingeschakeld (PUD_UP).
  2. 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).
  3. 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. 🚀

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

Laat een reactie achter