A enkoder obrotowy jest czujnikiem, który przekształca ruch obrotowy w sygnały cyfrowe, umożliwiając precyzyjną kontrolę nad pozycją, prędkością i kierunkiem. Jest powszechnie używany w Kontrola głośności, robotyka, maszyny CNC i nawigacja menu. Ten przewodnik pokaże, jak skonfigurować i używać enkodera obrotowego z Raspberry Pi za pomocą Pythona.
Czego będziesz potrzebować
- Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
- Enkoder obrotowy (np. KY-040)
- Druty chleba i skoczków
- Zainstalowany Python na Raspberry Pi
Krok 1: Zrozumienie, jak działa enkoder obrotowy
A enkoder obrotowy ma dwa główne wyjścia:
- CLK (a) - Sygnał impulsu zegara
- Dt (b) - Sygnał kierunkowy
- SW (fakultatywny) - Przycisk (używany do wyboru opcji)
Po obróceniu Piny CLK i DT generują impulsy. Kolejność tych impulsów określa kierunek obrotu.
Krok 2: Okablowanie enkodera obrotowego do Raspberry Pi
Pin enkoder obrotowy | Pin Raspberry Pi | Funkcjonować |
---|---|---|
VCC | 3,3 V (pin 1) | Zasilacz |
GND | Uziemienie (pin 6) | Grunt |
CLK (a) | GPIO17 (PIN 11) | Puls zegara |
Dt (b) | GPIO27 (PIN 13) | Sygnał kierunku |
SW (przycisk) | GPIO22 (PIN 15) | Przycisk Naciśnij |
Krok 3: Zainstaluj wymagane biblioteki
Zaktualizuj swoje Raspberry Pi i zainstaluj Rpi.gpio Biblioteka do obsługi przerwań GPIO.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Krok 4: Kod Pythona do odczytania wejścia enkodera obrotowego
Podstawowy kod Pythona do odczytania rotacji
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()
Dodanie przycisku naciśnij wykrywanie
# 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)
Krok 5: Zastosowania enkodera obrotowego z Raspberry Pi
- Nawigacja menu - Przewiń menu LCD lub OLED.
- Kontrola głośności - Dostosuj wolumin w aplikacjach multimedialnych.
- Maszyny CNC - Precyzyjna kontrola ruchu w zastosowaniach silnika krokowego.
- Robotyka - Wykryj obrót kół w celu śledzenia prędkości i pozycji.
- Automatyzacja inteligentnej domu - Użyj jako selektora dla różnych funkcji domowych.
Rozwiązywanie problemów
-
Enkoder obrotowy nie odpowiadający
- Sprawdź Przypisania okablowania i GPIO.
- Zapewnić Rezystory podciągające są włączone (
PUD_UP
).
-
Pomijanie kroków lub nieregularnego ruchu
- Dodać Opóźnienie debuna (
time.sleep(0.01)
). - Używać GPIO przerwie zamiast sondowania (
GPIO.add_event_detect
).
- Dodać Opóźnienie debuna (
-
Przycisk Naciśnij Nie wykryty
- Zapewnić Przycisk jest poprawnie podłączony do GND.
- Dodaj czas delekcja 300 ms W
GPIO.add_event_detect
.
Wniosek
A enkoder obrotowy jest wszechstronnym urządzeniem wejściowym dla Nawigacja menu, kontrola silnika i śledzenie pozycji. Postępując zgodnie z tym przewodnikiem, możesz łatwo zintegrować enkoder obrotowy z swoim Raspberry Pi do interaktywnych projektów. 🚀