Raspberry Pi Servo ansteuern – SG90-Anleitung

NEWS



RASPBERRY PI SERVO ANSTEUERN – SG90-ANLEITUNG


Blauer Servomotor mit Ansteuerungsplatine auf einem Schreibtisch

Drei Drähte genügen: Servo am Raspberry Pi

Kurz gesagt: Wie steuert man einen Servo am Raspberry Pi?

Der Raspberry Pi Servo in sechs Punkten:

  • Drei Drähte: Braun oder Schwarz an GND, Rot an 5 V, Orange oder Gelb als Signal an einen GPIO-Pin – klassisch GPIO 18 auf Pin 12.
  • Ein Signal, kein Bus: Der Servo erwartet alle 20 Millisekunden einen Impuls zwischen 1 und 2 Millisekunden Länge. Die Impulsbreite bestimmt den Winkel, sonst nichts.
  • Sechs Zeilen Python: Mit gpiozero und der Klasse AngularServo ist der erste Schwenk in unter fünf Minuten erledigt.
  • Die wichtigste Regel: Nur ein einziger Mini-Servo darf am 5-V-Pin des Pi hängen. Ab dem zweiten gehört ein eigenes Netzteil dazu – mit gemeinsamer Masse.
  • Wenn es zittert: Software-PWM ist nicht taktstabil. Auf Pi 4 und älter hilft pigpio, auf dem Pi 5 echte Hardware-PWM oder ein PCA9685-Treiber.
  • Ab drei Servos: PCA9685 über I2C – 16 Kanäle, eigene Stromversorgung, null CPU-Last für die Impulserzeugung.

Wie ein Servomotor funktioniert – PWM in 20 Millisekunden

Ein Servo ist kein normaler Motor. In dem kleinen Plastikgehäuse stecken vier Dinge: ein Gleichstrommotor, ein Getriebe, ein Potentiometer als Winkelgeber und eine kleine Regelelektronik. Diese Elektronik vergleicht permanent den Sollwert aus dem Steuersignal mit dem Istwert vom Potentiometer und fährt den Motor so lange, bis beide übereinstimmen. Genau deshalb kann ein Servo eine Position halten, auch gegen Widerstand – ein einfacher Motor kann das nicht.

Das Steuersignal ist verblüffend simpel und seit Jahrzehnten unverändert. Alle 20 Millisekunden – also mit 50 Hertz – kommt ein Impuls. Ist er 1 Millisekunde lang, fährt der Servo an den einen Anschlag; bei 2 Millisekunden an den anderen; bei 1,5 Millisekunden steht er in der Mitte. Diese drei Zahlen sind die gesamte Theorie. Alles, was der Raspberry Pi tun muss, ist, diesen Impuls sauber zu erzeugen.

Und genau da liegt der Haken. Der Pi ist ein Linux-Rechner, kein Mikrocontroller. Wenn ein Python-Programm im Anwendungsbereich die Impulse per Software erzeugt, kommt jeder Prozesswechsel, jeder Interrupt und jede kurze Systemlast als Zittern beim Servo an. Das Bauteil brummt, ruckelt um ein paar Grad und zieht dabei unnötig Strom. Die Werte in der Praxis liegen dabei oft leicht neben der Theorie: Viele günstige Servos brauchen eher 0,5 bis 2,4 Millisekunden für ihre vollen 180 Grad.

Die zweite Eigenheit betrifft den Strom. Im Leerlauf zieht ein SG90 kaum mehr als ein paar Milliampere, beim Anfahren und vor allem im blockierten Zustand sind es schnell mehrere hundert. Diese Spitze bricht die 5-V-Schiene des Pi kurz ein – und der Pi startet neu. Wer das einmal gesehen hat, hält sich danach an die Netzteilregel.

