In diesem Tutorial lernst du, wie man einen 360-Grad-Servomotor steuert. 360-Grad-Servos, auch bekannt als Servomotoren mit kontinuierlicher Rotation, sind eine spezielle Art von Servomotoren, die sich kontinuierlich drehen können.
Im Gegensatz zu herkömmlichen Servos, die sich nur von 0° bis 180° drehen können und deren Geschwindigkeit nur über die Positionssteuerung geregelt wird, ermöglichen kontinuierlich rotierende Servos die Steuerung der Drehrichtung und der Geschwindigkeit.
Kontinuierlich rotierende Servos werden in vielen Anwendungen eingesetzt, wie zum Beispiel in kleinen Hobbyrobotern wie dem BoeBot.
In diesem Tutorial zeige ich dir, was 360-Grad-Servos sind, wie sie funktionieren und wie man einen mit einem Arduino Uno steuert. Zuerst erkläre ich, wie der kontinuierlich rotierende Servo funktioniert und wie man ihn mit dem Arduino verbindet. Danach zeige ich dir, wie du eine Schaltung bauen kannst, um die Geschwindigkeit und die Drehrichtung eines Servomotors zu steuern.
Wir haben auch einen Artikel über How To Control A 360 Degree Servo Motor with ESP32, falls du stattdessen mit einem ESP32-Mikrocontroller arbeiten möchtest.
Materialien
Für die Durchführung dieses Tutorials benötigst du folgende Komponenten:
Hardware-Komponenten
| FEETECH FS90R 360 Degree Continuous Rotation Micro Servo Motor | x1 |
| Arduino UNO R3 | x1 |
| Male-to-Male Jumper Wires | x1 |
| Breadboard | x1 |
| 10 kΩ potentiometer (Breadboard-Typ) | x1 |
| USB cable type A/B | x1 |
| 5V power supply (optional) | x1 |
Software
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Vielleicht kennst du Servomotoren schon und denkst „Ich habe schon einen“. Aber schau genau, ob in der Artikelbeschreibung „360-Grad-Servo“ oder „kontinuierlich rotierender Servo“ steht.
Bei FEETECH-Motoren steht auf dem Aufkleber am Motorgehäuse explizit „continuous rotation servo“.
Wenn du die Motoren woanders kaufst als über den oben genannten Link, stelle sicher, dass es sich tatsächlich um 360-Grad-Servos handelt!
Kontinuierlich rotierende Servomotoren vs. universelle Servomotoren
Kontinuierlich rotierende Servos sind eine spezialisierte Version universeller Hobby-Servomotoren.
Universelle Hobby-Servos bestehen aus drei Hauptkomponenten:
1. Elektromotor
Dies ist typischerweise ein gebürsteter Gleichstrommotor, der je nach Versorgungsspannung mit 5V-12V betrieben wird.
2. Getriebesystem
Wenn du schon mal einen Servomotor benutzt hast, ist dir vielleicht aufgefallen, dass er viel langsamer dreht als ein normaler Motor, sich aber nur schwer von Hand stoppen lässt.
Das liegt an einem Getriebesystem, das das Drehmoment des Motors erhöht und dadurch die Drehgeschwindigkeit reduziert.
3. Rückkopplungs- und Steuerungsschaltung
Die Steuerungsschaltung besteht aus einem Rückmeldemechanismus, meist ein Potentiometer, das an der Abtriebswelle des Getriebes angeschlossen ist, um die aktuelle Position des Motors zu ermitteln.
Je nach aktueller Position und dem Signal, das wir zum Drehen an eine andere Position geben, versorgt die Steuerungsschaltung den Motor mit Strom, um die gewünschte Position zu erreichen.
Servomotoren besitzen auch ein „Haltemoment“. Das bedeutet, wenn wir den Servo auf eine bestimmte Position einstellen und versuchen, die Welle von Hand oder mit äußerer Kraft zu drehen, wird er dem entgegenwirken und versuchen, die Position zu halten.
Sei vorsichtig, wenn du das ausprobierst; bei Kunststoffzahnrädern kannst du die Zahnräder beschädigen!
Wenn du mehr Details zu universellen Servomotoren möchtest, schau dir gerne unser How to control servo motors with Arduino Tutorial an!
Was macht einen kontinuierlich rotierenden Servomotor besonders?
Ein typischer Servomotor benötigt ein ca. 50Hz PWM-Signal mit Pulsweiten von 1ms bis 2ms, um die Position seiner Welle zu steuern.
Zum Beispiel dreht der Motor bei einer Pulsweite von 1,5ms sofort auf die 90-Grad-Position und hält diesen Winkel, bis sich die Pulsweite ändert.

