Servo am Arduino anschließen und verwenden

Einen Servo am Arduino anschließen und verwenden

Früher oder später kommt jeder Maker an den Punkt, an dem er ein Projekt mit einem Servo-Motor bauen möchte – z.B. für einen Zeiger oder für einen Roboterarm. In diesem Tutorial lernst du, wie du einen Servo am Arduino anschließt und steuerst. Du erfährst, wie du den kleinen Motor mit einem Poti verwendest, Sensordaten damit visualisierst und was es bei der Stromzufuhr zu beachten gilt.

Was ist ein Servo?

Zunächst ein paar Worte darüber, was ein Servo eigentlich ist: Hierbei handelt es sich um einen Motor, der nicht einfach nur anfängt zu laufen, sondern den du auf eine bestimmte Position drehen kannst. Das heißt, du kannst ihm einen Winkel von 0° bis 180° zuweisen und damit z.B. einen am Servo montierten Zeiger im Halbkreis drehen lassen.

Die Bibliothek Servo.h

Damit die Steuerung für dich so einfach wie möglich ist, gibt es die Bibliothek Servo.h – die in der Regel bereits vorinstalliert ist, sodass du sie ohne Umwege in deinem Sketch einbinden kannst. Mit ihr kannst du bis zu 12 Motoren an einem Arduino verwenden (am Arduino Due sogar 60).

Binde die Bibliothek am Anfang deines Sketchs wie folgt ein:

#include <Servo.h>

Zwei Funktionen der Bibliothek benötigst du immer wieder, wenn du mit Servos arbeitest:

  • attach(pin) – Hier legst du einmalig den Pin fest, an dem dein Servo-Motor angeschlossen ist
  • write(angle) – Damit “fährst” du den Servo an den gewünschten Winkel (angle)

Im Verlauf dieses Tutorials schauen wir uns diese Funktionen genauer an. Weitere Funktionen dieser Bibliothek lernst du in der Arduino-Referenz kennen.

Die Minimalschaltung

Für die allerersten Gehversuche reicht es, wenn du deinen Servo wie folgt mit deinem Arduino verbindest. Für das Signal (orange) kannst du natürlich einen Digitalpin deiner Wahl verwenden. In den folgenden Sketches verwenden wir jedoch immer Pin 8.

Anschluss eines Servos am Arduino Uno
Screenshot: Tinkercad

Hinweis: Jeder Servo hat drei Kabel: Strom (5V), Masse (GND) und Signal. Diese haben jedoch je nach Modell eine unterschiedliche Reihenfolge. Vergewissere dich immer, dass du alles richtig angeschlossen hast, bevor du ihn mit Strom versorgst.

Der erste Sketch

Auch hier halten wir alles so einfach wie möglich. Kopiere dir den folgenden Sketch und lade ihn auf deinen Arduino.

#include <Servo.h>

Servo myServo;

void setup() {
  myServo.attach(8);
}

void loop() {
  myServo.write(0);
  delay(2000);
  myServo.write(90);
  delay(2000);
  myServo.write(180);
  delay(2000);
  myServo.write(90);
  delay(2000);
}

Ganz oben im Sketch bindest du die Bibliothek Servo.h ein. Danach erstellst du ein Objekt mit dem Namen myServo.

Im Setup verknüpfst du mithilfe der Funktion attach() den Digitalpin mit diesem Objekt – oder einfacher gesagt, du teilst deinem Arduino mit, dass dein Servo am Pin 8 hängt.

Im Loop steuerst du mit deinem Motor nun verschiedene Winkel mit der Funktion write() an. Du beginnst bei 0° und wartest zwei Sekunden. Danach drehst du weiter auf 90°, dann auf 180°, zurück auf 90° – und wieder von vorne.

Einen Kondensator verwenden

Ein Servo benötigt recht viel Strom, vor allem zu Beginn einer Bewegung. Das kann zu einem Spannungsabfall führen, der zu ungewünschten Ergebnissen bis hin zu einem Reset des Arduinos führen kann.

Um dem vorzubeugen, kannst du einen Kondensator* in die Stromversorgung des Motors einbauen, wie du hier sehen kannst:

Arduino mit Servo und dazwischen geschaltetem Kondensator
Screenshot: Tinkercad

Der Kondensator mit einer Kapazität von mindestens 470µF speichert Energie, die der Servo neben jener vom Arduino nutzen kann. Damit kannst du den Spannungsabfall etwas verringern.

Hinweis: Wenn du einen Elektrolytkondensator* (Elko) verwendest, achte unbedingt auf die richtige Polarität: Die Seite mit dem hellen Strich (s. Screenshot oben) muss an Erde (GND). Wenn du die Seiten vertauschst, kann der Kondensator explodieren!

Wenn auch ein Kondensator nicht hilft, kannst du deinen Servo an seinen eigenen Stromkreis anschließen, der vom Arduino (und weiteren dort angeschlossenen Teilen) unabhängig ist.

Den Servo mit einem Poti steuern

