Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Raspberry Pi Tutorial #7: Servomotor steuern

Posted on 9. März 20207. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen wie einfach es ist einen Servomotor mit einem Raspberry Pi zu steuern.

Servomotor SG90 am Raspberry PI
Servomotor SG90 am Raspberry PI

Im Beitrag Arduino, Lektion 16: Servo ansteuern habe ich bereits gezeigt wie einfach man einen Servomotor mit einem Arduino steuern kann.
Beim Raspberry Pi ist es fast genauso einfach.

  • benötigte Bauteile
  • Anschluß und aufbau der Schaltung
  • Programmieren
    • Einrichten des Pins
    • Liste mit Positionen
    • Funktion zum setzen einer Servoposition
    • Setzen von Positionen
    • Quellcode
  • Video
  • Fazit & Vorschau

benötigte Bauteile

Zum Nachbau dieses kleinen Projektes benötigst du

  • einen Raspberry Pi*,
  • drei Breadboardkabel*, männlich – weiblich, 20 cm
  • einen Servomotor* zum Beispiel SG90

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Für das erste Beispiel verwende ich den recht kleinen Servomotor SG90, dieser hat eine geringe Leistungsaufnahme und kann somit direkt an den Raspberry Pi angeschlossen werden. Des Weiteren verwende ich zum Basteln einen Raspberry Pi Model B+.

Raspberry PI Model B+
Raspberry PI Model B+

Dieses Raspberry Model ist schon alt, aber funktioniert noch und sollte doch einmal etwas schiefgehen ist es nicht so ein wirtschaftlicher Schaden wie bei einem Raspberry Pi 3 oder 4.

Anschluß und aufbau der Schaltung

Der Servomotor verfügt über 3 Anschlüsse (VCC, GND, Signal). Wie bereits erwähnt verwende ich den Servomotor SG90, welcher mit einer Spannung von 4.8 V (also rund 5V) betrieben wird.

Aufbau der Schaltung - Raspberry PI & Servomotor
Aufbau der Schaltung – Raspberry PI & Servomotor

Solltest du einen 12V Servomotor wie den MG996 oder MG955R verwenden, so muss die Spannung über ein externes Netzteil erfolgen, wobei GND bzw. Minus zum Potentialausgleich verbunden werden muss.

Programmieren

Einrichten des Pins

Für den Betrieb eines Servomotors müssen wir den GPIO Pin als PWM Pin mit 50Hz einrichten. Dieses erfolgt, in dem wir zunächst die GPIO Bibliothek importieren und nachfolgende Einstellungen setzen:

import RPi.GPIO as GPIO

servoPIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)
p = GPIO.PWM(servoPIN, 50)

In meinem Beispiel ist der Servomotor am GPIO Pin 18 angeschlossen. Des Weiteren wird der Pin über die Nummer am Board referenziert (GPIO.BCM).  Danach erfolgt das setzen, dass der Pin als Ausgang dient sowie das Setzen einer Variable, dass der Pin als PWM Pin mit 50 Hz dient.

Sollte dein Servo eine andere Frequenz benötigen (hier hilft ein blick in das Datenblatt zum Servomotor), musst du den Wert hier ändern.

Liste mit Positionen

Zunächst wollen wir einfach eine kleine Liste mit Positionen erstellen, welche wir später über eine For-Schleife ablaufen lassen möchten.

Für die Bestimmung der Positionen müssen wir diese berechnen, dabei nutzen wir die Formel „DC = Länge/Periodendauer“. 
Wobei die „Länge“ die Dauer des Signals ist und die Periodendauer die Zeit für einen kompletten PWM Intervall ist (in Millisekunden). Um nun das Tastverhältnis zu ermitteln, müssen wir das Ergebnis mal 100 nehmen. Somit ergibt sich:

