
Ein Servo ist ein kleiner Elektromotor zusammen mit einer elektronischen Steuereinheit, die dazu dient, den Motor auf einen bestimmten Winkel oder eine bestimmte Geschwindigkeit einzustellen. Häufig wird beides zusammen als Servomotor bezeichnet. Angewendet werden Servos in vielen Bereichen - zum Beispiel im Modellbau.
Es wird zwischen zwei Arten von Servos unterschieden:
Jeder Servo kommt mit drei Anschlüssen: VCC (rotes Kabel, Pluspol) und GND (braunes Kabel, Minuspol) stellen die Stromversorgung sicher, ein drittes Kabel (orange) dient als Signalkabel, um den Winkel bzw. die Geschwindigkeit einzustellen. Das Signal wird per Pulsweitenmodulation übermittelt.
Über den Jacdac-Anschluss können auf einfache Weise Sensoren und Aktoren an den Calliope angeschlossen und angesteuert werden. Es können mehrere Jacdac-Bauteile hintereinander angeschlossen werden. Über den Jacdac-Hub können sie auch parallel angeschlossen werden. Jacdac ermöglicht nicht nur die Kommunikation von Sensor und Calliope, sondern auch per WebUSB mit Makecode. Auf diese Weise wird der aktuelle Sensorwert direkt in Makecode angezeigt.
Für die Verbindung mit dem Jacdac-Anschluss gibt es ein Servo-Modul, an dem sich zwei Servos anschließen lassen. Beachte die Angabe der Farben auf dem Modul, damit die Kabel richtig herum angeschlossen werden! Da ein Servomotor recht viel Strom ziehen kann, wird zusätzlich das Power-Modul benötigt.
Der Anschluss und die Programmierung ist auf der Jacdac-Seite von calliope.cc schön gezeigt.
Achte darauf, welcher Servo der kontinuierliche Servo (360° Servo) und welcher der Winkelsteller-Servo (180° Servo) ist, um sie richtig anzusteuern.
Am einfachsten ist wahrscheinlich die Nutzung des Servoboards, über das bis zur vier Servos und zwei Motoren am Calliope angeschlossen werden können. Falls dieses jedoch nicht zur Verfügung steht, werden unten andere Schaltungsarten dargestellt. Die Programmierung erfolgt mit dem Servoboard genauso wie unten dargestellt, jedoch müssen die Signalpins entsprechend angepasst werden.
Wenn nur ein Servo angesteuert werden soll und dieser schon ab einer Spannung von 3V funktioniert, lässt sich der Servo direkt an der Pin-Leiste des Calliope anschließen. (Wenn du dir unsicher bist, ob 3V für deinen Servo ausreichen, dann recherchiere im Internet, z. B. mit dem Begriff "Servo bezeichnung Datasheet".) Für die folgenden Beispiele wurden die 3V-Servos FT90R und FT90B verwendet.

Für das Signalkabel (orange) kommen die Pins P0, P1, P2, P3, C4, C8, C9, C13, C14, C15, C16, C17 in Frage, soweit diese nicht anderweitig schon belegt sind (die Pins P0 bis P3 können über die goldenen Ringpads schon in Benutzung sein).
Auch stärkere Servos wie der verbreitete SG90 können mit dem Calliope gesteuert werden. Die Stromversorgung muss jedoch anders hergestellt werden, weil der Calliope weder genug Spannung noch genug Strom bereitstellen kann. Dazu kann wie im Folgenden dargestellt ein Batteriefach genutzt werden. Mit vier 1,5V Batterien kommt man auf 6V. Im Fall des SG90, der mit 4,8V bis 6V versorgt werden muss, passt das.
Für das Signalkabel (orange) kommen die Pins P0, P1, P2, P3, C4, C8, C9, C13, C14, C15, C16, C17 in Frage, soweit diese nicht anderweitig schon belegt sind (die Pins P0 bis P3 können über die goldenen Ringpads schon in Benutzung sein).
Da es sich bei dem SG90 um einen Winkelsteller-Servo handelt, sind nur die entsprechenden Programmbeispiele für ihn relevant.

Das Power Supply Module dient zur Spannungsversorgung auf einem Steckbrett. Dazu kann eine Batterie mit \(6,5\, V\) bis \(12\, V\) oder ein USB-Kabel angeschlossen werden. Die Spannung wird auf dem Modul je nach Einstellung der Jumper auf \(5\, V\) oder \(3,3\, V\) heruntergeregelt. Dazu verbindet man mithilfe der Jumper die Anschlüsse 5V und OFF bzw. 3.3 und OFF.
Die Spannung kann entlang der langen äußeren Leisten abgegriffen werden, wenn der Taster neben der Hohlbuchse gedrückt ist. Die Zuordnung zu Pluspol und Minuspol ist auf dem Power Supply Module mit + bzw. - markiert.
Das folgende Bild zeigt, wie man die Stromversorgung für zwei Servos mit Hilfe des Power Supply Modules herstellen kann.

