Rotációs kódoló használata a Raspberry PI -vel

Using a Rotary Encoder with the Raspberry Pi

rotációs kódoló egy olyan érzékelő, amely a forgási mozgást digitális jelekké alakítja, lehetővé téve a helyzet, a sebesség és az irány pontos ellenőrzését. Általában használják hangerőszabályzók, robotika, CNC gépek és menü navigáció- Ez az útmutató megmutatja, hogyan lehet beállítani és használni egy Rotary kódolót egy Raspberry Pi -vel a Python segítségével.


Mire lesz szüksége

  1. Málna PI (Bármely modell GPIO -támogatással, például PI 3, PI 4)
  2. Rotary kódoló (például KY-040)
  3. Kenyérlemez és jumper vezetékek
  4. Python telepítve a málna pi -n

1. lépés: A forgó kódoló működésének megértése

A rotációs kódoló Két fő kimenete van:

  • CLK (A) - Óraimpulzusjel
  • DT (B) - Irányjel
  • SW (választható) - Nyomógomb (az opciók kiválasztására használják)

Ha elforgatják, a A CLK és a DT csapok impulzusokat generálnak- Ezen impulzusok sorrendje meghatározza a forgási irány.


2. lépés: A forgó kódolót a Raspberry Pi -hez vezetik be

Rotációs kódoló csap Málna pi tű Funkció
VCC 3.3 V (1. érintkező) Tápegység
GND Föld (6. érintkező) Föld
CLK (A) GPIO17 (11. érintkező) Óraimpulzus
DT (B) GPIO27 (13. érintkező) Irányjel
SW (gomb) GPIO22 (15. érintkező) Gombnyomás

3. lépés: Telepítse a szükséges könyvtárakat

Frissítse a Raspberry Pi -t, és telepítse a Rpi.gpio Könyvtár a GPIO megszakítások kezelésére.

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

4. lépés: Python kód a Rotary kódoló bemenetének olvasásához

Alapvető python kód a forgás olvasásához

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

A gombnyomás detektálásának hozzáadása

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

5. lépés: A Rotary kódoló alkalmazása a Raspberry PI -vel

  1. Menü navigáció - Görgessen az LCD -n vagy az OLED menükön.
  2. Hangerőszabályzó - Állítsa be a kötetet a média alkalmazásokban.
  3. CNC gépek - Pontos mozgásvezérlés a léptetőmotoros alkalmazásokban.
  4. Robotika - Detektálja a kerék forgását a sebesség és a helyzetkövetés érdekében.
  5. Okos otthoni automatizálás - Használjon választóként a különböző otthoni funkciókhoz.

Hibaelhárítás

  1. A rotációs kódoló nem válaszol

    • Ellenőrizze a Huzalozás és GPIO PIN -hozzászólások.
    • Biztosít A pull-up ellenállások engedélyezve vannak (PUD_UP).
  2. A lépések kihagyása vagy a szokatlan mozgás

    • Hozzáad elítélési késleltetés (time.sleep(0.01)).
    • Használat A GPIO megszakítja A szavazás helyett (GPIO.add_event_detect).
  3. A gombnyomás alatt a gombnyomás nem észlelve

    • Biztosít A gombos tű megfelelően van csatlakoztatva Gnd -hez.
    • Adj hozzá egy 300 ms elszámolási ideje -ben GPIO.add_event_detect.

Következtetés

A rotációs kódoló sokoldalú bemeneti eszköz Menü navigáció, motorvezérlés és pozíciókövetés- Az útmutató követésével könnyen integrálhatja a forgó kódolót a Málna PI Interaktív projektekhez. 🚀

Hagyj egy megjegyzést

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.