0 Grad am Servo 2.5 % Tastverhältnis (2.5% = 0.5/20*100)
90 Grad am Servo 7.5% Tastverhältnis (7.5% = 1.5/20*100)
180 Grad am Servo 12.5% Tastverhältnis (12.5% = 2.5/20*100)

servoPositions = [2.5,5,7.5,10,12.5]

Funktion zum setzen einer Servoposition

Damit wir später nur eine Referenz von unserem Pin sowie die gewünschte Servoposition setzen wollen, lagern wir doppelten Quellcode in eine extra Funktion aus.

def setServoCycle(p, position):
  p.ChangeDutyCycle(position)
  time.sleep(0.5)

Die Pause welche mit der Funktion „sleep“ auf dem Time Objekt erstellt wird kann in meinem Fall nicht kleiner sein als 150ms.

Setzen von Positionen

Nachdem wir unseren Code für das Setzen der Servoposition erstellt haben, müssen wir nun unsere Liste einmal „vorwärts“ sowie einmal „rückwärts“ durchlaufen.

for pos in servoPositions:
  setServoCycle(p, pos)
for pos in reversed(servoPositions):
  setServoCycle(p, pos)

Quellcode

Hier nun der vollständige Quellcode mit Kommentaren:

import RPi.GPIO as GPIO
import time

servoPIN = 18 # der Servomotor wurde an den GPIO Pin 18 angeschlossen
# moegliche Servopositionen fuer dieses Beispiel
servoPositions = [2.5,5,7.5,10,12.5]

# Funktion zum setzen eines Winkels
# als Parameter wird die Position erwartet
def setServoCycle(p, position):
  p.ChangeDutyCycle(position)
  # eine Pause von 0,5 Sekunden
  time.sleep(0.5)

# versuche
try:
  # damit wir den GPIO Pin ueber die Nummer referenzieren koennen
  GPIO.setmode(GPIO.BCM)
  # setzen des GPIO Pins als Ausgang
  GPIO.setup(servoPIN, GPIO.OUT)

  p = GPIO.PWM(servoPIN, 50) # GPIO als PWM mit 50Hz
  p.start(servoPositions[0]) # Initialisierung mit dem ersten Wert aus unserer Liste

  # eine Endlos Schleife
  while True:
    # fuer jeden Wert in der Liste, mache...
    for pos in servoPositions:
      # setzen der Servopostion
      setServoCycle(p, pos)
      # durchlaufen der Liste  in umgekehrter Reihenfolge
    for pos in reversed(servoPositions):
      setServoCycle(p, pos)
# wenn das Script auf dem Terminal / der Konsole abgebrochen wird, dann...
except KeyboardInterrupt:
  p.stop()
  # alle Pins zuruecksetzen
  GPIO.cleanup()

Video

Fazit & Vorschau

Das Steuern eines Servomotors mit dem Raspberry Pi ist nicht so schwierig. Man muss nur berechnen, welchen Winkel man anstrebt und man muss auch in das Datenblatt schauen, um die korrekten Werte zu haben. Beides ist jedoch mit einer ordentlichen Google Suche kein Problem.

Als Nächstes werde ich mich jetzt daran machen mehr als einen Servomotor zu betreiben, dazu werde ich das Modul PCA9685 verwenden. 

PCA9685 16 Kanal Servo Driver Shield
PCA9685 16 Kanal Servo Driver Shield

An diesem Modul können 16 Servos (bzw. 16 Geräte, welche über ein PWM Signal gesteuert) angeschlossen werden.

Ziel soll es dann sein, den kleinen Roboterarm aus dem Beitrag Arduino – Aluminium 2DOF Klaue auch mit dem Raspberry Pi zu steuern.

2DOF Aluminium Klaue (fertig aufgebaut)

Jedoch werde ich für das zukünftige Projekt dem Arm noch ein weiteres Gelenk in Form eines 2DOF Moduls spendieren. 

Das 2DOF Modul soll spätestens am 30.03.2020 erscheinen und dann wird das Projekt starten. Daher bitte ich um etwa Gedult.

