Menggunakan rotary encoder dengan raspberry pi

Using a Rotary Encoder with the Raspberry Pi

Encoder putar adalah sensor yang mengubah gerakan rotasi menjadi sinyal digital, memungkinkan kontrol yang tepat atas posisi, kecepatan, dan arah. Itu biasanya digunakan dalam Kontrol Volume, Robotika, Mesin CNC, dan Navigasi Menu. Panduan ini akan menunjukkan kepada Anda cara mengatur dan menggunakan rotary encoder dengan raspberry pi menggunakan python.


Apa yang Anda Butuhkan

  1. Raspberry Pi (Model apa pun dengan dukungan GPIO, mis., Pi 3, pi 4)
  2. Rotary Encoder (mis., KY-040)
  3. Papan tempat memotong papan dan kabel jumper
  4. Python terpasang di raspberry pi

Langkah 1: Memahami cara kerja encoder putar

A Encoder putar memiliki dua output utama:

  • Clk (a) - sinyal denyut nadi jam
  • Dt (b) - Sinyal arah
  • Sw (opsional) - tombol tekan (digunakan untuk memilih opsi)

Saat diputar, Pin Clk dan DT menghasilkan pulsa. Urutan pulsa ini menentukan arah rotasi.


Langkah 2: Pengkabelan rotary encoder ke raspberry pi

Pin Encoder Rotary Raspberry Pi Pin Fungsi
Vcc 3.3V (pin 1) Catu daya
Gnd Ground (pin 6) Tanah
Clk (a) GPIO17 (pin 11) Denyut nadi jam
Dt (b) Gpio27 (pin 13) Sinyal arah
Sw (tombol) Gpio22 (pin 15) Tombol tekan

Langkah 3: Instal perpustakaan yang diperlukan

Perbarui Raspberry Pi Anda dan instal Rpi.gpio Perpustakaan untuk menangani interupsi GPIO.

sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio

Langkah 4: Kode Python Untuk Membaca Rotary Encoder Input

Kode Python dasar untuk membaca rotasi

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()

Menambahkan Deteksi Tekan Tombol

# 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)

Langkah 5: Aplikasi Encoder Rotary dengan Raspberry Pi

  1. Navigasi menu - Gulir melalui menu LCD atau OLED.
  2. Kontrol volume - Sesuaikan volume dalam aplikasi media.
  3. Mesin CNC - Kontrol gerakan yang tepat dalam aplikasi motor stepper.
  4. Robotika - Mendeteksi rotasi roda untuk pelacakan kecepatan dan posisi.
  5. Otomatisasi Rumah Cerdas - Gunakan sebagai pemilih untuk fungsi rumah yang berbeda.

Pemecahan masalah

  1. Encoder putar tidak menanggapi

    • Periksa penugasan kabel dan pin gpio.
    • Memastikan resistor pull-up diaktifkan (PUD_UP).
  2. Melewatkan langkah atau gerakan yang tidak menentu

    • Menambahkan Debounce Delay (time.sleep(0.01)).
    • Menggunakan GPIO menyela alih -alih pemungutan suara (GPIO.add_event_detect).
  3. Tombol tekan tidak terdeteksi

    • Memastikan Pin tombol terhubung dengan benar ke gnd.
    • Tambahkan a Debounce Time 300ms di dalam GPIO.add_event_detect.

Kesimpulan

A Encoder putar adalah perangkat input serbaguna untuk navigasi menu, kontrol motor, dan pelacakan posisi. Dengan mengikuti panduan ini, Anda dapat dengan mudah mengintegrasikan rotary encoder dengan Anda Raspberry Pi untuk proyek interaktif. 🚀

Tinggalkan komentar

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.