Servomotor

Das Joy-Car ist mit zwei Servomotoren ausgestattet, die beide direkt auf dem Mainboard angeschlossen werden können. Diese Servomotoren bieten eine zusätzliche Möglichkeit, das Joy-Car um bewegliche Komponenten zu erweitern.
Ein typisches Beispiel für die Verwendung eines Servomotors ist die Steuerung eines Ultraschallsensors. Durch den Servomotor kann der Sensor gedreht oder geneigt werden, um in verschiedenen Richtungen Hindernisse oder Abstände zu messen. Dies erweitert die Funktionalität des Joy-Cars und macht es vielseitiger in Anwendungen wie Hindernisvermeidung oder freien Fahren.
Servomotoren werden, ähnlich wie die Scheinwerfer, mithilfe von PWM-Signalen (Pulsweitenmodulation) angesteuert. Diese Signale ermöglichen es, die Position der Servomotoren präzise zu steuern, indem die Breite der Impulse variiert wird. Weitere Informationen zur Funktionsweise und Anwendung von PWM findest du hier.
Servomotor ansteuern

Die beiden optionalen Servomotoren können hiermit angesteuert und in einem Winkel zwischen 0 und 180 Grad eingestellt werden.
Codebeispiel
JoyCar.initJoyCar(RevisionMainboard.OnepThree)
basic.forever(function () {
JoyCar.servo(1, 0)
JoyCar.servo(2, 180)
basic.pause(1000)
JoyCar.servo(1, 90)
JoyCar.servo(2, 90)
basic.pause(1000)
JoyCar.servo(1, 180)
JoyCar.servo(2, 0)
basic.pause(1000)
})
Setup Servomotor
Um die Servomotoren mit einem micro:bit anzusteuern, werden Pin 1 und Pin 13 für die Steuerung konfiguriert. Dabei wird die analoge Periode auf 10 Mikrosekunden(entspricht 100 kHz) eingestellt, was für die meisten Servomotoren geeignet ist.
# Pins für Servomotor einrichten
pin1.set_analog_period(10)
pin13.set_analog_period(10)
Ansteuerung Servomotor
Die Methode servo
dient zur Steuerung der Servomotoren des Joy-Cars. Dabei wird über den Parameter channel
festgelegt, welcher Servomotor angesteuert werden soll, und über den Parameter position
die Zielposition des Servomotors in Grad, im Bereich von 0 bis 180 Grad, definiert.
Zu Beginn der Methode wird überprüft, ob die angegebene Position innerhalb des zulässigen Bereichs liegt. Falls die Position außerhalb des Intervalls von 0 bis 180 liegt, wird ein entsprechender Fehler zurückgegeben. Anschließend wird für den gewählten Kanal ein PWM-Signal (Pulsweitenmodulation) generiert, das die gewünschte Position des Servomotors festlegt. Dieses Signal steuert die Länge der Impulse. Die Methode gewährleistet, dass der Servomotor präzise die angeforderte Position einnimmt.
# Methode zur Positionsänderung bei Servomotoren
def servo(channel, position):
# Methode zur Skalierung von 0-180 (°) auf 100-200 (us)
def scale(num, in_min, in_max, out_min, out_max):
# Rückgabe des auf eine ganze Zahl gerundeten Werts
return (round((num - in_min) * (out_max - out_min) /
(in_max - in_min) + out_min))
# Prüfen, ob die Position im Bereich liegt
if position < 0 and position > 180:
return "position not in range"
# Position an den ausgewählten Kanal senden
if channel == 1:
pin1.write_analog(scale(position, 0, 180, 100, 200))
elif channel == 2:
pin13.write_analog(scale(position, 0, 180, 100, 200))
Codebeispiel
# Notwendige Bibliotheken importieren
from microbit import *
# Definiere deine Joy Car Mainboard Revision
joycar_rev = 1.3
# Pins für Servomotor einrichten
pin1.set_analog_period(10)
pin13.set_analog_period(10)
# Methode zur Positionsänderung bei Servomotoren
def servo(channel, position):
# Methode zur Skalierung von 0-180 (°) auf 100-200 (us)
def scale(num, in_min, in_max, out_min, out_max):
# Rückgabe des auf eine ganze Zahl gerundeten Werts
return (round((num - in_min) * (out_max - out_min) /
(in_max - in_min) + out_min))
# Prüfen, ob die Position im Bereich liegt
if position < 0 and position > 180:
return "position not in range"
# Position an den ausgewählten Kanal senden
if channel == 1:
pin1.write_analog(scale(position, 0, 180, 100, 200))
elif channel == 2:
pin13.write_analog(scale(position, 0, 180, 100, 200))
while True:
# Servomotor auf Kanal 1 auf 0° einstellen
servo(1, 0)
# Servomotor auf Kanal 2 auf 180° einstellen
servo(2, 180)
sleep(1000)
# Stellmotor auf beiden Kanälen auf 90° einstellen
servo(1, 90)
servo(2, 90)
sleep(1000)
# Servomotor auf Kanal 1 auf 180° einstellen
servo(1, 180)
# Servomotor auf Kanal 2 auf 0° einstellen
servo(2, 0)
sleep(1000)