10 thoughts on “Raspberry Pi Tutorial #7: Servomotor steuern”

  1. Patrick sagt:
    11. März 2020 um 20:55 Uhr

    Ich arbeite noch nicht lange mit einem Raspberry Pi aber dank deinen tollen Anleitungen komme ich schnell voran, weiter so!
    Grüße Patrick

    Antworten
    1. Stefan Draeger sagt:
      12. März 2020 um 19:12 Uhr

      Vielen Dank für dein Feedback.

      Antworten
  2. Bernd sagt:
    25. März 2020 um 12:43 Uhr

    Ich hätte echt gerne einen Rasperry Pi zum basteln aber irgendwie traue ich mir das noch nicht zu. Durch deine Anleitungen wirkt das dann alles wieder so einfach.

    Antworten
    1. Stefan Draeger sagt:
      25. März 2020 um 12:51 Uhr

      Hi Bernd,

      ich würde dir empfehlen einen günstigen, gebrauchten 2er Pi zu erwerben. Wenn du dann doch einmal was falsch machst und ggf. das Gerät kaputt geht ist die Investition nicht ganz so hoch.
      Ansonsten kann ich dir einen Arduino empfehlen wenn du noch ganz am Anfang bist.

      Gruß,

      Stefan

      Antworten
      1. Bernd sagt:
        26. März 2020 um 12:27 Uhr

        Ich werde mich mal über Arduino informieren. Vielen Dank!

        Antworten
  3. Ralf Guetle sagt:
    29. Mai 2023 um 09:53 Uhr

    Hallo ich habe einen eine esp2866 steuerung gebaut ,der einen servomotor ansteuert die servo werden mit 5v vom esp angesteuert .Die motoren brauchen aber 12v ,ich habe auch an den roten und an den schwarzen ein 12v Spannung angeschlossen aber dann geht da nichts mehr .Bin anfänger vilvieleicht kann mir jemand helfen

    Antworten
    1. Stefan Draeger sagt:
      29. Mai 2023 um 18:56 Uhr

      Hi,

      du musst den Schwarzen / GND von der 12V Leitung mit dem Mikrocontroller (GND) verbinden, damit schaffst du ein Potenzialausgleich.

      Gruß,

      Stefan

      Antworten
  4. Wilhelm Loinig sagt:
    27. Juli 2023 um 12:53 Uhr

    Hallo Bernd,
    danke für deine Anleitung, ich möchte mit den Pi und Servo (mit Musik bzw Rhytmus) eine Tanzende Figur ansteuern. Hättest du einen Vorschlag (Anleitung)
    LG Willi

    Antworten
    1. Stefan Draeger sagt:
      27. Juli 2023 um 20:17 Uhr

      Hi,

      das hört sich lustig an. Mit dem Otto Bausatz gibt es sowas ja bereits, dieser kann zu einem zuvor programmierten Song tanzen.
      Am Raspberry Pi wäre dieses recht leicht zu portieren.

      Gibt es diese tanzende Figur bereits irgendwo, so das man sich diese einmal anschauen kann?

      Gruß, Stefan

      Antworten
      1. Wilhelm Loinig sagt:
        28. Juli 2023 um 16:02 Uhr

        Habe vor Jahren dummerweise, in Venedig bei einem Straßenverkäufer eine tanzende Micky Maus Kartonfigur (tanzte vor einem Lautsprecher) gekauft, natürlich waren da nur fast unsichtbare Fäden dabei. Schon bei der Heimfahrt wurde ich von meinen Kindern, mit den Song „dein Püpchen tanzt nicht mehr“ von Michelle, und heute noch immer, gemobbt. Ich hab versprochen, die Figur zum Tanzen zu bringen. habe etwas erfahrung mit dem Pi. vieleicht hat jemand eine Lösung dafür.
        LG Willi

        Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}