Servos sind in der Arduino-Welt unverzichtbar, um präzise Bewegungen zu erzeugen – sei es für Roboterarme, Droiden oder animatronische Figuren. Je nachdem, wie flüssig die Bewegung sein soll, gibt es verschiedene Möglichkeiten: die einfache Standardsteuerung, eine selbst programmierte smoothe Variante mit millis() oder die Nutzung spezialisierter Bibliotheken für sanfte Übergänge.
1. Arduino Servo Standard (Servo.h)
- Funktionsweise:
#include <Servo.h>
Servo myServo;
myServo.attach(9);
myServo.write(90); // springt sofort in die Zielposition- Eigenschaften:
- Stellt den Servo sofort auf die Zielposition.
- Bewegung ist sprunghaft → von Position A nach Position B in einem Schritt.
- Kein Timing nötig, da
write()sofort gesetzt wird. - Sehr simpel, aber wirkt „robotisch“.
- Vorteil: Einfach, zuverlässig, leicht zu implementieren.
- Nachteil: Keine sanften Bewegungen, nur Sprünge.
2. Smooth per millis() (eigene Umsetzung)
- Funktionsweise:
- Statt sofort
write()mit Endposition aufzurufen, nutzt man eine VariablecurrentPos, die in kleinen Schritten auftargetPoszuläuft. - Zeitsteuerung erfolgt über
millis()→ also keindelay().
- Statt sofort
unsigned long previousMillis = 0;
int currentPos = 0;
int targetPos = 90;
int stepSize = 1;
unsigned long interval = 20; // alle 20ms ein Schritt
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (currentPos < targetPos) currentPos += stepSize;
if (currentPos > targetPos) currentPos -= stepSize;
myServo.write(currentPos);
}
}- Eigenschaften:
- Bewegung ist gleichmäßig und sichtbar „smooth“.
- Geschwindigkeit lässt sich über
stepSizeundintervaleinstellen. - Keine Blockierung → andere Tasks laufen parallel.
- Vorteil: Kontrolle über Geschwindigkeit, smooth und individuell einstellbar.
- Nachteil: Man muss selbst Code für Beschleunigung, Abbremsen etc. schreiben, wenn man mehr Realismus will.
3. Smooth-Servo-Bibliotheken (z. B. VarSpeedServo, ServoEasing, AccelStepper für Stepper)
- Funktionsweise:
- Bibliothek übernimmt die sanfte Bewegung.
- Man gibt Start- und Zielposition sowie Geschwindigkeit/Easing an, Bibliothek berechnet die Zwischenwerte.
#include <ServoEasing.h>
ServoEasing myServo;
void setup() {
myServo.attach(9);
myServo.write(0);
}
void loop() {
myServo.easeTo(90, 30); // Ziel 90°, Geschwindigkeit 30
}- Eigenschaften:
- Sanfte Übergänge automatisch.
- Unterstützt „Easing-Funktionen“ (linear, beschleunigt, abgebremst).
- Mehrere Servos gleichzeitig synchron steuerbar.
- Vorteil: Professionell wirkende Bewegungen mit wenig Code.
- Nachteil: Bibliotheken können etwas größer/schwerer sein und bieten evtl. mehr Features als nötig.
- Link: https://github.com/ArminJo/ServoEasing
Vergleich
| Ansatz | Einfachheit | Bewegungsgüte | Flexibilität | Multitasking |
|---|---|---|---|---|
| Servo Standard | ⭐⭐⭐⭐⭐ | ⭐ | ⭐ | ⭐⭐⭐⭐⭐ |
| Eigenbau mit millis | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| ServoEasing/VarSpeed | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
👉 Kurz gesagt:
- Servo.h = für schnelle Tests oder simple Anwendungen.
- millis()-Variante = ideal, wenn man viel Kontrolle will und den Code im Griff haben möchte.
- Smooth-Bibliothek = wenn’s filmreif aussehen soll (z. B. bei Droiden oder Animatronics).



