Met behulp van een roterende encoder met de Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

roterende encoder is een sensor die rotatiebeweging omzet in digitale signalen, waardoor nauwkeurige controle over positie, snelheid en richting mogelijk is. Het wordt vaak gebruikt in Volumebesturing, robotica, CNC -machines en menusavigatie. Deze gids laat je zien hoe je een roterende encoder kunt instellen en gebruiken met een Raspberry Pi met behulp van Python.


Wat u nodig hebt

  1. Raspberry Pi (Elk model met GPIO -ondersteuning, bijvoorbeeld PI 3, PI 4)
  2. Rotary Encoder (bijv. KY-040)
  3. Breadboard en jumper draden
  4. Python geïnstalleerd Op de Raspberry Pi

Stap 1: Inzicht in hoe een roterende encoder werkt

A roterende encoder heeft twee hoofduitgangen:

  • Clk (a) - Klokpulssignaal
  • DT (B) - Richtingssignaal
  • SW (Optioneel) - druk op de knop (gebruikt voor het selecteren van opties)

Wanneer gedraaid, de CLK- en DT -pinnen genereren pulsen. De volgorde van deze pulsen bepaalt de rotatierichting.


Stap 2: De roterende encoder bedraden naar de Raspberry Pi

Roterende encoderspin Raspberry Pi Pin Functie
VCC 3.3V (pin 1) Stroomvoorziening
GND Grond (pin 6) Grond
Clk (a) Gpio17 (pin 11) Klokpuls
DT (B) Gpio27 (pin 13) Richtingssignaal
SW (knop) GPIO22 (pin 15) Druk op de knop

Stap 3: Installeer vereiste bibliotheken

Update uw Raspberry Pi en installeer de Rpi.gpio Bibliotheek voor het afhandelen van GPIO -onderbrekingen.

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

Stap 4: Python -code om Rotary Encoder Input te lezen

Basic Python -code om rotatie te lezen

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

Knop toevoegen Druk op Detectie

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

Stap 5: Toepassingen van een roterende encoder met Raspberry Pi

  1. Menu -navigatie - Scroll door LCD of OLED -menu's.
  2. Volumeregeling - Pas het volume aan in mediatoepassingen.
  3. CNC -machines - Nauwkeurige bewegingscontrole in stappenmotoroepassingen.
  4. Robotica - Detecteer wielrotatie voor snelheid en positie volgen.
  5. Smart Home Automation - Gebruik als selector voor verschillende thuisfuncties.

Problemen oplossen

  1. Rotary Encoder reageert niet

    • Controleer de Bedrading en GPIO -pin -toewijzingen.
    • Ervoor zorgen Pull-up weerstanden zijn ingeschakeld (PUD_UP).
  2. Stappen overslaan of onregelmatige beweging

    • Toevoegen Debounce vertraging (time.sleep(0.01)).
    • Gebruik GPIO onderbreekt in plaats van polling (GPIO.add_event_detect).
  3. Knop Druk niet gedetecteerd

    • Ervoor zorgen knoppen is correct verbonden naar GND.
    • Voeg een Debounce -tijd van 300ms in GPIO.add_event_detect.

Conclusie

A roterende encoder is een veelzijdig invoerapparaat voor Menu -navigatie, motorbesturing en positie volgen. Door deze gids te volgen, kunt u eenvoudig een roterende encoder integreren met uw Raspberry Pi voor interactieve projecten. 🚀

Laat een reactie achter

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.