A döner kodlayıcı Dönme hareketini dijital sinyallere dönüştüren ve konum, hız ve yön üzerinde hassas kontrole izin veren bir sensördür. Yaygın olarak kullanılır Hacim kontrolleri, robotik, CNC makineleri ve menü gezinmesi. Bu kılavuz, Python kullanarak bir Raspberry Pi ile nasıl bir döner kodlayıcı kuracağınızı ve kullanacağınızı gösterecektir.
Ne İhtiyacınız Olacak
- Ahududu pi (GPIO destekli herhangi bir model, örneğin Pi 3, Pi 4)
- Döner kodlayıcı (örneğin, KY-040)
- Breadboard ve jumper telleri
- Python yüklü Raspberry Pi'de
1. Adım: Bir döner kodlayıcının nasıl çalıştığını anlamak
A döner kodlayıcı İki ana çıkışı vardır:
- CLK (A) - saat darbe sinyali
- DT (b) - Yön sinyali
- Sw (isteğe bağlı) - Push düğmesi (seçenekleri seçmek için kullanılır)
Döndüğünde, CLK ve DT pimleri darbeler üretir. Bu darbelerin sırası rotasyon yönü.
Adım 2: Döner kodlayıcının Raspberry Pi'ye bağlanması
Döner kodlayıcı pimi | Raspberry Pi Pimi | İşlev |
---|---|---|
VCC | 3.3V (pim 1) | Güç kaynağı |
Gnd | Zemin (pim 6) | Zemin |
CLK (A) | GPIO17 (pim 11) | Saat nabzı |
DT (b) | GPIO27 (pim 13) | Yön sinyali |
SW (Düğme) | GPIO22 (Pin 15) | Düğme Basın |
3. Adım: Gerekli kütüphaneleri kurun
Raspberry Pi'nizi güncelleyin ve Rpi.gpio GPIO kesintilerini işlemek için kütüphane.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Adım 4: Rotary Encoder Girişini Okumak İçin Python Kodu
Rotasyonu Okumak İçin Temel Python Kodu
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()
Düğme Ekleme Basın Tespiti
# 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)
Adım 5: Raspberry Pi ile Döner Kodlayıcının Uygulamaları
- Menü Gezinme - LCD veya OLED menülerinde kaydırın.
- Hacim kontrolü - Medya uygulamalarındaki hacmi ayarlayın.
- CNC makineleri - Step motor uygulamalarında hassas hareket kontrolü.
- Robot - Hız ve konum izleme için tekerlek dönüşünü tespit edin.
- Akıllı ev otomasyonu - Farklı ev işlevleri için seçici olarak kullanın.
Sorun giderme
-
Rotary kodlayıcı yanıt vermiyor
- Kontrol et Kablo ve GPIO PIN atamaları.
- Emin olmak Çekme dirençleri etkinleştirildi (
PUD_UP
).
-
Adımları veya düzensiz hareketi atlamak
- Eklemek Debounce Gecikme (
time.sleep(0.01)
). - Kullanmak GPIO keser Yoklama yerine (
GPIO.add_event_detect
).
- Eklemek Debounce Gecikme (
-
Düğmeye basın tespit edilmedi
- Emin olmak Düğme Pimi Düzgün Bağlı GND.
- Ekle 300 ms'lik deşarj süresi içinde
GPIO.add_event_detect
.
Çözüm
A döner kodlayıcı için çok yönlü bir giriş cihazıdır Menü Gezinme, Motor Kontrolü ve Konum Takibi. Bu kılavuzu izleyerek, bir döner kodlayıcıyı kolayca entegre edebilirsiniz. Ahududu pi Etkileşimli projeler için. 🚀