Servo

Einen Servo mit Arduino zu steuern ist relativ einfach. Wenn man ein paar Dinge beachtet, dann erweitert man die blinkende und piepsende Arduino-Welt schnell mit Bewegungen und kinetischer Interaktion! In diesem Beitrag wird die Schaltung und der Code erklärt.

Servo: Aufbau und Anschluss

Ein Servo besteht aus einer Motorsteuerung (1), einem Elektromotor (2), einem Getriebe (3) und einem Potentiometer zur Positionsbestimmung (4). Alle Komponenten sind in einem robusten Gehäuse untergebracht.

Arduino Servo Aufbau

Angeschlossen wird er über ein dreipoliges Kabel. Dabei handelt es sich um zwei Versorgungsleitungen (Plus und GND) und um eine Datenleitung.

Arduino Servo Fritzing Schaltung

Grafik erstellt mit Fritzing

Je nach Hersteller können die Kabelfarben abweichen. Gebräuchlich sind die Kombinationen Braun-Rot-Orange (GND, Plus, Daten) oder Schwarz-Rot-Gelb (GND, Plus, Daten). Ein Blick in die Beschreibung des Servomotors ist auf jeden Fall angebracht, um sicher zu gehen, dass er richtig angeschlossen wird. Ein falsches Anschließen kann hier zu Schäden führen.

Schaltung und Beispiel-Programm-Code

Im Beispiel ist ein Standard-Servomotor mit dem GND, 5V+ und dem digitalen Pin 9 verbunden. Des Weiteren ist ein Potentiometer am analogen Pin 2 angeschlossen.

Bei dem Programm handelt es sich um das Knob-Beispiel aus der Arduino Software (Datei > Beispiele > Servo > Knob).

In diesem Beispiel wird der Servomotor auf eine Position gesteuert, die mittels des Potentiometers festgelegt wird. Natürlich ist das nur exemplarisch, um die Funktionsweise zu erklären. Wichtig ist, dass der Befehl myservo.write(val); den Servomotor in eine bestimmte Position zwischen 0 und 180 Grad stellt.

Viele Servomotoren mit Arduino steuern

Ein Servomotor benötigt für die Bewegungen relativ viel Strom. Will man mehr als einen Servomotor nutzen, empfiehlt die schnell die Nutzung eines Servo-Shields wie dem Adafruit Robot Shield. Dabei handelt es sich um eine, auf das Arduino aufsteckbare, Erweiterung des Arduinos. Mit dem Adafruit Robot Servo lassen sich bis zu 16 Servomotoren gleichzeitig steuern. Ein externes Netzteil ist dafür allerdings erforderlich. Angenehmer Nebeneffekt ist, dass man nicht pro Servomotor einen wertvollen Kanal des Arduinos belegt. Das Shield wird per I2C angesteuert. Dabei handelt es sich um eine digitale Datenverbindung zwischen dem Arduino und dem Servo Shield. Es belegt lediglich zwei Pins des Boards.

Um diese Kommunikation einzurichten gibt es eine Library von Adafruit, die sich im Handumdrehen einbinden und verwenden lässt.

Alternativ zum Adafruit Robot Servo Shield gibt es noch eine günstigere Variante von SunFounder.

Servo Lego Technik Halter

Tipp: Leider passen normale Servos nicht an LEGO Technik. Mit diesem kleinen 3D Modell geht das dann aber doch. Ausgedruckt auf dem Wanhao Duplicator i3.

Spezialform Servo-Winde

Dabei handelt es sich um einen kräftigeren Servomotor, der sich nicht nur auf 180°, sondern je nach Typ auf 360° oder 720° drehen kann. Winden werden im Modellbau z.B. in Segelschiffen verbaut. Hier kann man sich das Produkt auf Amazon ansehen.

Expertenwissen: Steuerung ohne Library

Zum Steuern des Servomotors verwendet man ein sich alle 20 Millisekunden wiederholendes Signal. Es besteht aus einem HIGH-Impuls, der zwischen 1 und 2 Millisekunden lang ist, und einem LOW-Impuls. Die Dauer des HIGH-Impulses bestimmt den Zielwinkel (normaler Weise von 0 bis 180°). In der Arduino-Software kann hierfür der Befehl delayMicroseconds(x); verwenden:

Da der Servo einige Zeit benötigt, um sich auf den gewünschten Zielwinkel einzustellen, muss das Signal mindestens so lange wiederholt werden, bis der Servo die Position erreicht hat.