Jetzt gehen wir noch einen Schritt weiter: Du steuerst deinen Motor mit einem Poti*. Ziel ist es hierbei, dass er sich analog zu den Bewegungen des Potentiometers dreht.

Füge also deinem Aufbau ein Poti wie folgt hinzu.

Einen Servo mit dem Poti steuern
Screenshot: Tinkercad

Kopiere dir anschließend den folgenden Sketch und lade ihn auf deinen Arduino:

#include <Servo.h>

int servoPosition;
int potiValue;

Servo myServo;

void setup(){
  pinMode(0, INPUT);
  myServo.attach(8);
}

void loop(){
  delay(10);
  potiValue = analogRead(0);
  servoPosition = map(potiValue, 0, 1024, 0, 180);
  myServo.write(servoPosition);
}

Neu in diesem Sketch sind zwei Variablen. In servoPosition speicherst du den Winkel, den der Servo ansteuern soll. In potiValue steht der aktuelle Wert des Potis, den du so ausliest und speicherst:

 potiValue = analogRead(0);

Jetzt wird es interessant: Den Winkel des Servos bestimmst du mit der Funktion map(). Hier “mappst” du den Wert, den dein Poti ausgibt (potiValue) auf den entsprechenden Winkel des Servos (servoPosition). Hierfür benötigst du sowohl für den Poti als auch für den Motor den Minimal- und Maximalwert. Für den Poti sind das 0 und 1024 – für den Servo 0 und 180 (Grad).

 servoPosition = map(potiValue, 0, 1024, 0, 180);

Zuletzt bewegst du den Motor auf die errechnete Position:

 myServo.write(servoPosition);

Steuerung mit einem Sensor

Noch ein letztes Experiment: Diesmal lässt du einem Temperatursensor den Servo steuern. Hier verwenden wir einen einfachen TMP36*, aber du kannst natürlich auch jeden anderen Temperatursensor verwenden.

Du ahnst sicher schon, worauf das Ganze hinausläuft – genau, ein Analogthermometer. Ersetze den Poti zunächst einfach durch den TMP36:

Servo mit einem Temperatursensor steuern
Screenshot: Tinkercad

Im Sketch musst du ebenfalls nicht viel verändern. Wir haben nur den Namen der Variablen und die Funktion map() angepasst:

#include <Servo.h>

int servoPosition;
int temp;

Servo myServo;

void setup() {
  pinMode(0, INPUT);
  myServo.attach(8);
  Serial.begin(115200);
}

void loop() {
  delay(10);
  temp = analogRead(0);
  servoPosition = map(temp, 20, 358, 0, 180);
  myServo.write(servoPosition);
}

Wie du in der Funktion siehst, haben wir für den TMP36 einen Bereich von 20 bis 358 angegeben. Achte darauf, dass du hier einen für deinen Sensor passenden Wertebereich angibst. Übrigens, wenn du nicht die volle Bandbreite nutzen möchtest, also z.B. den Sensor nur zwischen 20° und 160° drehen möchtest, kannst du das natürlich in der Funktion anpassen.

Möchtest du ein reales Beispiel? Dann wir feinen Blick in unser Analogthermometer. Oder auf das Code-Schloss mit Folientastatur.

Und das soll es gewesen sein. 🙂 Du weißt jetzt, wie du einen Servo-Motor am Arduino anschließt und ihn auf verschiedene Arten und Weisen steuern kannst. Viel Spaß bei deinen weiteren Experimenten!

Letzte Aktualisierung am 25.04.2024 / Affiliate Links / Bilder von der Amazon Product Advertising API

Bausätze für dein nächstes Projekt

Alles, was du für dein nächstes Projekt brauchst – Bausätze inklusive Anleitung als E-Book und der benötigten Hardware.

ESP8266 Projekt

Wetterstation & Vorhersage

Miss die aktuelle Temperatur und Luftfeuchtigkeit und zeige dazu die Wettervorhersage auf einem OLED-Display an.

Bausatz anschauen

Arduino Projekt

Pflanzenwächter

Braucht deine Pflanze Wasser? Dieses Arduino Projekt gibt dir Bescheid, wenn es so weit ist.

Bausatz anschauen

ESP8266 Projekt

Webserver

Lerne, wie du mit deinem Webserver Messdaten ausgibst, Geräte steuerst und dir mit HTML und CSS ein Interface erstellst.

Bausatz anschauen

Arduino Projekt

Wetterstation

Baue deine eigene Wetterstation, die dir Temperatur und Luftfeuchtigkeit anzeigt.

Bausatz anschauen

Auch interessant

Bausatz
Deine Arduino Wetterstation
Mit diesem Projekt-Bausatz misst du die aktuelle Temperatur und Luftfeuchtigkeit und zeigst deine Messdaten auf einem LC-Display an. Inkl. 60-seitiger Anleitung und allen benötigten Bauteilen.
Deine Arduino Wetterstation
Mit diesem Bausatz misst du die aktuelle Temperatur und Luftfeuchtigkeit und zeigst deine Messdaten auf einem LC-Display an.