Usando un encoder rotante con il Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

UN encoder rotante è un sensore che converte il movimento di rotazione in segnali digitali, consentendo un controllo preciso su posizione, velocità e direzione. È comunemente usato in Controlli di volume, robotica, macchine a CNC e navigazione del menu. Questa guida ti mostrerà come impostare e utilizzare un encoder rotante con un Raspberry Pi usando Python.


Cosa avrai bisogno

  1. Raspberry Pi (Qualsiasi modello con supporto GPIO, ad esempio PI 3, PI 4)
  2. Encoder rotante (ad es. KY-040)
  3. Breadboard e fili jumper
  4. Python installato Sul Raspberry Pi

Passaggio 1: capire come funziona un encoder rotante

UN encoder rotante Ha due output principali:

  • CLK (A) - Segnale di impulsi di clock
  • Dt (b) - segnale di direzione
  • SW (opzionale) - pulsante (utilizzato per la selezione delle opzioni)

Quando ruotato, il I pin CLK e DT generano impulsi. L'ordine di questi impulsi determina il direzione di rotazione.


Passaggio 2: cablaggio dell'encoder rotante su Raspberry Pi

PIN encoder rotante Pin di lampone Funzione
VCC 3.3V (pin 1) Alimentazione elettrica
GND Terra (pin 6) Terra
CLK (A) GPIO17 (PIN 11) Pulse dell'orologio
Dt (b) GPIO27 (PIN 13) Segnale di direzione
SW (pulsante) GPIO22 (PIN 15) Pulsante Premere

Passaggio 3: installa le librerie richieste

Aggiorna il tuo Raspberry Pi e installa il RPI.GPIO Libreria per la gestione degli interrupt GPIO.

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

Passaggio 4: codice Python per leggere l'input dell'encoder rotante

Codice Python di base per leggere la rotazione

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

Aggiunta del rilevamento del pulsante Aggiunta

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

Passaggio 5: applicazioni di un encoder rotante con Raspberry Pi

  1. Navigazione del menu - Scorri attraverso menu LCD o OLED.
  2. Controllo del volume - Regola il volume nelle applicazioni multimediali.
  3. Macchine a CNC - Controllo preciso del movimento nelle applicazioni motorie a passo d'appalto.
  4. Robotica - Rilevare la rotazione delle ruote per il monitoraggio della velocità e della posizione.
  5. Automazione della casa intelligente - Utilizzare come selettore per diverse funzioni domestiche.

Risoluzione dei problemi

  1. Encoder rotante non risponde

    • Controlla il Assegnazioni di cablaggio e pin GPIO.
    • Garantire I resistori pull-up sono abilitati (PUD_UP).
  2. Saltare i passi o un movimento irregolare

    • Aggiungere Delay di deboa (time.sleep(0.01)).
    • Utilizzo GPIO interrompe invece di polling (GPIO.add_event_detect).
  3. Pulsante Premere non rilevato

    • Garantire Il pin del pulsante è correttamente collegato a GND.
    • Aggiungi a Tempo di rimonta di 300 ms In GPIO.add_event_detect.

Conclusione

UN encoder rotante è un dispositivo di input versatile per Navigazione del menu, controllo del motore e monitoraggio della posizione. Seguendo questa guida, è possibile integrare facilmente un encoder rotante con il tuo Raspberry Pi per progetti interattivi. 🚀

Lascia un commento

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.