En rotkodare är en sensor som omvandlar rotationsrörelse till digitala signaler, vilket möjliggör exakt kontroll över position, hastighet och riktning. Det används vanligtvis i Volymkontroller, robotik, CNC -maskiner och menynavigering. Den här guiden visar hur du ställer in och använder en roterande kodare med en Raspberry Pi med Python.
Vad du behöver
- Hallon (Varje modell med GPIO -stöd, t.ex. PI 3, PI 4)
- Rotary Encoder (t.ex. KY-040)
- Breadboard och jumpertrådar
- Python installerad på Raspberry Pi
Steg 1: Förstå hur en roterande kodare fungerar
En rotkodare har två huvudutgångar:
- Clk (a) - Klockpulssignal
- Dt (b) - riktningssignal
- Sw (frivillig) - Tryckknapp (används för att välja alternativ)
När det roteras, CLK- och DT -stift genererar pulser. Ordningen på dessa pulser bestämmer rotationsriktning.
Steg 2: Kopplar rotationskodaren till Raspberry Pi
Rotationsnål | Hallon pi | Fungera |
---|---|---|
Vcc | 3.3V (stift 1) | Strömförsörjning |
Gard | Mark (stift 6) | Jord |
Clk (a) | GPIO17 (stift 11) | Klockpuls |
Dt (b) | GPIO27 (stift 13) | Riktningssignal |
SW (knapp) | GPIO22 (stift 15) | Knapptryckning |
Steg 3: Installera obligatoriska bibliotek
Uppdatera din Raspberry Pi och installera Rpi.gpio Bibliotek för hantering av GPIO -avbrott.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Steg 4: Python -kod för att läsa Rotary Encoder Input
Grundläggande pythonkod för att läsa rotation
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()
Lägga till knapptryckningsdetektering
# 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)
Steg 5: Tillämpningar av en roterande kodare med Raspberry Pi
- Menynavigering - Bläddra genom LCD- eller OLED -menyer.
- Volymkontroll - Justera volymen i medieapplikationer.
- CNC -maskiner - Exakt rörelsekontroll i stegmotoriska applikationer.
- Robotik - Upptäck hjulrotation för hastighet och positionsspårning.
- Smart Home Automation - Använd som en väljare för olika hemfunktioner.
Felsökning
-
Rotary Encoder svarar inte
- Kontrollera Kabeldragning och GPIO -stiftuppdrag.
- Säkerställa Pull-up-motstånd är aktiverade (
PUD_UP
).
-
Hoppa över steg eller ojämn rörelse
- Tillägga avskaffa försening (
time.sleep(0.01)
). - Använda GPIO avbryter istället för omröstning (
GPIO.add_event_detect
).
- Tillägga avskaffa försening (
-
Knapptryckning inte upptäckt
- Säkerställa Knappstift är korrekt ansluten till GND.
- Lägg till en Avbruten tid på 300 ms i
GPIO.add_event_detect
.
Slutsats
En rotkodare är en mångsidig inmatningsenhet för Menynavigering, motorstyrning och positionsspårning. Genom att följa den här guiden kan du enkelt integrera en roterande kodare med din Hallon för interaktiva projekt. 🚀