O codificator rotativ este un senzor care transformă mișcarea de rotație în semnale digitale, permițând un control precis asupra poziției, vitezei și direcției. Este utilizat frecvent în Controluri de volum, robotică, mașini CNC și navigare în meniu. Acest ghid vă va arăta cum să configurați și să utilizați un codificator rotativ cu un Raspberry Pi folosind Python.
Ce vei avea nevoie
- Zmeură pi (Orice model cu suport GPIO, de exemplu, PI 3, PI 4)
- Codificator rotativ (de exemplu, KY-040)
- Tablă de pâine și jumper
- Python instalat pe zmeură pi
Pasul 1: Înțelegerea modului în care funcționează un codificator rotativ
O codificator rotativ are două ieșiri principale:
- Clk (a) - Semnal puls de ceas
- DT (B) - Semnal de direcție
- SW (opțional) - butonul de apăsare (utilizat pentru selectarea opțiunilor)
Când este rotit, The Pinii CLK și DT generează impulsuri. Ordinea acestor impulsuri determină Direcția de rotație.
Pasul 2: Cablarea codificatorului rotativ la zmeura PI
Pin codificator rotativ | Pinul de zmeură pi | Funcţie |
---|---|---|
VCC | 3.3V (pinul 1) | Alimentare electrică |
GND | Sol (pinul 6) | Sol |
Clk (a) | GPIO17 (pinul 11) | Puls de ceas |
DT (B) | GPIO27 (pinul 13) | Semnal de direcție |
SW (buton) | GPIO22 (pinul 15) | Apăsați buton |
Pasul 3: Instalați bibliotecile necesare
Actualizați -vă Raspberry Pi și instalați RPI.GPIO Biblioteca pentru gestionarea întreruperilor GPIO.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Pasul 4: Cod Python pentru a citi intrarea codificatorului rotativ
Cod de bază Python pentru a citi rotația
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()
Adăugarea butonului Apăsați detectarea
# 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)
Pasul 5: Aplicații ale unui codificator rotativ cu Raspberry Pi
- Navigare în meniu - Parcurgeți meniurile LCD sau OLED.
- Controlul volumului - Reglați volumul în aplicațiile media.
- Mașini CNC - Controlul precis al mișcării în aplicațiile cu motor pas cu pas.
- Robotică - Detectați rotația roților pentru urmărirea vitezei și a poziției.
- Automatizare inteligentă pentru casă - Utilizați ca selector pentru diferite funcții de acasă.
Depanare
-
Codificatorul rotativ nu răspunde
- Verificați Alocări de cablare și pin GPIO.
- Asigura Rezistențele de tragere sunt activate (
PUD_UP
).
-
Trepte de sărituri sau mișcare neregulată
- Adăuga întârziere de debutare (
time.sleep(0.01)
). - Utilizare GPIO întrerupe în loc de votare (
GPIO.add_event_detect
).
- Adăuga întârziere de debutare (
-
Apăsați butonul care nu este detectat
- Asigura Pinul de buton este conectat corect la GND.
- Adăugați un Timp de debutare de 300ms în
GPIO.add_event_detect
.
Concluzie
O codificator rotativ este un dispozitiv de intrare versatil pentru Navigare în meniu, controlul motorului și urmărirea poziției. Urmărind acest ghid, puteți integra cu ușurință un codificator rotativ cu Zmeură pi pentru proiecte interactive. 🚀