Raspberry Pi ile bir döner kodlayıcı kullanmak

Using a Rotary Encoder with the Raspberry Pi

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

  1. Ahududu pi (GPIO destekli herhangi bir model, örneğin Pi 3, Pi 4)
  2. Döner kodlayıcı (örneğin, KY-040)
  3. Breadboard ve jumper telleri
  4. 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ı

  1. Menü Gezinme - LCD veya OLED menülerinde kaydırın.
  2. Hacim kontrolü - Medya uygulamalarındaki hacmi ayarlayın.
  3. CNC makineleri - Step motor uygulamalarında hassas hareket kontrolü.
  4. Robot - Hız ve konum izleme için tekerlek dönüşünü tespit edin.
  5. Akıllı ev otomasyonu - Farklı ev işlevleri için seçici olarak kullanın.

Sorun giderme

  1. Rotary kodlayıcı yanıt vermiyor

    • Kontrol et Kablo ve GPIO PIN atamaları.
    • Emin olmak Çekme dirençleri etkinleştirildi (PUD_UP).
  2. Adımları veya düzensiz hareketi atlamak

    • Eklemek Debounce Gecikme (time.sleep(0.01)).
    • Kullanmak GPIO keser Yoklama yerine (GPIO.add_event_detect).
  3. 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. 🚀

Yorum bırak

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.