A โรตารีเอนโคเดอร์ เป็นเซนเซอร์ที่แปลงการเคลื่อนที่แบบหมุนเป็นสัญญาณดิจิทัล ช่วยให้ควบคุมตำแหน่ง ความเร็ว และทิศทางได้อย่างแม่นยำ โดยมักใช้ใน การควบคุมระดับเสียง หุ่นยนต์ เครื่อง CNC และการนำทางเมนู. คู่มือนี้จะแสดงวิธีการติดตั้งและใช้งาน โรตารีเอนโคเดอร์ กับ Raspberry Pi โดยใช้ Python.
สิ่งที่คุณต้องเตรียม
- Raspberry Pi (รุ่นใดก็ได้ที่รองรับ GPIO เช่น Pi 3, Pi 4)
- โรตารีเอนโคเดอร์ (เช่น KY-040)
- แผงทดลอง (Breadboard) และสายจัมเปอร์
- ติดตั้ง Python แล้ว บน Raspberry Pi
ขั้นตอนที่ 1: ทำความเข้าใจการทำงานของโรตารีเอนโคเดอร์
A โรตารีเอนโคเดอร์ มีเอาต์พุตหลักสองตัว:
- CLK (A) – สัญญาณพัลส์นาฬิกา
- DT (B) – สัญญาณทิศทาง
- SW (ไม่จำเป็น) – ปุ่มกด (ใช้สำหรับเลือกตัวเลือก)
เมื่อหมุน, ขา CLK และ DT จะสร้างพัลส์. ลำดับของพัลส์เหล่านี้จะกำหนด ทิศทางการหมุน.
ขั้นตอนที่ 2: การต่อสายโรตารีเอนโคเดอร์กับ Raspberry Pi
| ขาโรตารีเอนโคเดอร์ | ขา Raspberry Pi | ฟังก์ชัน |
|---|---|---|
| VCC | 3.3V (Pin 1) | แหล่งจ่ายไฟ |
| GND | Ground (Pin 6) | กราวด์ |
| CLK (A) | GPIO17 (Pin 11) | พัลส์นาฬิกา |
| DT (B) | GPIO27 (Pin 13) | สัญญาณทิศทาง |
| SW (Button) | GPIO22 (Pin 15) | ปุ่มกด |
ขั้นตอนที่ 3: ติดตั้งไลบรารีที่จำเป็น
อัปเดต Raspberry Pi ของคุณและติดตั้งไลบรารี RPi.GPIO สำหรับจัดการ GPIO interrupts.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
ขั้นตอนที่ 4: โค้ด Python เพื่ออ่านข้อมูลจากโรตารีเอนโคเดอร์
โค้ด Python พื้นฐานเพื่ออ่านการหมุน
import RPi.GPIO as GPIO
import time
# กำหนดพิน GPIO
CLK = 17
DT = 27
counter = 0
last_state = None
# ตั้งค่า 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)
# อ่านสถานะเริ่มต้น
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 = "ตามเข็มนาฬิกา"
else:
counter -= 1
direction = "ทวนเข็มนาฬิกา"
print(f"ตำแหน่ง: {counter}, ทิศทาง: {direction}")
last_state = current_state
time.sleep(0.01) # หน่วงเวลาเพื่อป้องกันการเด้ง (debounce)
except KeyboardInterrupt:
print("กำลังออก...")
finally:
GPIO.cleanup()
เพิ่มการตรวจจับการกดปุ่ม
# กำหนดพินปุ่ม
SW = 22
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def button_pressed(channel):
print("กดปุ่ม!")
# เพิ่มการตรวจจับเหตุการณ์สำหรับการกดปุ่ม
GPIO.add_event_detect(SW, GPIO.FALLING, callback=button_pressed, bouncetime=300)
ขั้นตอนที่ 5: การประยุกต์ใช้โรตารีเอนโคเดอร์กับ Raspberry Pi
- การนำทางเมนู – เลื่อนไปมาภายในเมนูบนหน้าจอ LCD หรือ OLED.
- การควบคุมระดับเสียง – ปรับระดับเสียงในแอปมีเดีย.
- เครื่อง CNC – ควบคุมการเคลื่อนที่อย่างแม่นยำในการใช้งานมอเตอร์สเต็ปเปอร์.
- หุ่นยนต์ – ตรวจจับการหมุนของล้อเพื่อติดตามความเร็วและตำแหน่ง.
- ระบบอัตโนมัติในบ้าน (Smart Home) – ใช้เป็นตัวเลือกสำหรับฟังก์ชันต่างๆ ในบ้าน.
การแก้ไขปัญหา
-
โรตารีเอนโคเดอร์ไม่ตอบสนอง
- ตรวจสอบ การต่อสายและการกำหนดขา GPIO.
- ตรวจให้แน่ใจว่า มีการเปิดใช้งาน pull-up resistors (
PUD_UP).
-
การกระโดดข้ามขั้นตอนหรือการเคลื่อนที่ผิดปกติ
- เพิ่ม การหน่วงเวลาเพื่อป้องกันการเด้ง (
time.sleep(0.01)). - ใช้ interrupt ของ GPIO แทนการสอบถาม (polling) (
GPIO.add_event_detect).
- เพิ่ม การหน่วงเวลาเพื่อป้องกันการเด้ง (
-
ปุ่มกดไม่ถูกตรวจจับ
- ตรวจให้แน่ใจว่า ขาของปุ่มต่ออย่างถูกต้อง กับ GND.
- เพิ่ม เวลา debounce 300ms ใน
GPIO.add_event_detect.
สรุป
A โรตารีเอนโคเดอร์ เป็นอุปกรณ์อินพุตที่ใช้งานได้หลากหลายสำหรับ การนำทางเมนู การควบคุมมอเตอร์ และการติดตามตำแหน่ง. โดยการทำตามคู่มือนี้ คุณสามารถรวม โรตารีเอนโคเดอร์ เข้ากับ Raspberry Pi ของคุณได้อย่างง่ายดายสำหรับโปรเจกต์เชิงโต้ตอบ 🚀



