Lektion 89: Verwendung von kontinuierlichen oder 360-Servomotoren | Arduino Schritt-für-Schritt-Kurs
Haben Sie sich jemals gewünscht, einen Motor beliebig lange in beide Richtungen drehen zu lassen, anstatt ihn nur wie einen Standard-Servo hin und her zu schwenken? Genau das bietet ein kontinuierlicher oder 360-Grad-Servomotor. Im Gegensatz zu einem Standard-Servo, der sich zu einem bestimmten Winkel bewegt (typischerweise 0 bis 180 Grad), dreht sich ein kontinuierlicher Servo endlos entweder im oder gegen den Uhrzeigersinn. Das macht ihn perfekt für den Bau kleiner Roboter, Kameraplattformen oder jedes Projekt, das eine kontinuierliche Drehsteuerung erfordert.
In diesem Projekt bauen wir ein Steuerungssystem für einen 360-Grad-Servo mit nur drei Drucktastern. Sie können den Servo jederzeit im Uhrzeigersinn, gegen den Uhrzeigersinn drehen oder anhalten lassen. Dieser Leitfaden führt Sie durch die Verkabelung, erklärt die benutzerkonfigurierbaren Teile des Codes und zeigt Ihnen eine Live-Demonstration des Systems in Aktion.
Hier sind einige praktische Ideen für die Verwendung eines kontinuierlichen Servos in Ihren eigenen Projekten:
- Bauen Sie einen kleinen zweirädrigen Roboter: Verwenden Sie zwei kontinuierliche Servos, um die Räder anzutreiben, sodass Vorwärts-, Rückwärts- und Drehbewegungen möglich sind.
- Erstellen Sie eine Schwenk-Neige-Kamerahalterung: Verwenden Sie einen kontinuierlichen Servo für langsames, endloses Schwenken einer Sicherheits- oder Wildtierkamera.
- Automatisieren Sie ein Förderband: Steuern Sie ein kleines Fördersystem zum Sortieren oder Ausgeben von Gegenständen.
- Entwerfen Sie einen drehbaren Ausstellungsständer: Präsentieren Sie ein 3D-Modell oder Produkt auf einer Plattform, die sich kontinuierlich dreht.
Benötigte Hardware
- Arduino-Board (Uno, Nano usw.)
- Kontinuierlicher (360-Grad) Servomotor (z. B. FS90R, DS04-NFC)
- 3x Drucktaster
- Jumper-Kabel
- Breadboard
Verkabelungsanleitung
Die Verkabelung für dieses Projekt ist unkompliziert. Der Servomotor hat drei Drähte: typischerweise einen dunklen für Masse (GND), einen mittleren (oft rot) für Strom (5V) und einen helleren (orange, gelb oder weiß) für das Signal. Wie im Video gezeigt, wird der Servo wie folgt an den Arduino angeschlossen:
- Servo-Masse (dunkler Draht): An Arduino GND anschließen.
- Servo-Strom (mittlerer/roter Draht): An Arduino 5V anschließen.
- Servo-Signal (heller Draht): An Arduino-Pin 9 anschließen.
Für die drei Drucktaster hat jeder Taster zwei Seiten. Eine Seite aller Taster wird zusammengeschlossen und dann mit Arduino GND verbunden. Die andere Seite jedes Tasters wird mit einem separaten digitalen Pin verbunden, wie unten beschrieben (im Video bei 03:40):
- Im Uhrzeigersinn (CW)-Taster: An Arduino-Pin 2 anschließen.
- Stopp-Taster: An Arduino-Pin 3 anschließen.
- Gegen den Uhrzeigersinn (CCW)-Taster: An Arduino-Pin 4 anschließen.

