Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Vertiefe dich tiefer in Raspberry Pi, Arduino und ESP32 zusammen mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Löse Probleme nach dem Verkauf und technische Herausforderungen mit Hilfe unserer Community und unserem Team.

  • Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.

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

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

  • Festliche Promotionen und Giveaways: Nimm an Giveaways und Feiertagsaktionen teil.

👉 Bereit, mit uns zu erkunden und zu kreieren? Klicke auf [hier] und tritt heute bei!

3.7 Schwingender Servo

In dieser Lektion lernen wir, wie man einen Servomotor mit dem Raspberry Pi Pico 2 W steuert. Ein Servomotor ist ein Gerät, das sich auf einen spezifischen Winkel zwischen 0° und 180° drehen kann. Er wird häufig in ferngesteuerten Spielzeugen, Robotern und anderen Anwendungen eingesetzt, die präzise Positionssteuerung erfordern.

Lass uns starten und den Servo hin und her schwingen lassen!

Benötigte Komponenten

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

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

Name

ARTIKEL IN DIESEM KIT

LINK

Pico 2 W Starter Kit

450+

Pico 2 W Kit

Du kannst sie auch einzeln über die untenstehenden Links kaufen.

SN

KOMPONENTE

MENGE

LINK

1

Einführung in den Pico 2 W

1

2

Micro USB-Kabel

1

3

Breadboard

1

KAUFEN

4

Jumper-Kabel

Mehrere

KAUFEN

5

Servo

1

KAUFEN

Schaltplan

sch_servo

Verdrahtung

wiring_servo

  • Das orangefarbene Kabel ist das Signalkabel und ist mit GP15 verbunden.

  • Das rote Kabel ist VCC und mit VBUS(5V) verbunden.

  • Das braune Kabel ist GND und mit GND verbunden.

Servos können, besonders unter Last, erheblichen Strom ziehen. Da wir einen kleinen Servo verwenden und ihn nicht stark belasten, ist es akzeptabel, ihn für dieses einfache Experiment über den VBUS-Pin des Pico zu versorgen. Für größere Servos oder mehrere Servos sollte eine externe Stromversorgung verwendet werden.

Einrichten des Servoarms

  • Befestige den Servoarm (auch Horn genannt) auf der Ausgangswelle des Servos.

  • Sichere ihn bei Bedarf mit der kleinen Schraube, die mit dem Servo geliefert wurde.

Programmierung

Wir schreiben ein MicroPython-Programm, um den Servo zwischen 0° und 180° hin und her schwingen zu lassen.

Bemerkung

  • Öffne die 3.7_swinging_servo.py aus pico-2w-kit-main/micropython oder kopiere den Code in Thonny, dann klicke auf „Ausführen“ oder drücke F5.

  • Stelle sicher, dass der richtige Interpreter ausgewählt ist: MicroPython (Raspberry Pi Pico).COMxx.

import machine
import utime

# Initialisiere PWM auf Pin GP15
servo = machine.PWM(machine.Pin(15))
servo.freq(50)  # Setze die Frequenz auf 50Hz

# Funktion, um Winkel in Tastverhältnis umzurechnen
def angle_to_duty(angle):
    min_duty = 1638  # Entsprechend einem 0,5ms Impuls (0°)
    max_duty = 8192  # Entsprechend einem 2,5ms Impuls (180°)
    duty = int(min_duty + (angle / 180) * (max_duty - min_duty))
    return duty

while True:
    # Bewege den Servo von 0° zu 180°
    for angle in range(0, 181, 1):
        servo.duty_u16(angle_to_duty(angle))
        utime.sleep_ms(20)
    # Bewege den Servo von 180° zurück zu 0°
    for angle in range(180, -1, -1):
        servo.duty_u16(angle_to_duty(angle))
        utime.sleep_ms(20)

Wenn das Programm läuft, sollte der Servo reibungslos zwischen 0° und 180° hin und her schwingen.

