In Lektion 7 schauen wir uns gemeinsam den MG90S Servomotor an. Servomotoren werden auch kurz als „Servo“ bezeichnet. Das Schöne an Servos ist, dass sie im Vergleich zu anderen Elektromotoren winkelgenau angesteuert werden können. Die Achse des Servos dreht sich also nicht wie ein herkömmlicher Motor dauerhaft im Kreis, sondern dreht sich nur auf zuvor programmierte Positionen und bleibt dann in dieser Position stehen. Das macht Sie zu einem der wichtigsten Bauelemente von ferngesteuerten Autos und Flugzeugen, da mit ihnen zum Beispiel die Lenkung oder die Flugrichtung eingestellt werden kann.
Die Aufgabe für Lektion 7 lautet daher: Steuere einen Servomotor abwechselnd und mit einer kurzen Pause von jeweils 0,5 Sekunden, in der Winkelposition 0°, 90° und 180° an.
Wir starten mit der ROBOTERKONFIGURATION. Den Block für den MG90S Servomotor findest du in dem Menü „Aktion„.
Wähle den Block aus und ziehe ihn mit der linken Maustaste in deine ROBOTERKONFIGURATION.
Anschließend vergeben wir für unseren MG90S Servomotor einen Namen.
Welcher Name wäre hier passender als… Servo?
Nach diesem einfachen ersten Arbeitsschritt, stellen wir jetzt die Verbindung zwischen Servomotor und Mikrocontroller her.
Schaue hierfür auf deinen Funduino Cube und lies ab, an welchem digitalen Pin der MG90S Servomotor mit dem Mikrocontroller verbunden ist.
Großartig!
Der Servomotor ist an Pin D3 mit dem Mikrocontroller verbunden.
Nach dieser einfachen ROBOTERKONFIGURATION, die bei dir jetzt wie in Abbildung Schritt 5 aussehen sollte, können wir uns jetzt dem PROGRAMM zuwenden.
Zuerst navigieren wir im oberen Menü in den Menüpunkt „PROGRAMM„.
Anschließend rufen wir die erweiterten Menüeinstellungen auf, indem wir auf „☆2″ klicken.
In dieser erweiterten Menüansicht finden wir neben den Blöcken, die wir aus den früheren Lektionen schon kennen, weitere, neue Bausteine.
Den Baustein für den SG90 Servomotor finden wir in dem Untermenü „Bewegen„.
Wir klicken also mit der linken Maustaste auf „Bewegen„. Es öffnet sich ein neues Untermenü.
In diesem Untermenü befindet sich der Block für den MG90S an erster Stelle (siehe Abbildung Schritt 4).
Wähle den Baustein aus und ziehe ihn mit der linken Maustaste in das PROGRAMM.
Toll gemacht!
Dein PROGRAMM sollte jetzt so aussehen, wie du es in Abbildung Schritt 5 sehen kannst.
Jetzt ist ein guter Zeitpunkt, um uns an die Aufgabenstellung zu erinnern.
Wir sollen den Servo abwechselnd, mit einer Pause von jeweils 0,5 Sekunden, in die Winkelposition 0°, 90° und 180° bewegen.
Wir starten also zunächst mit der Winkelposition 0°. Diese tragen wir in das Feld mit dunkelblauem Hintergrund ein.
Dein Programm sieht jetzt aus wie in Abbildung Schritt 7.
Der erste Aufgabenteil ist damit erfolgreich abgeschlossen.
Jetzt müssen wir unser PROGRAMM noch um eine Pause ergänzen.
Die Aufgabenstellung sieht vor, dass der MG90S Servomotor nach jeder Winkeländerung für 0,5 Sekunden pausiert.
Den dafür benötigten Block kennst du schon.
Weißt du noch, wo du ihn findest?
Gar nicht so einfach: wir müssen zuerst in die einfache Ansicht (▢1) navigieren.
Danach klicken wir mit der linken Maustaste auf „Kontrolle“ und wählen den Block „Warte ms“ aus, welchen wir dann in unser PROGRAMM ziehen.
In der nächsten Abbildung kannst du jetzt sehen, wie dein Programm aussehen müsste.
Aber Moment: Haben wir die richtige Pausenlänge schon eingestellt?
Wir erinnern uns:
1 Sekunde entspricht 1000ms.
0,5 Sekunden entsprechen…
… 500ms!
Glück gehabt, wir müssen keine Änderung vornehmen.
Im letzten Schritt wiederholen wir die vorherigen Arbeitsschritte noch für die anderen Winkelpositionen 90° und 180°.
Nicht vergessen: Nach jeder Positionsänderung folgt eine Pause von 500ms (0,5 Sekunden).
Wenn dein PROGRAMM jetzt so aussieht, wie du es der Abbildung Schritt 11 entnehmen kannst, hast du alles richtig gemacht.
Gratulation! Das war gar nicht so schwer, oder?
Für die Programmierung des Servo verwenden wir wieder eine Programmbibliothek, damit das Programmieren für uns etwas einfacher wird. In diesem Fall ist die sogenannte „Servo Bibliothek“ bereits in der Arduino IDE erhalten und muss nicht manuell hinzugefügt werden. Das liegt daran, dass alle Servos annähernd gleich angesteuert werden.
Der Servo ist ein gutes Beispiel um zu erklären, was im Hintergrund mit der Bibliothek geschieht. Dazu muss man wissen, wie ein Servo funktioniert. Ein Servo hat an der Anschlussleitung drei Kontakte. Rot und Braun sind das elektrische PLUS und MINUS. Die gelbe Leitung wird als Datenleitung bezeichnet, aber was heißt das genau?
Über die Datenleitung wird ein ganz besonderes elektrisches Signal, eine sogenannte Pulsweitenmodulation (PWM) gesendet. Je nachdem, wie dieses Signal aussieht, stellt sich der Servo auf eine entsprechende Position ein.
Es wäre sehr aufwändig, mit „digitalWrite“ und „delay“– Befehlen ein solches Signal zu erzeugen. Die Programmbibliothek nimmt uns diese Arbeit ab. Stattdessen könenn wir einen einfachen Befehl verwenden mit dem Namen „servo.write(Winkel);“, wenn wir die Bibliothek in unseren Sketch eingebunden haben. Anstelle der Variablen „Winkel“ setzen wir einfach den gewünschten Drehwinkel-Wert ein.
Um die Bibliothek in den Code einzubinden, verwendest du den Ausdruck #include, gefolgt von dem Namen der Bibliothek. Dieser steht dabei in spitzen Klammern (<>). Bei uns würde es also so aussehen.
/* Bibliotheken */
#include
Jetzt, nachdem wir die Servo-Bibliothek hinzugefügt haben können wir den Servo auch in diesem Sketch verwenden. Zuerst erstellen wir ein Objekt des Typen „Servo“. Dieses Objekt stammt aus der Bibliothek und besitzt alle Informationen über einen Servo. Wir nenen den Servo „servo1“.
/* Bibliotheken */
#include
/* Variablen - Bauteile */
Servo servo1;
Im Setup weisen wir dem Servo den passenden Pin zu. Der Servo ist mit dem Pin 3 des Mikrocontrollers verbunden. Anstatt des üblichen pinMode Befehls verwenden wir „ServoName.attach(Pin)“. Dieser Befehl stammt aus der Servo-Bibliothek. Jetzt passen wir also den Namen und den Pin an und wir können loslegen.
/* Bibliotheken */
#include
/* Variablen - Bauteile */
Servo servo1;
/* setup */
void setup()
{ // setup start
servo1.attach(3);
} // ende setup
Nun ist es an der Zeit, darüber nachzudenken, wie wir unseren Servo bewegen können. Zum Glück bietet die
Servo-Bibliothek bereits vorgefertigte Befehle dafür. Um die Position des Servos anzupassen, verwendest du
einfach den Befehl „
ServoName.write(Winkel)“. Ersetze dabei „ServoName“ durch den Namen deines Servos
und „Winkel“ durch den gewünschten Winkelwert. Auf diese Weise kannst du den Servo präzise in die
gewünschte Position bewegen.
Warum probierst du es nicht gleich aus und bewegst den Servo nach deinen Vorstellungen?
/* Bibliotheken */
#include
/* Variablen - Bauteile */
Servo servo1;
/* setup */
void setup()
{ // setup start
servo1.attach(3);
} // ende setup
/* loop */
void loop()
{ // start loop
servo1.write(10);
} // ende loop
Wir haben den Servo jetzt das erste Mal erfolgreich bewegt. Nun müssen wir laut der Aufgabenstellung den Servo noch auf die Winkelpositionen 0 Grad, 90 Grad und 180 Grad. Damit der Motor auch genug Zeit hat sich zu bewegen soll er in jeder Position für eine halbe Sekunde warten. Diese Pause ergänzen wir wieder mit dem „delay“-Befehl.
/* Bibliotheken */
#include
/* Variablen - Bauteile */
Servo servo1;
/* setup */
void setup()
{ // setup start
servo1.attach(3);
} // ende setup
/* loop */
void loop()
{ // start loop
servo1.write(0);
delay(500);
servo1.write(90);
delay(500);
servo1.write(180);
delay(500);
} // ende loop
Jetzt folgt eine Zusammenfassung des Codes:
Zuerst fügen wir die Bibliothek hinzu. Anschließend erstellen wir einen vorgefertigten Servo. Dafür bedienen wir uns aus der Bibliothek.
Im Setup legen wir mit dem „attach“-Befehl den Pin des Servos fest.
Im loop geben wir mit dem „write“-Befehl die Servo Position an. So startet der Servo bei einem Winkel von 0 Grad und bewegt sich bis zu einem Winkel von 180 Grad. Dabei hält er an der Position 90 für eine halbe Sekunde an.
/* Bibliotheken */
#include
/* Variablen - Bauteile */
Servo servo1;
/* setup */
void setup()
{ // setup start
servo1.attach(3);
} // ende setup
/* loop */
void loop()
{ // start loop
servo1.write(0);
delay(500);
servo1.write(90);
delay(500);
servo1.write(180);
delay(500);
} // ende loop
Falls du Unterstützung bei der Verwendung deines Funduino Cubes benötigen solltest, steht dir unser kompetentes Support Team jederzeit gerne zur Verfügung!
Du erreichst uns am Besten per Mail unter info@funduino.de oder von Montags bis Freitags, zwischen 09:00 und 17:00 Uhr unter der Rufnummer (+49) 5921 9704030.