Raspberry Pi Servo anschließen und ansteuern – Schritt für Schritt

  1. Verkabeln: Braun oder Schwarz auf GND (Pin 6), Rot auf 5 V (Pin 2 oder 4), Orange oder Gelb als Signal auf GPIO 18 (Pin 12). Die Farben sind bei Modellbauservos praktisch immer gleich.
  2. Nur ein Servo direkt am Pi: Bei mehr als einem kleinen Servo kommt ein eigenes 5-V- oder 6-V-Netzteil dazu. Dessen Minuspol muss mit einem GND-Pin des Pi verbunden werden – ohne gemeinsame Masse versteht der Servo das Signal nicht.
  3. Bibliothek bereitstellen: gpiozero ist in Raspberry Pi OS vorinstalliert. In einer eigenen Umgebung genügt python3 -m venv --system-site-packages env, weil seit Bookworm nicht mehr direkt ins System installiert werden darf.
  4. Erster Test: Eine Datei servo.py mit diesem Inhalt anlegen:
    from gpiozero import AngularServo
    from time import sleep

    servo = AngularServo(18, min_angle=0, max_angle=180)

    while True:
      servo.angle = 0
      sleep(1)
      servo.angle = 90
      sleep(1)
      servo.angle = 180
      sleep(1)
  5. Starten: python3 servo.py. Der Servo fährt jetzt im Sekundentakt drei Positionen an. Weitere Grundlagen dazu stehen im Beitrag zu GPIO mit Python.
  6. Endanschläge kalibrieren: Fährt der Servo nicht ganz bis 0 oder 180 Grad, sind die Impulsbreiten anzupassen: AngularServo(18, min_angle=0, max_angle=180, min_pulse_width=0.0005, max_pulse_width=0.0024). Vorsicht in die andere Richtung – wer über den mechanischen Anschlag hinausfährt, zerstört das Getriebe.
  7. Brummen abstellen: Steht der Servo, muss er kein Signal mehr bekommen. servo.detach() schaltet die Impulse ab, das Bauteil wird still und kühl. Vor dem Programmende ist das Pflicht.
  8. Automatisch starten lassen: Soll das Skript dauerhaft laufen, gehört es in einen Cronjob oder besser in eine systemd-Unit.

Servo zittert und brummt – die Lösung je nach Pi-Modell

Das Zittern ist das mit Abstand häufigste Thema in Foren, und die richtige Antwort hängt seit dem Raspberry Pi 5 vom Modell ab. Der Grund: Die Bibliothek pigpio, die jahrelang als Standardlösung galt, spricht die alte Hardware direkt an und funktioniert auf dem Pi 5 nicht mehr. Die Standard-Schnittstelle von gpiozero ist inzwischen lgpio, und die erzeugt PWM per Software.

AufbauBeste LösungSo geht es
Ein Servo an Pi 3, Pi 4, Zero 2 Wpigpio-Schnittstellesudo apt install pigpio, sudo systemctl enable --now pigpiod, dann GPIOZERO_PIN_FACTORY=pigpio python3 servo.py
Ein Servo am Pi 5Echte Hardware-PWMdtoverlay=pwm-2chan,pin=12,func=4,pin2=13,func2=4 in die config.txt – die Kanäle erscheinen dann unter /sys/class/pwm
Ein Servo an beliebigem GPIO des Pi 5PIO-gestützte PWMdtoverlay=pwm-pio,gpio=4 – bis zu vier Kanäle auf beliebigen Pins von 0 bis 27
Zwei Servos und mehrPCA9685-Treiberplatine16 Kanäle über I2C, eigenes Netzteil, taktstabil ohne Zutun der CPU
Höchste PräzisionRaspberry Pi Pico als HelferDer Mikrocontroller erzeugt das Signal in Hardware, der Pi schickt ihm nur noch Sollwerte

Für den allerersten Versuch ist all das übrigens unnötig. Ein Servo an gpiozero mit Standardeinstellungen funktioniert, er ist nur eben nicht ganz ruhig. Wer aber eine Kamera bewegt oder einen Zeiger präzise setzen will, merkt den Unterschied sofort.

Mehrere Servos: der PCA9685 als Treiberplatine

Sobald ein Projekt über einen einzelnen Schwenk hinausgeht, führt kaum ein Weg am PCA9685 vorbei. Die Platine kostet wenige Euro, hängt mit vier Leitungen am I2C-Bus des Pi und stellt 16 unabhängige PWM-Kanäle bereit. Ihre Standardadresse ist 0x40, mehrere Platinen lassen sich per Lötbrücke auf andere Adressen legen – theoretisch bis zu 62 Stück, praktisch reicht meist eine.

Der entscheidende Vorteil liegt nicht in der Anzahl der Kanäle, sondern in der Arbeitsteilung. Der PCA9685 hat einen eigenen Taktgeber und erzeugt die Impulse selbstständig weiter, auch wenn der Pi gerade beschäftigt ist. Zittern ist damit vom Tisch. Und weil die Platine einen separaten Schraubklemmen-Eingang für die Servospannung hat, wandert die gesamte Stromlast dorthin, wo sie hingehört: an ein eigenes Netzteil. Der Pi liefert nur noch das Datensignal und die gemeinsame Masse.

