ESP32 programmieren – Servomotor steuern

In diesem kurzen Beitrag möchte ich dir zeigen, wie du am ESP32 einen kleinen Servomotor vom Typ SG90 steuern kannst.

ESP32 programmieren - Servomotor steuern
ESP32 programmieren – Servomotor steuern

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:

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.

ServomotorESP32
DATAIO27
VCC5 V
GNDGND

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.

ESP32 programmieren - steuern eines Servomotors SG90

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert