Zum Hauptinhalt springen

Einstieg

Inbetriebnahme Maqueen

Nehmen Sie den Maqueen gemĂ€ss folgender Anleitung in Betrieb. FĂŒr jedes Maqueen-Programm mĂŒssen diese Schritte zu Beginn durchgefĂŒhrt werden.

  1. ÜberprĂŒfen Sie, dass der Maqueen nach rechts dreht, dann gerade aus fĂ€hrt und anhĂ€lt.

  2. Markieren Sie die Aufgabe als erledigt.

Motoren motor_run(motor, speed)​

LÀsst den gewÀhlten Motor mit der angegebenen Geschwindigkeit laufen.

Die Geschwindigkeit kann zwischen -255 und 255 liegen. Negative Werte bedeuten, dass der Motor rĂŒckwĂ€rts lĂ€uft.

Welcher Motor angesteuert wird, muss mit einer Zahl (oder der Konstantent aus Motor) angegeben werden:

Links

0 oder Motor.LEFT

Rechts

1 oder Motor.RIGHT

Beide

2 oder Motor.ALL

# den linke Motor mit 100% Geschwindigkeit vorwÀrts drehen lassen
motor_run(0, 255)
# oder Àquivalent
motor_run(Motor.LEFT, 255)

# den rechten Motor rĂŒckwĂ€rts mit 50% drehen lassen
motor_run(Motor.RIGHT, -128)

# beide Motoren vorwÀrts drehen mit 100%
motor_run(Motor.ALL, 255)

sleep(ms)​

Mit der Funktion sleep(ms) kann das Programm fĂŒr eine bestimmte Anzahl Millisekunden angehalten werden.

Diese Funktion funktioniert im Browser leider nicht, auf dem Micro:Bit jedoch schon (oder auch wenn Python lokal installiert ist). WĂ€hrend dem der Micro:bit wartet/schlĂ€ft, kann er keine anderen Befehle ausfĂŒhren - sich drehende Motoren drehen sich aber in dieser Zeit weiter.

from microbit import *
from maqueen import *

while True:
motor_run(Motor.ALL, 255)
sleep(1000) # wartet 1 Sekunde
motor_run(Motor.ALL, -255)
sleep(1000) # wartet 1 Sekunde

Motor stoppen motor_stop()​

Mit motor_stop() können alle Motoren gestoppt werden. Optional kann auch nur ein Motor gestoppt werden.

# stoppt beide Motoren
motor_stop()
# stoppt den linken Motor
motor_stop(0)
# oder Àquivalent
motor_stop(Motor.LEFT)
Geradeausfahern

Die Drehgeschwindigkeit der Motoren wird ĂŒber die Spannung gesteuert und ist leider nicht sehr prĂ€zise. Daher kann es sein, dass der Maqueen nicht geradeaus fĂ€hrt, sondern eine Kurve macht - auch wenn bei beiden Motoren derselbe Zahlenwert eingestellt ist. Dies muss durch Ausprobieren und Anpassen der Geschwindigkeit der Motoren korrigiert werden.

Hinweis Kurvenfahren

Kurvenfahren kann durch unterschiedliche Geschwindigkeiten der linken- und rechten Motoren erreicht werden. Soll der Maqueen an Ort und Stelle drehen, so mĂŒssen die Motoren in entgegengesetzte Richtungen laufen.

Quadrat fahren

Schreiben Sie ein Programm, das den Maqueen ein Quadrat fahren lÀsst.

SSR

⭐ Zusatz​

Ändern Sie das Programm so ab, dass der Maqueen an den Ecken jeweils eine zusĂ€tzliche 360 ° Drehung vollzieht.

LED's​

Der Maqueen hat mehrere LED's, die einzeln angesteuert werden können.

Farb-LED's​

Der Maqueen hat an der Unterseite 4 Farb-LED's.

Anordnung der Farb-LED's
Anordnung der Farb-LED's
# alle Farb-LED's in rot einschalten
led_rgb(Color.RED)

# die LED vorne links auf grĂŒn setzen
led_rgb(Color.GREEN, ColorLED.L1)

# eigene RGB-Farbe vorn rechts setzen
led_rgb(rgb(255, 128, 0), ColorLED.R1)

# Blau fĂŒr alle LED's bei einer Helligkeitsstufe 50 setzen.
led_rgb(Color.BLUE, brightness=50) # Ändert die globale Helligkeit nicht.

HSL-Farben​

Die Farben können auch in HSL (Hue, Saturation, Lightness) angegeben werden. Der Vorteil davon ist, dass die eigentliche Farbe auf einem Farbkreis definiert wird.

HSL-Farbkreis
HSL-Farbkreis
from maqueen import *
led_rgb(hsl( 0, 100, 50)) # => LED's in rot
led_rgb(hsl(180, 100, 50)) # => LED's in cyan
Lightness

Die Lightness (letzter Parameter) gibt an, wie hell die Farbe ist. 0 ist schwarz, 100 ist weiss. Sollen satte Farben angezeigt werden, sollte die Lightness auf ca. 50 gesetzt werden.

Dies ermöglicht es etwa, die Farbe abhÀngig vom Winkel zu setzen.

Modulo Operator %​

Der Modulo-Operator % gibt den genzzahligen Rest einer Division zurĂŒck. Dies ist immer dann nĂŒtzlich, wenn eine Zahl in einem bestimmten Bereich gehalten werden soll.

Beispiele​

# 5 modulo 2 ergibt 1, da 5 / 2 = 2 rest 1 ergibt
print(f'5 modulo 2 = {5 % 2}')
# gibt nacheinander 0, 1, 2, 0, 1, 2, 0, 1, 2, 0 aus
for i in range(10):
print(f'{i} modulo 3 = {i % 3}')
Farb-Disco

Studieren Sie den folgenden Code und passen Sie ihn so an, dass die Farben nach einer Umdrehung wieder auf rot gesetzt werden. Der Roboter soll sich unendlich lang drehen und dabei die Farben wechseln.

from microbit import *
from maqueen import *

motor_run(Motor.LEFT, 20)
motor_run(Motor.RIGHT, -20)

angle = 0
while True:
led_rgb(hsl(angle, 100, 50))
angle = angle + 1
sleep(10) # fĂŒr 10 ms warten

Hilfestellungen​

Hinweis 1

Verwenden Sie den Modulo-Operator % um den Winkel auf 360 zu begrenzen.

Hinweis 2

Stoppen Sie die Zeit, die fĂŒr eine Umdrehung benötigt wird. Berechnen Sie damit, wie lange gewartet (sleep) werden muss, bis die Farbe nĂ€chste Farbe gesetzt wird.

Hinweis 3

Berechnung der Wartezeit:

Wartezeit=Zeit fušr 360° in Sekunden⋅1000360\text{{Wartezeit}} = \frac{\text{Zeit fĂŒr 360° in Sekunden} \cdot 1000}{360}
Ultraschall-Sensor und Mikrofon

Mit dem Ultraschall-Sensor kann die Entfernung zu einem Objekt gemessen werden. Dabei werden Ultraschallwellen ausgesendet und die Zeit gemessen, bis das Echo zurĂŒckkommt.

@

Zum GlĂŒck mĂŒssen Sie sich nicht um die genaue Berechnung kĂŒmmern, sondern können die Funktion ultrasonic() verwenden, was die Entfernung in cm zurĂŒckgibt.

  1. Studieren Sie die rudimentĂ€re Hinderniserkennung im Code-Beispiel auf der Webseite: 👉 Hinderniserkennung

  2. Probieren Sie den Code aus und halten Sie fest, wie der Algorithmus funktioniert. Insbesondere, wie der Drehwinkel des Maqueen eingestellt wird.

  3. Ändern Sie das Programm so ab, dass der Maqueen auch die Richtung wechselt, wenn in die HĂ€nde geklatscht wird (was pauschal einem lauten GerĂ€usch entspricht). Lesen Sie dazu die Dokumentation zum Mikrofon: 👉 Mikrofon

Ultraschall Lead-and-Follow

Schreiben Sie ein Programm, bei welchem der Maqueen immer 10 cm Abstand zu Ihrer Hand hĂ€lt. Ist die Distanz kleiner, fĂ€hrt der Maqueen rĂŒckwĂ€rts, ist die Distanz grösser, fĂ€hrt er vorwĂ€rts. Eine RichtungsĂ€nderung erfolgt dabei nie.