Angesprochen wird die Platine unter Python meist über die CircuitPython-Bibliotheken von Adafruit. Nach sudo raspi-config und aktiviertem I2C landet das Paket adafruit-circuitpython-servokit per pip in einer virtuellen Umgebung. Danach reicht ein Zweizeiler pro Servo, und die Kanäle werden schlicht durchnummeriert. Für einen Roboterarm mit sechs Achsen oder einen Hexapod mit achtzehn ist das der einzige sinnvolle Weg.

SG90, MG90S oder MG996R – welcher Servo passt?

Servos unterscheiden sich vor allem in Getriebe und Drehmoment. Die Angabe erfolgt in Kilogramm mal Zentimeter: 1,8 kg·cm bedeutet, dass der Servo 1,8 Kilogramm an einem Hebelarm von einem Zentimeter halten kann – bei zwei Zentimetern Hebel also nur noch 0,9 Kilogramm.

TypDrehmomentWofür geeignet
SG90, rund 9 Gramm, Kunststoffgetriebeetwa 1,8 kg·cm bei 4,8 VKlappen, Zeiger, leichte Schwenks – der Standard in jedem Bastelkit
MG90S, gleiche Baugröße, Metallgetriebeetwas über 2 kg·cmDieselben Aufgaben, aber deutlich haltbarer bei häufiger Bewegung
MG996R, rund 55 Grammetwa 9 bis 11 kg·cmRoboterarme, Greifer, Türklappen – zwingend mit eigenem Netzteil
Continuous-Rotation-Servoje nach BaugrößeEndlose Drehung; das Signal steuert die Geschwindigkeit, nicht den Winkel

Für die Abgrenzung zu anderen Antrieben gilt eine einfache Faustregel: Ein Servo fährt Positionen an, ein Schrittmotor dreht sich exakt und endlos weiter, ein Gleichstrommotor dreht einfach nur schnell. Wer bloß etwas ein- und ausschalten will, ist mit einem Relais ohnehin besser bedient.

Projekte mit Servo am Raspberry Pi

  • Kamera-Schwenkkopf: Zwei Servos, ein Kameramodul und ein gedruckter Halter ergeben einen fernsteuerbaren Rundumblick. In Verbindung mit einer Überwachungskamera lässt sich die Kamera sogar automatisch einer Bewegung nachführen.
  • Futterautomat: Ein Servo öffnet zu festen Zeiten eine Klappe. Der Klassiker unter den Haustierprojekten, weil das Drehmoment eines SG90 dafür locker reicht.
  • Analoge Anzeige: Ein Zeiger auf einer Skala zeigt Strompreis, Serverlast oder ungelesene Nachrichten. Charmanter als jedes Display – und mit einem einzigen Servo gebaut.
  • Roboterarm: Vier bis sechs Servos, ein PCA9685 und gedruckte Teile. Das große Ferienprojekt, das sich später Schritt für Schritt erweitern lässt.
  • Automatische Jalousie oder Lüftungsklappe: Kombiniert mit einem Helligkeits- oder Feuchtigkeitswert aus dem Bereich der Sensorik entsteht daraus eine kleine, völlig eigenständige Regelung.
  • Schlossmechanik und Schalterdrücker: Der pragmatische Weg, ein Gerät ohne Schnittstelle fernzusteuern – ein Servo drückt schlicht dessen Taste. Weitere Ideen sammelt die Übersicht der Raspberry-Pi-Projekte.

Fehler und Stolpersteine bei Servos

  • Der Pi startet neu: Das klassische Zeichen für eine überlastete 5-V-Schiene. Ab dem zweiten Servo gehört ein eigenes Netzteil dazu – auch wenn es mit einem Servo noch funktioniert hat.
  • Masse vergessen: Externes Netzteil angeschlossen, aber der Minuspol nicht mit dem Pi verbunden. Der Servo zuckt dann sinnlos oder bewegt sich gar nicht.
  • Signal auf 5 V gelegt: Der Pi gibt 3,3 V aus, was fast alle Servos akzeptieren. Umgekehrt darf aber nie eine 5-V-Leitung auf einen GPIO zurückgeführt werden – das zerstört den Anschluss.
  • Gegen den Anschlag gefahren: Zu große Impulsbreiten drücken den Servo über sein mechanisches Ende hinaus. Er brummt laut, zieht Strom und schleift sich das Getriebe rund.
  • Signal nie abgeschaltet: Ein Servo, der dauerhaft ein Haltesignal bekommt, brummt und wird warm. detach() oder das Setzen des Wertes auf None beendet das.
  • pigpio auf dem Pi 5 erwartet: Zahllose ältere Anleitungen empfehlen den pigpiod-Dienst gegen das Zittern. Auf dem Pi 5 läuft er nicht – dort führt der Weg über Hardware-PWM oder eine Treiberplatine.
  • Zu schwacher Servo gekauft: Ein SG90 hält keine schwere Kamera. Vor dem Kauf kurz Hebelarm und Gewicht gegenrechnen, sonst folgt der zweite Kauf auf dem Fuß.