Servomotoren überprüfen ihren eigenen Stellwinkel mit einem eingebauten Potentiometer. Es kommt hierbei vor, dass eine gewünschte Position nicht exakt erreicht werden kann. Der Servo korrigiert sich dann kontinuierlich selbst, was zu einem »Zittern« des Servos führt. Um das zu verhindern, sollte der Impuls nach erreichen des Zielwinkels auf LOW geschalten werden.

Alternativ zum selbst programmierten Signal, kann man die Servo-Library benutzen. Sie kommt mit der Arduino-Software. Im Beispiel Sweep (File>Examples>Servo>Sweep), wird gezeigt, wie man einen Servo mit der Servo-Library verwendet.

13 Comments

  1. Bori Cyrill

    digitalWrite(myServo,HIGH);
    delayMicroseconds(1500);
    digitalWrite(myServo.LOW);
    delayMicroseconds(18500);

    bei digitalWrite(myServo.LOW); gehört ein „,“, nicht ein Punkt

  2. Franziska Koop

    Hallo :)
    Ich möchte gerne einen Servo (Digitales Segelwindservo RS-10 von Conrad : Betriebsspannung: 4,8- 7,2 V, max. Laufweg 5 x 360 Grad) mit dem Arduino so ansteuern, dass er sich um 180 Grad dreht und eine Pause einlegt. Meine Fragen sind jetzt nun: Brauche ich einen zusätzlichen Motortreiber und wenn ja welchen? Wie muss ich das genau verbinden, evt. auch mit einem zusätzlichen Netzteil? Benötige ich noch zusätzliche Bauelemente? Ist es überhaupt möglich eine Pause einzulegen, in der sich der Motor nicht bewegt? Wie schreibe ich dies in den Programmcode, da ich bisher leider nur Programmcodes gefunden habe, in denen sich der Servomotor ohne Pause dreht. Ich freue mich sehr über eine Antwort. Vielen Dank.

    Liebe Grüße

  3. Reinhard

    Gibt es in der Servo-Libery eine Variable mit der man die Stellgeschwindigkeit des Servos einstellen kann? Ich möchte auf meiner Modellbahn einen Kran mit einem Servo steuern. Wenn ich das Poti zu schnell drehe dreht sich der Kran irrsinnig schnell. Ich möchte erreichen, dass mit dem Poti die Position eingestellt wird und der Kran sich dann langsam auf dies Position dreht.

  4. Mohammed

    Ja du kannst eine Pause einlegen, dafür kannst du im Programm was du geschrieben/ abgeschrieben hast im void loop() teil ein weiteren digital pin hinzufügen, der für eine bestimmte zeit Strom bekommt aber ja nichts machen muss und da hast du dann deine Pause.

  5. Tiger

    Was passiert, wenn ich einen Servo von einem Meccanoid G15 Roboter anschließe und diesen um über 180 Grad drehen lasse? Schaltet der intern dann ab oder wird er dadurch zerstört?

  6. Lange Lunte

    Früher im Ferienlager haben wir damit rumgespielt. Dat war große Sahne. Isch kann mich noch daran erinnern wie wir mit den Gurken gespielt haben, obwohl wie diese essen sollten. Der gute Willie war auch mit dabei. Ich bin nicht mehr der jüngste aber wer eine kleine Nummer schieben will soll sich melden.

    Lange Lunte

  7. Willige Wurst

    Hallo Lange Lunte,

    ich weiß dat is nicht ne Seite um sowas zu besprechen, aber bei den Gurken hattest du mich. Ich bin Sahnige 69 Jahre alt und stehe auf jute Spiele. Wie du an meinen Namen erkennst bin ich willig. Ike bin so lustig drauf du Nudel.

    Willige Wurst

  8. einTester

    Es ist zwar schönüberall die gleichen Beispiele zu finde, aber leider sind sie nur kopiert und nicht getestet. Was passiert, wenn so ein Beispiel auf einenm UNO, vorausgesetzt es hat vorher schon mal funktioniert, einen Servo in Dauerlauf versetzt? Er sollte ja nur von 0 bis 180 Grad laufen bzw. zurück und nicht weiter und nach 360 merkt man nur einen kurze Verlangsamung und dann wieder volle Power.
    Antwort: Nicht nur den Pin deklarieren, sondern auch den Wertebereich.

Schreibe einen Kommentar

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