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!

1.3.2 Servomotor

Einleitung

In diesem Projekt lernen wir, wie man einen Servomotor rotieren lässt.

Benötigte Komponenten

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

../_images/1.3.2_servo_list.png

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

Name

IN DIESEM KIT ENTHALTENE TEILE

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch separat über die unten stehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Servo

KAUFEN

Schaltplan

../_images/image337.png

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis auf.

../_images/image125.png

Schritt 2: Wechseln Sie in den Ordner des Codes.

cd ~/raphael-kit/python-pi5

Schritt 3: Führen Sie die ausführbare Datei aus.

sudo python3 1.3.2_Servo_zero.py

Nachdem das Programm ausgeführt wurde, wird der Servomotor von 0 Grad über 90 Grad zu 180 Grad rotieren und dann von 180 Grad über 90 Grad zurück zu 0 Grad, in einem Kreis.

Warnung

Wenn die Fehlermeldung RuntimeError: Cannot determine SOC peripheral base address angezeigt wird, lesen Sie bitte If gpiozero doesn’t work.

Code

Bemerkung

Sie können den unten stehenden Code modifizieren/zurücksetzen/kopieren/ausführen/stoppen. Aber zuvor müssen Sie zum Quellcodepfad wie raphael-kit/python-pi5 gehen. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.

#!/usr/bin/env python3
from gpiozero import Servo
from time import sleep

# Set the GPIO pin number where the servo motor is connected
myGPIO = 18

# Define a correction factor to fine-tune servo pulse width
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000  # Calculate maximum pulse width
minPW = (1.0 - myCorrection) / 1000  # Calculate minimum pulse width

# Initialize the Servo object with custom pulse widths
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)

try:
    while True:
        # Position the servo at the middle and wait
        servo.mid()
        print("mid")  # Indicate current position
        sleep(0.5)    # Brief pause for 0.5 seconds

        # Move the servo to its minimum position and wait
        servo.min()
        print("min")  # Indicate current position
        sleep(1)      # Hold position for 1 second

        # Return the servo to the middle position and wait
        servo.mid()
        print("mid")  # Indicate current position
        sleep(0.5)    # Brief pause for 0.5 seconds

        # Move the servo to its maximum position and wait
        servo.max()
        print("max")  # Indicate current position
        sleep(1)      # Hold position for 1 second

except KeyboardInterrupt:
    # Gracefully terminate the script on a keyboard interrupt (Ctrl+C)
    pass

Code-Erklärung

  1. Diese Importanweisungen holen die Klasse Servo für die Servosteuerung und die Funktion sleep für die Zeitsteuerung.

    #!/usr/bin/env python3
    from gpiozero import Servo
    from time import sleep
    
  2. Legt die GPIO-Pin-Nummer 18 für den Anschluss des Servomotors fest.

    # Set the GPIO pin number where the servo motor is connected
    myGPIO = 18
    
  3. Diese Zeilen definieren einen Korrekturfaktor und verwenden ihn, um die maximale und minimale Impulsbreite für den Servo zu berechnen und damit seinen Bewegungsbereich fein abzustimmen.

    # Define a correction factor to fine-tune servo pulse width
    myCorrection = 0.45
    maxPW = (2.0 + myCorrection) / 1000  # Calculate maximum pulse width
    minPW = (1.0 - myCorrection) / 1000  # Calculate minimum pulse width
    
  4. Initialisiert das Servo-Objekt mit der angegebenen GPIO-Pin-Nummer und benutzerdefinierten Impulsbreiten.

    # Initialize the Servo object with custom pulse widths
    servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
    
  5. Der try-Block enthält eine while True-Schleife, um den Servo kontinuierlich zu bewegen. Der Servo wird an den Mittel-, Min- und Max-Punkten positioniert, mit jeder Position, die ausgedruckt und für eine bestimmte Dauer gehalten wird.

    try:
        while True:
            # Position the servo at the middle and wait
            servo.mid()
            print("mid")  # Indicate current position
            sleep(0.5)    # Brief pause for 0.5 seconds
    
            # Move the servo to its minimum position and wait
            servo.min()
            print("min")  # Indicate current position
            sleep(1)      # Hold position for 1 second
    
            # Return the servo to the middle position and wait
            servo.mid()
            print("mid")  # Indicate current position
            sleep(0.5)    # Brief pause for 0.5 seconds
    
            # Move the servo to its maximum position and wait
            servo.max()
            print("max")  # Indicate current position
            sleep(1)      # Hold position for 1 second
    
    except KeyboardInterrupt:
        # Gracefully terminate the script on a keyboard interrupt (Ctrl+C)
        pass