1.3.2 Servo

Einführung

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

Erforderliche Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

../_images/1.3.2_servo_list.png

Schaltplan

../_images/1.3.2_servo_schematic.png

Versuchsdurchführung

Schritt 1: Bauen Sie die Schaltung.

../_images/1.3.2_Servo_circuit.png

Schritt 2: Gehen Sie in den Ordner mit dem Code.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

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

sudo python3 1.3.2_Servo_zero.py

Nach Ausführung des Programms wird der Servomotor sich von 0 Grad auf 90 Grad bis 180 Grad drehen und dann von 180 Grad auf 90 Grad bis 0 Grad, in einem Kreis.

Code

Bemerkung

Sie können den folgenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Bevor Sie das tun, müssen Sie jedoch zum Quellcodepfad wie davinci-kit-for-raspberry-pi/python-pi5 gehen. Nach der Änderung des Codes können Sie ihn direkt ausführen, um die Wirkung zu sehen.

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

# Legen Sie die GPIO-Pin-Nummer fest, an die der Servomotor angeschlossen ist
myGPIO = 18

# Definieren Sie einen Korrekturfaktor, um die Pulsbreite des Servos feinzutunen
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000  # Berechnen Sie die maximale Pulsbreite
minPW = (1.0 - myCorrection) / 1000  # Berechnen Sie die minimale Pulsbreite

# Initialisieren Sie das Servo-Objekt mit benutzerdefinierten Pulsbreiten
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)

try:
    while True:
        # Positionieren Sie den Servo in der Mitte und warten Sie
        servo.mid()
        print("Mitte")  # Aktuelle Position anzeigen
        sleep(0.5)    # Kurze Pause für 0,5 Sekunden

        # Bewegen Sie den Servo in die Minimalposition und warten Sie
        servo.min()
        print("Minimal")  # Aktuelle Position anzeigen
        sleep(1)      # Position für 1 Sekunde halten

        # Bringen Sie den Servo in die Mitte zurück und warten Sie
        servo.mid()
        print("Mitte")  # Aktuelle Position anzeigen
        sleep(0.5)    # Kurze Pause für 0,5 Sekunden

        # Bewegen Sie den Servo in die Maximalposition und warten Sie
        servo.max()
        print("Maximal")  # Aktuelle Position anzeigen
        sleep(1)      # Position für 1 Sekunde halten

except KeyboardInterrupt:
    # Beenden Sie das Skript ordnungsgemäß bei einer Tastaturunterbrechung (Strg+C)
    pass

Code Erklärung

  1. Diese Import-Anweisungen bringen die Servo Klasse für die Servosteuerung und die Funktion sleep für die Zeitmessung.

    #!/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.

    # Legen Sie die GPIO-Pin-Nummer fest, an die der Servomotor angeschlossen ist
    myGPIO = 18
    
  3. Diese Zeilen definieren einen Korrekturfaktor und verwenden ihn, um die maximale und minimale Pulsbreite für den Servo zu berechnen, um seinen Bewegungsbereich fein abzustimmen.

    # Definieren Sie einen Korrekturfaktor, um die Pulsbreite des Servos feinzutunen
    myCorrection = 0.45
    maxPW = (2.0 + myCorrection) / 1000  # Berechnen Sie die maximale Pulsbreite
    minPW = (1.0 - myCorrection) / 1000  # Berechnen Sie die minimale Pulsbreite
    
  4. Initialisiert das Servo-Objekt mit dem angegebenen GPIO-Pin und benutzerdefinierten Pulsbreiten.

    # Initialisieren Sie das Servo-Objekt mit benutzerdefinierten Pulsbreiten
    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 in den Positionen Mitte, Minimal und Maximal positioniert, wobei jede Position gedruckt und für eine bestimmte Dauer gehalten wird.

    try:
        while True:
            # Positionieren Sie den Servo in der Mitte und warten Sie
            servo.mid()
            print("Mitte")  # Aktuelle Position anzeigen
            sleep(0.5)    # Kurze Pause für 0,5 Sekunden
    
            # Bewegen Sie den Servo in die Minimalposition und warten Sie
            servo.min()
            print("Minimal")  # Aktuelle Position anzeigen
            sleep(1)      # Position für 1 Sekunde halten
    
            # Bringen Sie den Servo in die Mitte zurück und warten Sie
            servo.mid()
            print("Mitte")  # Aktuelle Position anzeigen
            sleep(0.5)    # Kurze Pause für 0,5 Sekunden
    
            # Bewegen Sie den Servo in die Maximalposition und warten Sie
            servo.max()
            print("Maximal")  # Aktuelle Position anzeigen
            sleep(1)      # Position für 1 Sekunde halten
    
    except KeyboardInterrupt:
        # Beenden Sie das Skript ordnungsgemäß bei einer Tastaturunterbrechung (Strg+C)
        pass