Code-Erklärung
Der Code ist so konzipiert, dass er leicht konfigurierbar ist. Der wichtigste Teil, den Sie anpassen müssen, ist das sc[]-Array, das die spezifischen PWM-Werte enthält, die an den Servo gesendet werden, um seine Aktionen zu steuern. Diese Werte sind nicht universell und müssen für Ihren spezifischen Servomotor kalibriert werden (im Video bei 12:23).
int sc[]={106, 58, 0};// Servo-Befehle sind in Reihenfolge
//CCW, STOP, CW
Dieses Array ist das Herzstück der Kalibrierung. Die Werte werden in dieser Reihenfolge verwendet:
- sc[0] = 106: Dieser Wert wird gesendet, um den Servo gegen den Uhrzeigersinn zu drehen.
- sc[1] = 58: Dies ist der "Stopp"-Wert. Aufgrund der internen Schaltung variiert der genaue Wert, der den Motor stoppt. Sie könnten feststellen, dass sich Ihr Servo langsam dreht, selbst wenn dieser Befehl gesendet wird, und Sie müssen diese Zahl leicht anpassen, um den wahren "Stillstands"-Wert für Ihren Motor zu finden.
- sc[2] = 0: Dieser Wert lässt den Servo mit maximaler Geschwindigkeit im Uhrzeigersinn drehen.
Sie können die Werte im sc[]-Array anpassen, um die Drehgeschwindigkeit zu ändern. Zum Beispiel macht das Setzen von sc[0] auf 70 die Drehung gegen den Uhrzeigersinn langsamer. Je näher ein Wert am "Stopp"-Wert (58) liegt, desto langsamer dreht sich der Motor in diese Richtung. Werte weiter entfernt von 58 erhöhen die Geschwindigkeit bis zu einem maximalen Limit.
Es gibt auch einige andere wichtige Variablen, die Sie möglicherweise ändern müssen. Der servoPin ist auf 9 gesetzt, was ein PWM-fähiger Pin auf Ihrem Arduino sein muss. Die Taster-Pins sind am Anfang des Codes definiert und können bei Bedarf geändert werden.
int servoPin = 9;// dieser Pin muss einer mit PWM ~ sein
#define STOPpin 3 // Drucktaster-Pin für STOP
#define CWpin 2 // Drucktaster für CW
#define CCWpin 4 // Drucktaster für CCW
Schließlich enthält das scText[]-Array die Zeichenfolgen, die zur Fehlersuche an den seriellen Monitor ausgegeben werden. Sie können diese ändern, wenn Sie andere Meldungen anzeigen möchten.
So verwenden Sie den Code
Laden Sie den bereitgestellten Code auf Ihr Arduino-Board hoch. Öffnen Sie den seriellen Monitor (auf 9600 Baud eingestellt), um die Statusmeldungen zu sehen. Sie können den Servo nun mit den drei Tastern steuern:
- CW-Taster gedrückt halten: Der Servo beginnt sich im Uhrzeigersinn zu drehen. Der serielle Monitor zeigt "CW" und den gesendeten Wert an.
- CCW-Taster gedrückt halten: Der Servo beginnt sich gegen den Uhrzeigersinn zu drehen. Der serielle Monitor zeigt "CCW" und den gesendeten Wert an.
- Stopp-Taster drücken: Der Servo versucht anzuhalten. Der serielle Monitor zeigt "Stop" an.
Wenn Ihr Servo nicht vollständig anhält, wenn die Stopp-Taste gedrückt wird, müssen Sie den Wert sc[1] im Array sc[] kalibrieren. Versuchen Sie, den Wert leicht zu ändern (z. B. von 58 auf 54 oder 52) und laden Sie den Code erneut hoch, bis der Motor vollkommen stillsteht.
Live-Demonstration
Im Video demonstriert der Präsentator das gesamte System. Sie können sehen, wie sich der Servo je nach Tastendruck in beide Richtungen dreht. Die Ausgabe des seriellen Monitors wird ebenfalls angezeigt und zeigt den aktuellen Zustand („CW“, „Stop“ oder „CCW“) sowie den spezifischen Wert, der an den Servo gesendet wird. Dies ist ein großartiges Werkzeug zum Debuggen und Finden der perfekten Kalibrierungswerte für Ihren spezifischen Motor. Die Demonstration zeigt auch, wie die Anpassung der Werte im Array sc[] die Geschwindigkeit des Motors direkt beeinflusst, von einem langsamen Kriechen bis zur maximalen Drehgeschwindigkeit.
Fazit
Dieses Projekt bietet eine einfache und effektive Möglichkeit, einen kontinuierlich drehenden Servomotor zu steuern. Durch das Verständnis des Kalibrierungsprozesses für den „Stopp“-Wert können Sie eine präzise Steuerung in Ihren eigenen Robotik- und Automatisierungsprojekten sicherstellen.
Video-Kapitel
- [00:05] Einführung in den kontinuierlich drehenden Servomotor
- [02:02] Hardware-Überblick über den Servo
- [02:40] Schaltplan und Verbindungen
- [05:07] Code-Erklärung: Variablen und Setup
- [08:03] Code-Erklärung: Hauptschleifenlogik
- [09:56] Die Funktion servoCommand()
- [10:54] Live-Demonstration und serielle Monitorausgabe
- [12:23] Kalibrierung von Servogeschwindigkeit und Stoppwerten
++
/*
* S05-13 Servo with 3 push buttons
* Demonstration of Controlling a Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo using push buttons
*
* Modified by Ahmad Shamshiri for Robojax Robojax.com
* on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww
Watch Introduction to 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
Original code by BARRAGAN <http://barraganstudio.com>
*
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be one of those with PWM ~
#define STOPpin 3 // push button pin for STOP
#define CWpin 2 // push button for CW
#define CCWpin 4 // push button for CCW
int sc[]={106, 58, 0};// servo commands are in order
//CCW, STOP,CW
String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
//CW button status (CWBS)
//CCW button status (CCWBS)
//stop button status (SBS)
void setup() {
Serial.begin(9600);
pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
myservo.write(sc[1]);// send STOP command
statusText=1;// initial value is STOP
}
void loop() {
CCWBS = digitalRead(CCWpin);// read status of button CCW
SBS = digitalRead(STOPpin);// read status of button STOP
CWBS = digitalRead(CWpin);// read status of button CW
if(CCWBS ==LOW)
{
servoCommand(0);
}else if(SBS ==LOW)
{
servoCommand(1);
}else if(CWBS ==LOW)
{
servoCommand(2);
}
Serial.println(scText[statusText]);
delay(50);
}// loop
void servoCommand(int n)
{
statusText = n;
myservo.write(sc[n]);
Serial.print("Going to ");
Serial.print(scText[n]);
Serial.print( "(");
Serial.print(sc[n]);
Serial.println(")");
}
Dinge, die Sie vielleicht brauchen
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Ressourcen & Referenzen
-
Intern
Dateien📁
Andere Dateien
-
SG90 Seroo Motor-Datenblatt
robojax-servo-SG90_datasheet.pdf0.12 MB