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

Using a Rotary Encoder with the Raspberry Pi

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


สิ่งที่คุณต้องการ

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

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

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

  1. ตัวเข้ารหัสแบบโรตารี่ไม่ตอบสนอง

    • ตรวจสอบ การกำหนดสายไฟและ GPIO PIN.
    • ทำให้มั่นใจ เปิดใช้งานตัวต้านทานแบบดึงขึ้น (PUD_UP).
  2. การข้ามขั้นตอนหรือการเคลื่อนไหวที่ไม่แน่นอน

    • เพิ่ม ความล่าช้า debounce (time.sleep(0.01)).
    • ใช้ GPIO ขัดจังหวะ แทนที่จะสำรวจ (GPIO.add_event_detect).
  3. ไม่ตรวจพบปุ่มกด

    • ทำให้มั่นใจ ปุ่มปุ่มเชื่อมต่ออย่างถูกต้อง ถึง gnd.
    • เพิ่มไฟล์ เวลา debounce 300ms ใน GPIO.add_event_detect.

บทสรุป

อัน เครื่องเข้ารหัสแบบโรตารี่ เป็นอุปกรณ์อินพุตอเนกประสงค์สำหรับ การนำทางเมนูการควบคุมมอเตอร์และการติดตามตำแหน่ง- โดยทำตามคำแนะนำนี้คุณสามารถรวมตัวเข้ารหัสแบบหมุนได้อย่างง่ายดาย 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.