A roterende encoder is een sensor die rotatiebeweging omzet in digitale signalen, waardoor nauwkeurige controle over positie, snelheid en richting mogelijk is. Het wordt vaak gebruikt in Volumebesturing, robotica, CNC -machines en menusavigatie. Deze gids laat je zien hoe je een roterende encoder kunt instellen en gebruiken met een Raspberry Pi met behulp van Python.
Wat u nodig hebt
- Raspberry Pi (Elk model met GPIO -ondersteuning, bijvoorbeeld PI 3, PI 4)
- Rotary Encoder (bijv. KY-040)
- Breadboard en jumper draden
- Python geïnstalleerd Op de Raspberry Pi
Stap 1: Inzicht in hoe een roterende encoder werkt
A roterende encoder heeft twee hoofduitgangen:
- Clk (a) - Klokpulssignaal
- DT (B) - Richtingssignaal
- SW (Optioneel) - druk op de knop (gebruikt voor het selecteren van opties)
Wanneer gedraaid, de CLK- en DT -pinnen genereren pulsen. De volgorde van deze pulsen bepaalt de rotatierichting.
Stap 2: De roterende encoder bedraden naar de Raspberry Pi
Roterende encoderspin | Raspberry Pi Pin | Functie |
---|---|---|
VCC | 3.3V (pin 1) | Stroomvoorziening |
GND | Grond (pin 6) | Grond |
Clk (a) | Gpio17 (pin 11) | Klokpuls |
DT (B) | Gpio27 (pin 13) | Richtingssignaal |
SW (knop) | GPIO22 (pin 15) | Druk op de knop |
Stap 3: Installeer vereiste bibliotheken
Update uw Raspberry Pi en installeer de Rpi.gpio Bibliotheek voor het afhandelen van GPIO -onderbrekingen.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Stap 4: Python -code om Rotary Encoder Input te lezen
Basic Python -code om rotatie te lezen
import RPi.GPIO as GPIO
import time
# Define GPIO pins
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)
# Read initial state
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 = "Clockwise"
else:
counter -= 1
direction = "Counterclockwise"
print(f"Position: {counter}, Direction: {direction}")
last_state = current_state
time.sleep(0.01) # Debounce delay
except KeyboardInterrupt:
print("Exiting...")
finally:
GPIO.cleanup()
Knop toevoegen Druk op Detectie
# Define button pin
SW = 22
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def button_pressed(channel):
print("Button Pressed!")
# Add event detection for button press
GPIO.add_event_detect(SW, GPIO.FALLING, callback=button_pressed, bouncetime=300)
Stap 5: Toepassingen van een roterende encoder met Raspberry Pi
- Menu -navigatie - Scroll door LCD of OLED -menu's.
- Volumeregeling - Pas het volume aan in mediatoepassingen.
- CNC -machines - Nauwkeurige bewegingscontrole in stappenmotoroepassingen.
- Robotica - Detecteer wielrotatie voor snelheid en positie volgen.
- Smart Home Automation - Gebruik als selector voor verschillende thuisfuncties.
Problemen oplossen
-
Rotary Encoder reageert niet
- Controleer de Bedrading en GPIO -pin -toewijzingen.
- Ervoor zorgen Pull-up weerstanden zijn ingeschakeld (
PUD_UP
).
-
Stappen overslaan of onregelmatige beweging
- Toevoegen Debounce vertraging (
time.sleep(0.01)
). - Gebruik GPIO onderbreekt in plaats van polling (
GPIO.add_event_detect
).
- Toevoegen Debounce vertraging (
-
Knop Druk niet gedetecteerd
- Ervoor zorgen knoppen is correct verbonden naar GND.
- Voeg een Debounce -tijd van 300ms in
GPIO.add_event_detect
.
Conclusie
A roterende encoder is een veelzijdig invoerapparaat voor Menu -navigatie, motorbesturing en positie volgen. Door deze gids te volgen, kunt u eenvoudig een roterende encoder integreren met uw Raspberry Pi voor interactieve projecten. 🚀