ได้รับส่งมอบฟรีในคําสั่งทั้งหมดมากกว่า 20 ปอนด์!

ใช้เครื่องเข้ารหัสแบบโรตารี่กับ Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

A โรตารีเอนโคเดอร์ เป็นเซนเซอร์ที่แปลงการเคลื่อนที่แบบหมุนเป็นสัญญาณดิจิทัล ช่วยให้ควบคุมตำแหน่ง ความเร็ว และทิศทางได้อย่างแม่นยำ โดยมักใช้ใน การควบคุมระดับเสียง หุ่นยนต์ เครื่อง CNC และการนำทางเมนู. คู่มือนี้จะแสดงวิธีการติดตั้งและใช้งาน โรตารีเอนโคเดอร์ กับ Raspberry Pi โดยใช้ Python.


สิ่งที่คุณต้องเตรียม

  1. Raspberry Pi (รุ่นใดก็ได้ที่รองรับ GPIO เช่น Pi 3, Pi 4)
  2. โรตารีเอนโคเดอร์ (เช่น KY-040)
  3. แผงทดลอง (Breadboard) และสายจัมเปอร์
  4. ติดตั้ง 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

  1. การนำทางเมนู – เลื่อนไปมาภายในเมนูบนหน้าจอ LCD หรือ OLED.
  2. การควบคุมระดับเสียง – ปรับระดับเสียงในแอปมีเดีย.
  3. เครื่อง CNC – ควบคุมการเคลื่อนที่อย่างแม่นยำในการใช้งานมอเตอร์สเต็ปเปอร์.
  4. หุ่นยนต์ – ตรวจจับการหมุนของล้อเพื่อติดตามความเร็วและตำแหน่ง.
  5. ระบบอัตโนมัติในบ้าน (Smart Home) – ใช้เป็นตัวเลือกสำหรับฟังก์ชันต่างๆ ในบ้าน.

การแก้ไขปัญหา

  1. โรตารีเอนโคเดอร์ไม่ตอบสนอง

    • ตรวจสอบ การต่อสายและการกำหนดขา GPIO.
    • ตรวจให้แน่ใจว่า มีการเปิดใช้งาน pull-up resistors (PUD_UP).
  2. การกระโดดข้ามขั้นตอนหรือการเคลื่อนที่ผิดปกติ

    • เพิ่ม การหน่วงเวลาเพื่อป้องกันการเด้ง (time.sleep(0.01)).
    • ใช้ interrupt ของ GPIO แทนการสอบถาม (polling) (GPIO.add_event_detect).
  3. ปุ่มกดไม่ถูกตรวจจับ

    • ตรวจให้แน่ใจว่า ขาของปุ่มต่ออย่างถูกต้อง กับ GND.
    • เพิ่ม เวลา debounce 300ms ใน GPIO.add_event_detect.

สรุป

A โรตารีเอนโคเดอร์ เป็นอุปกรณ์อินพุตที่ใช้งานได้หลากหลายสำหรับ การนำทางเมนู การควบคุมมอเตอร์ และการติดตามตำแหน่ง. โดยการทำตามคู่มือนี้ คุณสามารถรวม โรตารีเอนโคเดอร์ เข้ากับ Raspberry Pi ของคุณได้อย่างง่ายดายสำหรับโปรเจกต์เชิงโต้ตอบ 🚀

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

แสดงความคิดเห็น