Za pomocą enkodera obrotowego z Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

enkoder obrotowy jest czujnikiem, który przekształca ruch obrotowy w sygnały cyfrowe, umożliwiając precyzyjną kontrolę nad pozycją, prędkością i kierunkiem. Jest powszechnie używany w Kontrola głośności, robotyka, maszyny CNC i nawigacja menu. Ten przewodnik pokaże, jak skonfigurować i używać enkodera obrotowego z Raspberry Pi za pomocą Pythona.


Czego będziesz potrzebować

  1. Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
  2. Enkoder obrotowy (np. KY-040)
  3. Druty chleba i skoczków
  4. Zainstalowany Python na Raspberry Pi

Krok 1: Zrozumienie, jak działa enkoder obrotowy

A enkoder obrotowy ma dwa główne wyjścia:

  • CLK (a) - Sygnał impulsu zegara
  • Dt (b) - Sygnał kierunkowy
  • SW (fakultatywny) - Przycisk (używany do wyboru opcji)

Po obróceniu Piny CLK i DT generują impulsy. Kolejność tych impulsów określa kierunek obrotu.


Krok 2: Okablowanie enkodera obrotowego do Raspberry Pi

Pin enkoder obrotowy Pin Raspberry Pi Funkcjonować
VCC 3,3 V (pin 1) Zasilacz
GND Uziemienie (pin 6) Grunt
CLK (a) GPIO17 (PIN 11) Puls zegara
Dt (b) GPIO27 (PIN 13) Sygnał kierunku
SW (przycisk) GPIO22 (PIN 15) Przycisk Naciśnij

Krok 3: Zainstaluj wymagane biblioteki

Zaktualizuj swoje Raspberry Pi i zainstaluj Rpi.gpio Biblioteka do obsługi przerwań GPIO.

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

Krok 4: Kod Pythona do odczytania wejścia enkodera obrotowego

Podstawowy kod Pythona do odczytania rotacji

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

Dodanie przycisku naciśnij wykrywanie

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

Krok 5: Zastosowania enkodera obrotowego z Raspberry Pi

  1. Nawigacja menu - Przewiń menu LCD lub OLED.
  2. Kontrola głośności - Dostosuj wolumin w aplikacjach multimedialnych.
  3. Maszyny CNC - Precyzyjna kontrola ruchu w zastosowaniach silnika krokowego.
  4. Robotyka - Wykryj obrót kół w celu śledzenia prędkości i pozycji.
  5. Automatyzacja inteligentnej domu - Użyj jako selektora dla różnych funkcji domowych.

Rozwiązywanie problemów

  1. Enkoder obrotowy nie odpowiadający

    • Sprawdź Przypisania okablowania i GPIO.
    • Zapewnić Rezystory podciągające są włączone (PUD_UP).
  2. Pomijanie kroków lub nieregularnego ruchu

    • Dodać Opóźnienie debuna (time.sleep(0.01)).
    • Używać GPIO przerwie zamiast sondowania (GPIO.add_event_detect).
  3. Przycisk Naciśnij Nie wykryty

    • Zapewnić Przycisk jest poprawnie podłączony do GND.
    • Dodaj czas delekcja 300 ms W GPIO.add_event_detect.

Wniosek

A enkoder obrotowy jest wszechstronnym urządzeniem wejściowym dla Nawigacja menu, kontrola silnika i śledzenie pozycji. Postępując zgodnie z tym przewodnikiem, możesz łatwo zintegrować enkoder obrotowy z swoim Raspberry Pi do interaktywnych projektów. 🚀

Zostaw komentarz

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.