Folosind un codificator rotativ cu zmeura PI

Using a Rotary Encoder with the Raspberry Pi

codificator rotativ este un senzor care transformă mișcarea de rotație în semnale digitale, permițând un control precis asupra poziției, vitezei și direcției. Este utilizat frecvent în Controluri de volum, robotică, mașini CNC și navigare în meniu. Acest ghid vă va arăta cum să configurați și să utilizați un codificator rotativ cu un Raspberry Pi folosind Python.


Ce vei avea nevoie

  1. Zmeură pi (Orice model cu suport GPIO, de exemplu, PI 3, PI 4)
  2. Codificator rotativ (de exemplu, KY-040)
  3. Tablă de pâine și jumper
  4. Python instalat pe zmeură pi

Pasul 1: Înțelegerea modului în care funcționează un codificator rotativ

O codificator rotativ are două ieșiri principale:

  • Clk (a) - Semnal puls de ceas
  • DT (B) - Semnal de direcție
  • SW (opțional) - butonul de apăsare (utilizat pentru selectarea opțiunilor)

Când este rotit, The Pinii CLK și DT generează impulsuri. Ordinea acestor impulsuri determină Direcția de rotație.


Pasul 2: Cablarea codificatorului rotativ la zmeura PI

Pin codificator rotativ Pinul de zmeură pi Funcţie
VCC 3.3V (pinul 1) Alimentare electrică
GND Sol (pinul 6) Sol
Clk (a) GPIO17 (pinul 11) Puls de ceas
DT (B) GPIO27 (pinul 13) Semnal de direcție
SW (buton) GPIO22 (pinul 15) Apăsați buton

Pasul 3: Instalați bibliotecile necesare

Actualizați -vă Raspberry Pi și instalați RPI.GPIO Biblioteca pentru gestionarea întreruperilor GPIO.

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

Pasul 4: Cod Python pentru a citi intrarea codificatorului rotativ

Cod de bază Python pentru a citi rotația

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

Adăugarea butonului Apăsați detectarea

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

Pasul 5: Aplicații ale unui codificator rotativ cu Raspberry Pi

  1. Navigare în meniu - Parcurgeți meniurile LCD sau OLED.
  2. Controlul volumului - Reglați volumul în aplicațiile media.
  3. Mașini CNC - Controlul precis al mișcării în aplicațiile cu motor pas cu pas.
  4. Robotică - Detectați rotația roților pentru urmărirea vitezei și a poziției.
  5. Automatizare inteligentă pentru casă - Utilizați ca selector pentru diferite funcții de acasă.

Depanare

  1. Codificatorul rotativ nu răspunde

    • Verificați Alocări de cablare și pin GPIO.
    • Asigura Rezistențele de tragere sunt activate (PUD_UP).
  2. Trepte de sărituri sau mișcare neregulată

    • Adăuga întârziere de debutare (time.sleep(0.01)).
    • Utilizare GPIO întrerupe în loc de votare (GPIO.add_event_detect).
  3. Apăsați butonul care nu este detectat

    • Asigura Pinul de buton este conectat corect la GND.
    • Adăugați un Timp de debutare de 300ms în GPIO.add_event_detect.

Concluzie

O codificator rotativ este un dispozitiv de intrare versatil pentru Navigare în meniu, controlul motorului și urmărirea poziției. Urmărind acest ghid, puteți integra cu ușurință un codificator rotativ cu Zmeură pi pentru proiecte interactive. 🚀

Lasă un comentariu

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.