Laut einigen Herstellern können sich Pulsweiten/Frequenzen leicht von 0,5ms bis 2,5ms ändern, und die meisten RC-Hobbyservos akzeptieren Pulsfrequenzen im Bereich von 40-200Hz.
Kontinuierlich rotierende Servos bieten hingegen keine Positionssteuerung. Bei einem 1,5ms-Puls bei 50Hz dreht sich der Servo nicht.
Wenn wir die Pulsweite unter 1,5ms verringern, dreht sich der Motor im Uhrzeigersinn. Erhöhen wir die Pulsweite, dreht er gegen den Uhrzeigersinn.
Je weiter die Pulsweite von 1,5ms abweicht (z.B. 1,8ms oder 1,2ms), desto schneller dreht sich der Motor. Bei 2ms erreicht er seine maximale Geschwindigkeit gegen den Uhrzeigersinn, bei 1ms seine maximale Geschwindigkeit im Uhrzeigersinn.

Es ist wichtig zu wissen, dass kontinuierlich rotierende Servoskeine exakte Positionssteuerungder Welle bieten. Wir können nur Richtung und Drehgeschwindigkeit steuern.
Bei 180-Grad-Positionsservos können wir Position und Richtung steuern, aber nicht die Geschwindigkeit. Details zu diesen Unterschieden findest du in unserem Tutorial über Positional versus Continuous Servos.
Pinbelegung des kontinuierlich rotierenden Servomotors
Die Pinbelegung des 360-Grad-Servos ist dieselbe wie bei universellen 180-Grad-Servomotoren.

Die braunen und roten Pins sind die Stromversorgung, der gelbe Pin ist der Signaleingang.
In speziellen Fällen, wie beim Adafruit Feedback 360 Degree Servomotor, gibt es einen zusätzlichen Pin, der eine 0-5V Spannung ausgibt, abhängig vom Winkel der Welle zwischen 0 und 360 Grad.
Wenn du so einen hast, kannst du die genaue Position der Welle jederzeit durch Messen des analodRead()Werts dieses Pins bestimmen.
Wie man einen 360-Grad-Servo mit Arduino verwendet
Falls du die Arduino IDE noch nicht installiert hast, mach das bitte jetzt. Im nächsten Abschnitt verbinden wir den Servo mit dem Arduino Uno.
Anschluss des 360-Grad-Servomotors an den Arduino Uno
Der dreipolige Stecker des Servomotors hat die oben beschriebene Pinbelegung. Wenn du einen kleinen 5V-Servo wie den hier genannten hast, kannst du ihn direkt wie unten gezeigt anschließen:

HINWEIS: Um das Risiko zu minimieren, zu viel Strom zu ziehen und deinen USB-Port zu beschädigen, belastet den Motor nicht zu stark. Wenn du den Motor zur Positionskontrolle verwenden möchtest, schließe bitte eine externe 5V-Versorgung (oder eine Versorgung, die die Betriebsspannung des Motors liefert) wie im Schaltplan unten gezeigt an.

Nachdem alles verbunden ist, stecke den Arduino mit dem USB-Kabel an deinen Computer.
Arduino für das Hochladen des Codes einrichten
Gehe zu Tools -> Board und wähle Arduino Uno aus der Liste. Dann gehe zu Tools -> Port und wähle den COM-Port aus.
Normalerweise gibt es nur einen COM-Port, und wenn dein Arduino ein Originalboard ist, wählt die IDE den Port meist automatisch aus.