Häufige Fragen zum Raspberry Pi Servo

Wie viele Servos kann ich direkt am Raspberry Pi betreiben?
Rechnerisch beliebig viele, praktisch genau einen kleinen. Die 5-V-Pins des Pi sind nicht dafür gedacht, Anlaufströme mehrerer Motoren abzufangen. Ab zwei Servos ist ein eigenes Netzteil Pflicht.

Warum zittert mein Servo, obwohl er stillstehen soll?
Weil die Impulse per Software erzeugt werden und Linux dabei nicht taktgenau ist. Auf Pi 4 und älter behebt die pigpio-Schnittstelle das Problem, auf dem Pi 5 hilft echte Hardware-PWM oder ein PCA9685.

Welchen GPIO-Pin soll ich nehmen?
Für Software-PWM ist jeder freie GPIO gleich gut, GPIO 18 hat sich als Konvention etabliert. Für Hardware-PWM auf dem Pi 5 sind es GPIO 12 und GPIO 13, weil dort die PWM-Kanäle des Chips herausgeführt sind.

Servo, Schrittmotor oder Gleichstrommotor?
Der Servo fährt Winkel an und hält sie, der Schrittmotor dreht exakt und endlos, der Gleichstrommotor dreht einfach schnell. Für Klappen, Zeiger und Gelenke ist der Servo die richtige Wahl.

Kann ein Servo volle 360 Grad drehen?
Nur als sogenannter Continuous-Rotation-Servo. Bei dem steuert das Signal allerdings die Drehgeschwindigkeit statt einer Position – für das Anfahren exakter Winkel ist er damit unbrauchbar.

Funktioniert das auch mit dem Raspberry Pi Pico?
Sogar besser. Der Mikrocontroller erzeugt PWM in Hardware, ohne Betriebssystem dazwischen, und ist damit für reine Bewegungssteuerung die stabilere Lösung als jeder große Pi.

Warum bewegt sich mein Servo nur einen Teil des Weges?
Die Impulsbreiten passen nicht zum Modell. Der Standardbereich von 1 bis 2 Millisekunden ist bei vielen günstigen Servos zu eng – mit min_pulse_width und max_pulse_width lässt sich der Bereich vorsichtig erweitern.

Fazit

Der Raspberry Pi Servo ist der Moment, in dem Software körperlich wird: drei Drähte, sechs Zeilen Python, und etwas bewegt sich auf Kommando. Unsere klare Empfehlung für den Einstieg: Fang mit einem einzigen SG90 aus dem Sensor-Kit an, direkt an GPIO 18 und gpiozero – und ignoriere Zittern und Brummen fürs Erste. Wächst das Projekt, kommen genau zwei Dinge dazu, und zwar in dieser Reihenfolge: erst ein eigenes Netzteil für die Servos mit gemeinsamer Masse, dann ein PCA9685 als Treiberplatine. Damit ist der Aufbau bis zum sechsachsigen Roboterarm tragfähig und läuft auf jedem Pi-Modell gleich sauber. Wer dagegen von Anfang an nur präzise Bewegung braucht und keinen Linux-Rechner, spart sich den Umweg und nimmt gleich einen Pico.

* = Affiliate Link (raspi-config.de ist Teilnehmer des Partnerprogramms von Amazon EU, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu Amazon.de Werbekostenerstattung verdient werden kann.)


VORSCHAU


Was Dich im Raspberry Pi Videokurs erwartet.


Play klicken & Video abspielen.

QUIZ


Prüfe Deinen aktuellen Wissensstand.

Raspberry Pi Quiz starten

Bild anklicken & Quiz starten.

NEWS



EMPFEHLUNG



Danke für Deine Weiterempfehlung!

© 2026 raspi-config.de | Datenschutz | Impressum