Använda en roterande kodare med Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

En rotkodare är en sensor som omvandlar rotationsrörelse till digitala signaler, vilket möjliggör exakt kontroll över position, hastighet och riktning. Det används vanligtvis i Volymkontroller, robotik, CNC -maskiner och menynavigering. Den här guiden visar hur du ställer in och använder en roterande kodare med en Raspberry Pi med Python.


Vad du behöver

  1. Hallon (Varje modell med GPIO -stöd, t.ex. PI 3, PI 4)
  2. Rotary Encoder (t.ex. KY-040)
  3. Breadboard och jumpertrådar
  4. Python installerad på Raspberry Pi

Steg 1: Förstå hur en roterande kodare fungerar

En rotkodare har två huvudutgångar:

  • Clk (a) - Klockpulssignal
  • Dt (b) - riktningssignal
  • Sw (frivillig) - Tryckknapp (används för att välja alternativ)

När det roteras, CLK- och DT -stift genererar pulser. Ordningen på dessa pulser bestämmer rotationsriktning.


Steg 2: Kopplar rotationskodaren till Raspberry Pi

Rotationsnål Hallon pi Fungera
Vcc 3.3V (stift 1) Strömförsörjning
Gard Mark (stift 6) Jord
Clk (a) GPIO17 (stift 11) Klockpuls
Dt (b) GPIO27 (stift 13) Riktningssignal
SW (knapp) GPIO22 (stift 15) Knapptryckning

Steg 3: Installera obligatoriska bibliotek

Uppdatera din Raspberry Pi och installera Rpi.gpio Bibliotek för hantering av GPIO -avbrott.

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

Steg 4: Python -kod för att läsa Rotary Encoder Input

Grundläggande pythonkod för att läsa rotation

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

Lägga till knapptryckningsdetektering

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

Steg 5: Tillämpningar av en roterande kodare med Raspberry Pi

  1. Menynavigering - Bläddra genom LCD- eller OLED -menyer.
  2. Volymkontroll - Justera volymen i medieapplikationer.
  3. CNC -maskiner - Exakt rörelsekontroll i stegmotoriska applikationer.
  4. Robotik - Upptäck hjulrotation för hastighet och positionsspårning.
  5. Smart Home Automation - Använd som en väljare för olika hemfunktioner.

Felsökning

  1. Rotary Encoder svarar inte

    • Kontrollera Kabeldragning och GPIO -stiftuppdrag.
    • Säkerställa Pull-up-motstånd är aktiverade (PUD_UP).
  2. Hoppa över steg eller ojämn rörelse

    • Tillägga avskaffa försening (time.sleep(0.01)).
    • Använda GPIO avbryter istället för omröstning (GPIO.add_event_detect).
  3. Knapptryckning inte upptäckt

    • Säkerställa Knappstift är korrekt ansluten till GND.
    • Lägg till en Avbruten tid på 300 ms i GPIO.add_event_detect.

Slutsats

En rotkodare är en mångsidig inmatningsenhet för Menynavigering, motorstyrning och positionsspårning. Genom att följa den här guiden kan du enkelt integrera en roterande kodare med din Hallon för interaktiva projekt. 🚀

Lämna en kommentar

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.