Beispielcode zum Testen des Servos
Jetzt, wo alles eingerichtet ist, schreiben wir etwas Code!
Wie bereits erwähnt, ist der kontinuierlich rotierende Servo/360-Servo eine spezielle Version des universellen Servos, mit dem wir nicht die Position, sondern die Geschwindigkeit und Drehrichtung des Motors steuern können.
Der Code ist identisch mit dem für universelle Servos, aber die Ausgabe ist anders.
// Include the library
#include "Servo.h"
// Create the servo object
Servo myservo;
// Setup section to run once
void setup() {
myservo.attach(9); // attach the servo to our servo object
myservo.write(90); // stop the motor
}
// Loop to keep the motor turning!
void loop() {
myservo.write(45); // rotate the motor counter-clockwise
delay(5000); // keep rotating for 5 seconds (5000 milliseconds)
myservo.write(90); // stop the motor
delay(5000); // stay stopped
myservo.write(135); // rotate the motor clockwise
delay(5000); // keep rotating 😀
}
Kopiere diesen Code, klicke auf „Upload“ und sieh zu, wie sich der Servo von selbst dreht!
Beobachtungen
Der 360-Grad-Servo dreht sich 5 Sekunden lang in eine Richtung (im Uhrzeigersinn), bleibt 5 Sekunden stehen und dreht sich dann 5 Sekunden in die entgegengesetzte Richtung. Dieser Zyklus wiederholt sich, solange Strom anliegt.
Wie der Code für den 360-Grad-Servo funktioniert
Wir beginnen mit dem Einbinden der von Arduino bereitgestellten Servo-Bibliothek. Diese Bibliothek erzeugt und steuert das 50Hz-Puls-Signal, das zur Steuerung des Servomotors benötigt wird.
#include "Servo.h"
Wenn du vergessen hast, wie genau diese Zeile geschrieben wird, kannst du unter Sketch -> Include Library die benötigte Bibliothek auswählen, und die IDE fügt die Zeile automatisch ein.
Als Nächstes habe ich mein Servo Objecterstellt. Dieses Objekt repräsentiert meinen Servo im Code, und alle Änderungen daran wirken sich auf den tatsächlichen Servo aus.
Du kannst das Servo-Objekt beliebig benennen, achte aber darauf:
- Beginne den Objektnamen mit einem Buchstaben
- Verwende keine Leerzeichen im Objektnamen
Servo myservo;
Kommen wir zum Setup-Abschnitt. Dieser Teil des Arduino-Codes läuft nur einmal, sobald der Arduino mit Strom versorgt wird.
Ich habe diesen Abschnitt genutzt, um meinen Servo an das Servo-Objekt zu binden und sicherzustellen, dass er stoppt.
Ich habe Pin 9 des Arduino mit dem Signaleingang des Servos verbunden.
Mit der myservo.attach()Funktion teile ich dem Code mit, welcher Pin verwendet wird, damit Änderungen am Servo-Objekt auf den richtigen Motor wirken. Das ist besonders nützlich, wenn mehrere Servos verwendet werden.
Indem wir für jeden Motor ein Servo-Objekt erstellen, können wir sie einzeln steuern!
void setup() {
myservo.attach(9); // attach the servo to our servo object
myservo.write(90);
}
Mit der myservo.write()Zeile können wir bei einem kontinuierlich rotierenden Servo die Drehrichtung und Geschwindigkeit steuern.
Zum Beispiel erreicht ein universeller Servo die Mittelstellung bei myservo.write(90). Bei einem kontinuierlich rotierenden Servo stoppt diese Einstellung die Drehung. Werte über 90 lassen den Servo im Uhrzeigersinn drehen und bestimmen die Geschwindigkeit.
Zum Beispiel bewirkt myservo.write(95), dass der Motor sehr langsam startet, während myservo.write(180) den Motor mit voller Geschwindigkeit im Uhrzeigersinn laufen lässt.
Werte zwischen 0 und 90 kehren die Drehrichtung um.
Ein Wert nahe 0 stellt die maximale Geschwindigkeit gegen den Uhrzeigersinn ein, während ein Wert wie 85 die Geschwindigkeit deutlich verringert.
Im Loop-Abschnitt habe ich einen einfachen Code geschrieben, der die Abfolge zeigt: fünf Sekunden gegen den Uhrzeigersinn mit halber Geschwindigkeit drehen, fünf Sekunden anhalten und dann fünf Sekunden im Uhrzeigersinn drehen.
Steuerung der Geschwindigkeit eines 360-Grad-Servos mit Potentiometer
Manchmal möchtest du die Geschwindigkeit eines 360-Grad-Servos mit einem Arduino fein steuern.
Ich zeige dir, wie du die Position eines Potentiometers ausliest und damit die Geschwindigkeit des 360-Grad-Servos mit Arduino steuerst.
Hardware einrichten
Verbinde den Servo wie zuvor mit dem Arduino. Zusätzlich verbinde ein 10k-Potentiometer wie im Schaltplan unten gezeigt:

