Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

2.1.6 Drehgebermodul

Einführung

In diesem Projekt lernen Sie den Drehgeber kennen. Ein Drehgeber ist ein elektronischer Schalter mit einer Reihe regelmäßiger Impulse in einer streng zeitlichen Abfolge. In Kombination mit einem IC können damit Inkrement-, Dekrement-, Seitenwechsel- und andere Operationen wie Mausscrollen, Menüauswahl usw. durchgeführt werden.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/Part_two_25.png

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Drehgebermodul

KAUFEN

Schaltplan

../_images/image349.png

Experimentelle Verfahren

Schritt 1: Schalten Sie den Stromkreis.

../_images/2.1.6_fritzing.png

In diesem Beispiel können wir den Drehgeber-Pin direkt mit dem Raspberry Pi über ein Steckbrett und ein 40-poliges Kabel verbinden, verbinden Sie GND des Drehgebers mit GND, 「+」mit 5V, SW mit digitalem GPIO27, DT mit digitalem GPIO18 und CLK mit digitalem GPIO 17.

Schritt 2: Öffnen Sie die Code-Datei.

cd ~/raphael-kit/python/

Schritt 3: Ausführen.

sudo python3 2.1.6_RotaryEncoder.py

Sie werden die Zählung in der Konsole sehen. Wenn Sie den Drehgeber im Uhrzeigersinn drehen, wird die Zählung erhöht; drehen Sie ihn gegen den Uhrzeigersinn, wird die Zählung verringert. Wenn Sie den Schalter am Drehgeber drücken, wird der Zählwert auf null zurückgesetzt.

Code

Bemerkung

Sie können den untenstehenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Bevor Sie das tun, müssen Sie zum Quellcode-Pfad wie raphael-kit/python wechseln. Nach dem Ändern des Codes können Sie ihn direkt ausführen, um das Ergebnis zu sehen.

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time

clkPin = 17    # CLK Pin
dtPin = 18    # DT Pin
swPin = 27    # Button Pin

globalCounter = 0

flag = 0
Last_dt_Status = 0
Current_dt_Status = 0

def setup():
   GPIO.setmode(GPIO.BCM)       # Numbers GPIOs by physical location
   GPIO.setup(clkPin, GPIO.IN)    # input mode
   GPIO.setup(dtPin, GPIO.IN)
   GPIO.setup(swPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def rotaryDeal():
   global flag
   global Last_dt_Status
   global Current_dt_Status
   global globalCounter
   Last_dt_Status = GPIO.input(dtPin)
   while(not GPIO.input(clkPin)):
      Current_dt_Status = GPIO.input(dtPin)
      flag = 1
   if flag == 1:
      flag = 0
      if (Last_dt_Status == 0) and (Current_dt_Status == 1):
         globalCounter = globalCounter - 1
      if (Last_dt_Status == 1) and (Current_dt_Status == 0):
         globalCounter = globalCounter + 1

def swISR(channel):
   global globalCounter
   globalCounter = 0

def loop():
   global globalCounter
   tmp = 0   # Rotary Temperary

   GPIO.add_event_detect(swPin, GPIO.FALLING, callback=swISR)
   while True:
      rotaryDeal()
      if tmp != globalCounter:
         print ('globalCounter = %d' % globalCounter)
         tmp = globalCounter

def destroy():
   GPIO.cleanup()             # Release resource

if __name__ == '__main__':     # Program start from here
   setup()
   try:
      loop()
   except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.
      destroy()

Code-Erklärung

  • Lese den dtPin-Wert, wenn clkPin niedrig ist.

  • Wenn clkPin hoch ist und dtPin von niedrig auf hoch wechselt, verringert sich der Zähler, ansonsten erhöht sich der Zähler.

  • swPin gibt einen niedrigen Wert aus, wenn die Welle gedrückt wird.

Daraus ergibt sich der unten dargestellte Programmablauf:

../_images/2.1.6_flow.png

Phänomen-Bild

../_images/2.1.6rotary_ecoder.JPG