A Rotary encoder ay isang sensor na nagko -convert ng pag -ikot ng paggalaw sa mga digital signal, na nagpapahintulot sa tumpak na kontrol sa posisyon, bilis, at direksyon. Ito ay karaniwang ginagamit sa Mga kontrol sa dami, robotics, CNC machine, at pag -navigate sa menu. Ang gabay na ito ay magpapakita sa iyo kung paano mag -set up at gumamit ng isang rotary encoder na may isang raspberry pi gamit ang Python.
Ano ang kakailanganin mo
- Raspberry Pi (Anumang modelo na may suporta sa GPIO, hal., PI 3, PI 4)
- Rotary Encoder (hal., KY-040)
- Mga wire ng tinapay at jumper
- Naka -install ang Python Sa Raspberry Pi
Hakbang 1: Pag -unawa kung paano gumagana ang isang rotary encoder
A Rotary encoder May dalawang pangunahing output:
- CLK (A) - signal ng pulso ng orasan
- DT (b) - signal ng direksyon
- SW (Opsyonal) - Push Button (ginamit para sa pagpili ng mga pagpipilian)
Kapag pinaikot, ang Ang mga pin ng CLK at DT ay bumubuo ng mga pulso. Ang pagkakasunud -sunod ng mga pulses na ito ay tumutukoy sa direksyon ng pag -ikot.
Hakbang 2: Ang mga kable ng rotary encoder sa Raspberry Pi
Rotary encoder pin | Raspberry Pi Pin | Function |
---|---|---|
VCC | 3.3v (pin 1) | Power Supply |
Gnd | Ground (pin 6) | Lupa |
CLK (A) | Gpio17 (pin 11) | Clock pulse |
DT (b) | GPIO27 (pin 13) | Signal ng direksyon |
SW (Button) | GPIO22 (pin 15) | Button Press |
Hakbang 3: I -install ang mga kinakailangang aklatan
I -update ang iyong Raspberry Pi at i -install ang Rpi.gpio Library para sa paghawak ng GPIO ay nagagambala.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Hakbang 4: Python code upang mabasa ang rotary encoder input
Pangunahing Python code upang mabasa ang pag -ikot
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()
Pagdaragdag ng pindutan ng pindutin ang pindutan
# 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)
Hakbang 5: Mga Aplikasyon ng isang Rotary Encoder na may Raspberry Pi
- Pag -navigate sa menu - Mag -scroll sa pamamagitan ng LCD o OLED menu.
- Kontrol ng dami - Ayusin ang dami sa mga aplikasyon ng media.
- CNC machine - tumpak na kontrol ng paggalaw sa mga aplikasyon ng motor ng stepper.
- Robotics - Makita ang pag -ikot ng gulong para sa bilis at pagsubaybay sa posisyon.
- Smart Home Automation - Gumamit bilang isang tagapili para sa iba't ibang mga pag -andar sa bahay.
Pag -aayos
-
Rotary encoder na hindi tumutugon
- Suriin ang mga kable at mga takdang gpio pin.
- Matiyak pinagana ang mga pull-up resistors (
PUD_UP
).
-
Mga hakbang sa paglaktaw o maling paggalaw
- Idagdag Debounce pagkaantala (
time.sleep(0.01)
). - Gumamit Nagambala ang GPIO sa halip na botohan (
GPIO.add_event_detect
).
- Idagdag Debounce pagkaantala (
-
Hindi napansin ang pindutan ng pindutan
- Matiyak Ang pindutan ng pin ay maayos na konektado sa gnd.
- Magdagdag ng a Debounce oras ng 300ms sa
GPIO.add_event_detect
.
Konklusyon
A Rotary encoder ay isang maraming nalalaman aparato ng pag -input para sa Pag -navigate sa menu, kontrol sa motor, at pagsubaybay sa posisyon. Sa pamamagitan ng pagsunod sa gabay na ito, madali mong isama ang isang rotary encoder sa iyong Raspberry Pi para sa mga interactive na proyekto. 🚀