อัน เครื่องเข้ารหัสแบบโรตารี่ เป็นเซ็นเซอร์ที่แปลงการเคลื่อนที่แบบหมุนเป็นสัญญาณดิจิตอลช่วยให้สามารถควบคุมตำแหน่งความเร็วและทิศทางได้อย่างแม่นยำ มันมักจะใช้ใน การควบคุมระดับเสียงหุ่นยนต์เครื่องซีเอ็นซีและการนำทางเมนู- คู่มือนี้จะแสดงวิธีการตั้งค่าและใช้ rotary encoder กับ Raspberry Pi โดยใช้ Python
สิ่งที่คุณต้องการ
- Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO เช่น PI 3, PI 4)
- rotary encoder (เช่น KY-040)
- เครื่องหั่นขนมปังและสายจัมเปอร์
- ติดตั้ง Python บนราสเบอร์รี่ pi
ขั้นตอนที่ 1: ทำความเข้าใจว่าเครื่องเข้ารหัสแบบโรตารี่ทำงานอย่างไร
อัน เครื่องเข้ารหัสแบบโรตารี่ มีสองเอาต์พุตหลัก:
- clk (a) - สัญญาณชีพจรนาฬิกา
- dt (b) - สัญญาณทิศทาง
- SW (ไม่จำเป็น) - ปุ่มกด (ใช้สำหรับการเลือกตัวเลือก)
เมื่อหมุน หมุด clk และ dt สร้างพัลส์- ลำดับของพัลส์เหล่านี้กำหนด ทิศทางของการหมุน.
ขั้นตอนที่ 2: เดินสายตัวเข้ารหัสโรตารี่ไปยัง Raspberry Pi
พิน rotary encoder | Raspberry Pi Pin | การทำงาน |
---|---|---|
VCC | 3.3V (พิน 1) | แหล่งจ่ายไฟ |
gnd | พื้นดิน (พิน 6) | พื้น |
clk (a) | GPIO17 (พิน 11) | ชีพจรนาฬิกา |
dt (b) | GPIO27 (พิน 13) | สัญญาณทิศทาง |
SW (ปุ่ม) | GPIO22 (พิน 15) | กดปุ่ม |
ขั้นตอนที่ 3: ติดตั้งไลบรารีที่ต้องการ
อัปเดต Raspberry Pi ของคุณและติดตั้งไฟล์ rpi.gpio ห้องสมุดสำหรับการจัดการขัดจังหวะ GPIO
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
ขั้นตอนที่ 4: รหัส Python เพื่ออ่านอินพุต rotary encoder
รหัส Python พื้นฐานเพื่ออ่านการหมุน
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()
การเพิ่มปุ่มกดตรวจจับ
# 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)
ขั้นตอนที่ 5: แอปพลิเคชันของ rotary encoder กับ Raspberry Pi
- การนำทางเมนู - เลื่อนผ่านเมนู LCD หรือ OLED
- การควบคุมระดับเสียง - ปรับระดับเสียงในแอปพลิเคชันสื่อ
- เครื่องซีเอ็นซี - การควบคุมการเคลื่อนไหวที่แม่นยำในแอปพลิเคชันมอเตอร์สเต็ปเปอร์
- หุ่นยนต์ - ตรวจจับการหมุนของล้อสำหรับความเร็วและการติดตามตำแหน่ง
- ระบบอัตโนมัติในบ้านอัจฉริยะ - ใช้เป็นตัวเลือกสำหรับฟังก์ชั่นบ้านที่แตกต่างกัน
การแก้ไขปัญหา
-
ตัวเข้ารหัสแบบโรตารี่ไม่ตอบสนอง
- ตรวจสอบ การกำหนดสายไฟและ GPIO PIN.
- ทำให้มั่นใจ เปิดใช้งานตัวต้านทานแบบดึงขึ้น (
PUD_UP
).
-
การข้ามขั้นตอนหรือการเคลื่อนไหวที่ไม่แน่นอน
- เพิ่ม ความล่าช้า debounce (
time.sleep(0.01)
). - ใช้ GPIO ขัดจังหวะ แทนที่จะสำรวจ (
GPIO.add_event_detect
).
- เพิ่ม ความล่าช้า debounce (
-
ไม่ตรวจพบปุ่มกด
- ทำให้มั่นใจ ปุ่มปุ่มเชื่อมต่ออย่างถูกต้อง ถึง gnd.
- เพิ่มไฟล์ เวลา debounce 300ms ใน
GPIO.add_event_detect
.
บทสรุป
อัน เครื่องเข้ารหัสแบบโรตารี่ เป็นอุปกรณ์อินพุตอเนกประสงค์สำหรับ การนำทางเมนูการควบคุมมอเตอร์และการติดตามตำแหน่ง- โดยทำตามคำแนะนำนี้คุณสามารถรวมตัวเข้ารหัสแบบหมุนได้อย่างง่ายดาย Raspberry Pi สำหรับโครงการเชิงโต้ตอบ 🚀