In diesem kurzen Beitrag möchte ich dir zeigen, wie du am ESP32 einen kleinen Servomotor vom Typ SG90 steuern kannst.
Wie du am Arduino einen Servomotor steuerst habe ich dir bereits im Beitrag Arduino, Lektion 16: Servo ansteuern gezeigt, der ESP32 unterscheidet sich jedoch hier deutlich.
Benötigte Ressourcen für dieses Projekt
Wenn du das kleine Projekt nachbauen möchtest, dann benötigst du:
- ein ESP32*,
- ein USB-Datenkabel*,
- einen Servomotor zbsp. Typ SG90*,
- drei Breadboardkabel*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau der Schaltung
Der Servomotor hat einen Stecker mit drei Anschlüssen, welche wie folgt belegt bzw. angeschlossen werden:
- orange – DATA,
- rot – VCC,
- braun – GND
Somit ergibt sich nachfolgender Aufbau mit dem ESP32.
Servomotor | ESP32 |
---|---|
DATA | IO27 |
VCC | 5 V |
GND | GND |
Besonderheiten bei Servomotoren
Der hier verwendete Servomotor vom Typ SG90 kann durch seine geringe Leistungsaufnahme direkt an den Mikrocontroller angeschlossen werden. Solltest du jedoch einen größeren Servomotor verwenden, dann benötigst du eine zusätzliche Stromquelle.
Nachfolgende zeige ich dir einen Trafo welcher eigentlich für LED-Stripes ausgelegt ist, jedoch durch seine 5 V & 5 A kann dieser für größere Servomotoren verwendet werden.
Beim Anschluss musst du jedoch beachten, dass die Minusleitung vom Trafo mit dem GND Kontakt des Mikrocontrollers verbunden werden muss.
Programmieren
Installieren der benötigten Bibliothek
Zum Ansteuern des Servomotors benötigen wir eine spezielle Bibliothek für den ESP32, welche genau wie die ggf. bereits bekannte für den Arduino funktioniert.
Dieser Bibliothek liegen auch wieder Beispiele bei, welche die Funktion erläutern sollen, jedoch sind diese recht überladen und nur zum Steuern eines Servomotors braucht man nicht viel Code.
Aufbau des Codes zum Steuern eines Servomotors am ESP32
In der Funktion setup müssen wir unseren Servomotor konfigurieren. Dazu musst du wissen, welche DutyCycle dein Servo hat. Hier hilft ein Blick auf das Datenblatt. Der mir vorliegende Servomotor vom Typ SG90 hat eine DutyCycle von 20ms, was 50 Hz entspricht.
servo.setPeriodHertz(50);
Danach setzen wir den Pin sowie die Werte min. & max. für den Servomotor. Für die Werte min. & max. musst du etwas experimentieren, bei mir haben die Werte 500 & 3000 sehr gut funktioniert.
servo.attach(servoPin, 500, 3000);
Um eine Servoposition zu setzen, müssen wir dann die Funktion “write” am Servo Objekt aufrufen und einen positiven, ganzzahligen Wert übergeben. In der Funktion setup nutze ich diese Funktion, um zunächst den Servomotor auf die 0-Position zu setzen.
servo.write(0);
Code zum steuern eines Servomotors mit einer For-Schleife
//Servomotor am Pin IO27 angeschlossen #define servoPin 27 //erzeugen einer Instanz vom Typ Servo Servo servo; void setup() { //setzen der Periode servo.setPeriodHertz(50); //definieren von min & max für den Servo //(in Microsekunden) servo.attach(servoPin, 500, 3000); //setzen des Servomotors auf die 0 Position servo.write(0); } //Funktion zum setzen einer Servoposition void setServoPosition(int degree) { servo.write(degree); //eine kleine Pause von 25ms. delay(25); } void loop() { //Schleife von 0 bis 180 for (int degree = 0; degree < 180; degree++) { setServoPosition(degree); } //Schleife von 180 bis 0 for (int degree = 180; degree > 180; degree--) { setServoPosition(degree); } }
Video
Im nachfolgenden YouTube Video habe ich dir erläutert, wie du die Schaltung aufbaust und in der Arduino IDE programmierst.
im Beispielprogramm fehlt die erste Zeile
#include
Gruss
Oh, vielen Dank ist mir garnicht aufgefallen.
Gruß, Stefan