.. include:: /index.rst :start-after: start_hello_message :end-before: end_hello_message .. _py_servo: 1.7 Servo ============================== **Einführung** In diesem Projekt lernen wir, wie man einen Servomotor mit einem Raspberry Pi steuert. Servomotoren werden häufig in der Robotik und Automatisierung eingesetzt, um Winkelbewegungen präzise zu steuern. ---------------------------------------------- **Benötigte Komponenten** Um dieses Projekt durchzuführen, benötigen Sie die folgenden Komponenten: .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTE - KAUFLINK * - :ref:`cpn_servo` - |link_servo_buy| * - :ref:`cpn_fusion_hat` - \- * - Raspberry Pi - \- ---------------------------------------------- **Schaltplan** Das folgende Schaltbild zeigt die Verbindungen, die zum Steuern des Servomotors erforderlich sind. .. image:: img/fzz/1.3.2_sch.png :width: 80% :align: center ---------------------------------------------- **Verdrahtungsdiagramm** .. image:: img/fzz/1.3.2_bb.png :width: 80% :align: center ---------------------------------------------- **Beispiel ausführen** Der gesamte Beispielcode, der in diesem Tutorial verwendet wird, befindet sich im Verzeichnis ``ai-lab-kit``. Folgen Sie diesen Schritten, um das Beispiel auszuführen: .. raw:: html .. code-block:: shell cd ~/ai-lab-kit/python/ sudo python3 1.7_Servo.py Nach dem Ausführen des Skripts bewegt sich der an PWM 0 angeschlossene Servo gleichmäßig von −90° bis 90° in 10-Grad-Schritten und pausiert kurz bei jeder Position. Anschließend bewegt er sich auf die gleiche Weise wieder von 90° zurück zu −90°. Diese Hin- und Herbewegung wiederholt sich kontinuierlich. ---------------------------------------------- **Code** Der folgende Python-Code zeigt, wie der Servomotor gesteuert wird, indem er zwischen verschiedenen Winkeln bewegt wird: .. raw:: html .. code-block:: python #!/usr/bin/env python3 from fusion_hat.servo import Servo # Import Servo class from time import sleep # Import sleep for delays # Initialize servo on channel 0 servo = Servo(0) try: while True: # Sweep from -90° to +90° in steps of 10° for angle in range(-90, 91, 10): servo.angle(angle) sleep(0.1) # Smooth movement delay # Sweep back from +90° to -90° in steps of 10° for angle in range(90, -91, -10): servo.angle(angle) sleep(0.1) except KeyboardInterrupt: # Stop the program safely when Ctrl+C is pressed servo.angle(0) # Return servo to center position sleep(0.1) Dieses Python-Skript steuert einen Servomotor, der mit PWM 0 verbunden ist. Beim Ausführen passiert Folgendes: 1. Der Servo bewegt sich von −90 Grad bis 90 Grad in 10-Grad-Schritten. 2. Zwischen jeder Bewegung pausiert er für 0,1 Sekunden. 3. Anschließend kehrt er die Richtung um und bewegt sich von 90 Grad zurück zu −90 Grad, ebenfalls in 10-Grad-Schritten. 4. Dieser Vorgang wiederholt sich unbegrenzt. ---------------------------------------------- **Den Code verstehen** 1. **Bibliotheken importieren** Die Bibliothek ``fusion_hat`` vereinfacht die Interaktion mit den GPIO-Pins, während die Bibliothek ``time`` Funktionen für Zeitverzögerungen bereitstellt. .. code-block:: python from fusion_hat.servo import Servo # Import the Servo class for controlling servos from time import sleep # Import sleep for timing delays 2. **Initialisierung des Servos** Das ``Servo``-Objekt wird mit PWM 0 initialisiert. .. code-block:: python servo = Servo(0) 3. **Servo-Bewegung** Der Servo wird in einer Schleife auf verschiedene Winkel bewegt. Die Methode ``angle`` setzt die Position des Servos, und ``sleep`` pausiert die Schleife für eine bestimmte Zeit. .. code-block:: python while True: # Sweep from -90° to +90° in steps of 10° for angle in range(-90, 91, 10): servo.angle(angle) sleep(0.1) # Smooth movement delay # Sweep back from +90° to -90° in steps of 10° for angle in range(90, -91, -10): servo.angle(angle) sleep(0.1) ---------------------------------------------- **Fehlerbehebung** 1. **Servo bewegt sich nicht** - **Ursache**: Falsche GPIO-Pin-Verbindung oder Probleme mit der Stromversorgung. - **Lösung**: Stellen Sie sicher, dass der Servo mit PWM 0 verbunden ist und überprüfen Sie die Stromversorgung. 2. **Servo-Bewegung ist unregelmäßig oder reagiert nicht** - **Ursache**: Unzureichende Stromversorgung des Servos. - **Lösung**: Verwenden Sie eine externe Stromquelle für den Servo, wenn das Fusion HAT+ nicht genügend Leistung liefert. ---------------------------------------------- **Erweiterungsideen** 1. **Benutzergesteuerter Servo** Ermöglichen Sie es dem Benutzer, die Servo-Position interaktiv über die Tastatur zu steuern: .. code-block:: python while True: position = float(input("Enter position (-90 to 90): ")) servo.angle(position) 2. **Aufzeichnen der Servo-Position** Zeichnen Sie die Servo-Position über die Zeit auf und stellen Sie die Bewegung grafisch dar: .. code-block:: python positions = [] for i in range(-90, 91, 10): servo.angle(i) sleep(0.1) positions.append(servo.angle()) plt.plot(positions) plt.show() ---------------------------------------------- **Fazit** Dieses Projekt zeigt, wie ein Servomotor gesteuert werden kann. Das Verständnis der Servosteuerung eröffnet viele Möglichkeiten für den Bau von Robotern, mechanischen Armen und anderen bewegungsbasierten Projekten.