Da das Potentiometer ein analoges Bauteil ist, muss es an einen analogen Eingang des Arduino angeschlossen werden. Die analogen Pins sind mit A0, A1 usw. gekennzeichnet. Ich habe das Potentiometer an Pin A0 angeschlossen.
Arduino programmieren, um den Servo zu steuern
Hier ist der Code, den ich geschrieben habe, um Geschwindigkeit und Richtung des Servos mit dem Potentiometer zu steuern:
#include "Servo.h" // Include the servo library
Servo myservo; // create servo object to control our servo
int potentiometerPin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potentiometerPin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it for use with the servo (value between 0 and 180)
myservo.write(val); // sets the servo speed and direction according to the scaled value
}
Wie im vorherigen Code beginne ich mit dem Einbinden der Servo-Bibliothek und der Erstellung des Servo-Objekts.
Dann definiere ich zwei Variablen, um den Pin und den analogen Wert des Potentiometers zu speichern.
int potentiometerPin = A0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin
Im Setup-Abschnitt verbinde ich meinen Servo mit dem Servo-Objekt. Wie gewohnt wird so der physische Motor mit der Variablen myservoverbunden, ähnlich wie im vorherigen Beispiel.
Im loop()-Abschnitt passiert das Interessante! Die Schleife läuft folgendermaßen ab:

Die Zeile val = analogRead(potentiometerPin); liest den Wert des Potentiometers aus und speichert ihn in der Variable val.
Dieser Wert kann je nach Potentiometerstellung zwischen 0 und 1023 liegen.
Anschließend verwende ich die Arduino-Funktion map(), um den Bereich von 0-1023 auf 0-180 zu mappen, da unser Servo Werte zwischen 0 und 180 erwartet.
Der gemappte Wert wird in der Variable valgespeichert und ersetzt den rohen Analogwert.
Schließlich sende ich den Wert mit myservo.write(val); an den 360-Grad-Servo, um das Verhalten des Motors zu aktualisieren.
Beobachtungen
Wir sehen, dass der Servo stoppt, wenn das Potentiometer in Mittelstellung steht.
Dreht man den Potentiometerknopf im Uhrzeigersinn, dreht sich der Motor ebenfalls im Uhrzeigersinn und umgekehrt.
Ist das Potentiometer ganz nach links oder rechts gedreht, dreht der Servo mit maximaler Geschwindigkeit in die jeweilige Richtung.
Fazit
In diesem Tutorial habe ich gezeigt, wie man mit einem 360-Grad-Servomotor und Arduino Uno startet.
Obwohl 360-Grad-Servos seltener sind, finden sie in vielen Hobby-RC-Projekten Verwendung. Für stabile Anwendungen mit hohem Drehmoment oder Leistung wird eine separate Stromversorgung dringend empfohlen.
Wenn du Fragen hast, hinterlasse sie gerne im Kommentarbereich.