Verständnis des Codes

  1. Importiere Module:

    • machine: Bietet Zugang zu hardwarebezogenen Funktionen.

    • utime: Enthält zeitbezogene Funktionen für Verzögerungen.

  2. Initialisiere PWM:

    Wir richten PWM auf GP15 ein. Die Frequenz ist auf 50Hz eingestellt, was für Servos üblich ist.

    servo = machine.PWM(machine.Pin(15))
    servo.freq(50)
    
  3. Definiere die Funktion angle_to_duty:

    • Diese Funktion bildet einen Winkel (0° bis 180°) auf den entsprechenden Tastverhältniswert für den Servo ab.

    • Die min_duty und max_duty entsprechen den minimalen und maximalen Impulsbreiten für das Servo-Steuersignal.

    • Die Berechnung skaliert den Winkel auf das entsprechende Tastverhältnis.

    def angle_to_duty(angle):
        min_duty = 1638  # 0,5ms Impulsbreite
        max_duty = 8192  # 2,5ms Impulsbreite
        duty = int(min_duty + (angle / 180) * (max_duty - min_duty))
        return duty
    
  4. Hauptschleife zur Bewegung des Servos:

    • Der Servo bewegt sich von 0° bis 180°, wobei der Winkel jedes Mal um 1° erhöht wird.

    • Anschließend bewegt er sich von 180° zurück auf 0°.

    • utime.sleep_ms(20) fügt eine kleine Verzögerung hinzu, um die Bewegung zu glätten.

    while True:
        for angle in range(0, 181, 1):
            servo.duty_u16(angle_to_duty(angle))
            utime.sleep_ms(20)
        for angle in range(180, -1, -1):
            servo.duty_u16(angle_to_duty(angle))
            utime.sleep_ms(20)
    

Mehr über den Code

Servos werden durch das Senden eines PWM-Signals mit einer bestimmten Impulsbreite gesteuert. Ein 50Hz PWM-Signal (Periodendauer von 20ms) ist Standard für Servos. Die Impulsbreite innerhalb jeder Periode bestimmt den Winkel des Servos:

  • 0,5ms Impulsbreite entspricht 0°.

  • 1,5ms Impulsbreite entspricht 90°.

  • 2,5ms Impulsbreite entspricht 180°.

Durch Anpassen des Tastverhältnisses des PWM-Signals ändern wir die Impulsbreite.

Die Funktion duty_u16() akzeptiert Werte von 0 bis 65535. Um das Tastverhältnis für eine gegebene Impulsbreite zu berechnen:

Duty cycle = (Pulse Width / Period) * 65535

Beispielsweise für eine Impulsbreite von 0,5ms:

Duty cycle = (0.5ms / 20ms) * 65535 ≈ 1638

Weitere Experimente

  • Geschwindigkeit ändern: Passe die Verzögerung utime.sleep_ms(20) an, um den Servo schneller oder langsamer zu bewegen.

  • Spezifische Winkel einstellen: Modifiziere den Code, um den Servo auf spezifische Winkel zu bewegen.

    servo.duty_u16(angle_to_duty(90))  # Bewege auf 90°
    
  • Steuerung mit Eingabe: Verbinde ein Potentiometer oder Tasten, um den Winkel des Servos interaktiv zu steuern.

Wichtige Hinweise

  • Stromversorgung: Stelle sicher, dass der Servo ausreichend mit Strom versorgt wird. Wenn du Zittern oder unregelmäßige Bewegungen bemerkst, erwäge die Verwendung einer externen 5V-Stromversorgung für den Servo.

  • Überlastung vermeiden: Zwinge den Servo nicht über seine physischen Grenzen hinaus (üblicherweise 0° bis 180°), um Schäden zu vermeiden.

Fazit

In dieser Lektion hast du gelernt, wie man einen Servomotor mit dem Raspberry Pi Pico 2 W steuert. Du verstehst jetzt, wie man PWM-Signale erzeugt, um den Winkel des Servos einzustellen und ihn sanft zu bewegen. Diese Fähigkeit ist grundlegend für Projekte in der Robotik und Automatisierung, bei denen präzise Bewegungen erforderlich sind.