Ergänzende Hinweise:
Zum Programmieren mit Makecode muss die Erweiterung "Servo" geladen werden. Damit können sowohl Winkelsteller-Servos als auch kontinuierliche Servos angesteuert werden.
Zunächst muss der Servo in der Roboterkonfiguration angelegt werden. Dort stehen aktuell (Stand 09.04.26) nicht alle möglichen Pins zur Verfügung, daher muss das Signalkabel ggf. an einen anderen, hier ausgewählten Pin wie P1 angeschlossen werden. Bei dieser Programmierung können nur Winkelsteuer-Servos angesteuert werden.


Zunächst muss das Modul "Servo" zum Projekt hinzugefügt werden, welches zwei Funktionen zum Ansteuern von Servos zur Verfügung stellt. Dazu gehe auf Projekt -> Module hinzufügen -> Servo. Danach muss das Modul in main.py importiert werden und die Funktionen stehen bereit.
# Imports go at the top
from calliopemini import *
from Servo import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed():
# 180°-Servo an P0 wird auf 0°, 90° und 180° gestellt
set_servo_angle(pin0, 0) # Winkel auf 0°
sleep(1000)
set_servo_angle(pin0, 90) # Winkel auf 90°
sleep(1000)
set_servo_angle(pin0, 180) # Winkel auf 180°
sleep(1000)
Testprogramm zum Ansteuern eines Winkelsteller-Servos.
# Imports go at the top
from calliopemini import *
from Servo import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed():
# 360°-Servo an P0
set_servo_speed(pin0, 100) # volles Tempo vorwärts
sleep(1000)
set_servo_speed(pin0, 0) # Stopp
sleep(1000)
set_servo_angle(pin0, -100) # volles Tempo rückwärts
sleep(1000)
set_servo_speed(pin0, 0) # Stopp
Testprogramm zum Ansteuern eines kontinuierlichen Servos.
Die Steuerung der Servos erfolgt über ein PWM-Signal (Pulsweitenmodulation). Dabei gibt die Länge der Signalzeit, in der die Spannung auf 3,3V liegt, an, welcher Winkel bzw. welche Geschwindigkeit eingestellt werden soll. Die Signalzeiten variieren dabei von Servo zu Servo ein bisschen, sind aber im Wesentlichen vergleichbar. Wenn der Winkel mit Hilfe der Erweiterung (siehe oben) nicht ganz korrekt eingestellt wird, liegt das daran, dass die Signalzeiten für den verwendeten Servo nicht genau denen entsprechen, die der Erweiterung zugrunde liegen. Wenn man die Signalzeiten zu einem Analogwert für die Pulsweitenmodulation umrechnet, erhält man die exakten Werte.
Beispiel:
Die Signalzeit 1,5ms steht für einen Winkel von 90°. Um den zugehörigen Analogwert zu berechnen, teilt man die Signalzeit durch die Periodendauer (20ms) und multipliziert diese mit dem maximalen Analogwert von 1023: \(\frac{1,5ms}{20ms} \cdot 1023 = 76,725 \approx 77\).
Im Folgenden wird die Programmierung mit den Signalzeiten für den Servo FT90R bzw. FT90B zu Grunde gelegt.
FT90B (180° Servo)
| Signalzeit | Bedeutung | Analogwert |
|---|---|---|
| 0,7 ms | 0° | 36 |
| 1,5ms | 90° | 77 |
| 2,3ms | 180° | 118 |
FT90R (360° Servo)
| Signalzeit | Bedeutung | Analogwert |
|---|---|---|
| 0,7 ms | Tempo 100% im Uhrzeigersinn | 36 |
| 1,5ms | Tempo 0% / Stopp | 77 |
| 2,3ms | Tempo 100% gegen den Uhrzeigersinn | 118 |
Eine Erweiterung ist nicht nötig. Die Befehle finden sich unter Fortgeschritten -> Pins. Das folgende Programm stellt den Winkel bzw. die Geschwindigkeit entsprechend der oben dargestellten Tabellen ein.
Zunächst muss ein analoger Aktor in der Roboterkonfiguration angelegt werden. Dort stehen aktuell (Stand 09.04.26) nicht alle möglichen Pins zur Verfügung, daher muss das Signalkabel ggf. an einen anderen, hier ausgewählten Pin wie P1 angeschlossen werden. Das folgende Programm stellt den Winkel bzw. die Geschwindigkeit entsprechend der oben dargestellten Tabellen ein.


Das Hinzufügen eines Moduls ist nicht mehr nötig. Das folgende Programm stellt den Winkel bzw. die Geschwindigkeit entsprechend der oben dargestellten Tabellen ein.
# Imports go at the top
from calliopemini import *
# Code in a 'while True:' loop repeats forever
while True:
if button_a.is_pressed():
pin0.write_analog(118)
sleep(5000)
pin0.write_analog(77)
sleep(5000)
pin0.write_analog(36)
sleep(5000)
pin0.write_analog(77)
Baue mit einem Servo eine Schranke, die auf Knopfdruck geöffnet und wieder geschlossen werden kann.