Jython
Deutsch   English 

2. Aktoren


Aktoren sind die aktiven Komponenten eines Roboters. Sie führen Befehle, die sie vom Mikroprozessor erhalten, aus. Typische Aktoren sind die Motoren, aber auch LEDs und der Buzzer können auf Befehle reagieren. Im Folgenden wird an einfachen Beispielen gezeigt, wie man die Aktoren mit einem Pythonprogramm steuern kann.
Alle Beispiele können auch im Simulationsmodus ausgeführt werden.

 

Motoren


Beispiel 1: Roboter bewegen
Der Roboter fährt eine kurze Strecke vorwärts, biegt links ab und fährt wieder vorwärts. Der mbRobot verfügt über ein Fahrwerk mit zwei Motoren. Mit dem Befehl forward() werden beide Motoren vorwärts geschaltet und bleiben in diesem Zustand so lange, bis sie vom Microprozessor einen weiteren Befehl erhalten. delay(2000) ist eine Anweisung für den Mikroprozessor. Er muss 2000 Millisekunden warten, bevor die Programmausführung mit dem nächsten Befehl fortgesetzt wird. Die Motoren bleiben während dieser Zeit in der Vorwärtsbewegung. Der Befehl left() bewirkt eine Drehung nach links. Der Drehwinkel ist von der Anzahl Millisekunden im nachfolgenden delay() Befehl abhängig. Mit 550 ms dreht der Roboter ca 90° nach links. Mit dem Befehl right() dreht der Roboter nach rechts.

# Mq2a.py
from mbrobot import *
            
forward()
delay(2000)
left()
delay(550)
forward()
delay(2000)
stop()    
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

from mbrobot import * importiert das Modul mbrobot
delay(2000):hält die Programmausführung 2 Sekunden an
stop():stoppt die Motoren

Mit einem Klick auf die grüne Start-Schaltfläche wird das gleiche Programm im Simulationsmodus ausgeführt.

Beispiel 2: Bewegung wiederholen

# Mr2b.py
from mbrobot import *
            
repeat 4: 
    forward()
    delay(2000)
    left()
    delay(550)
stop() 
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

repeat 4: Wiederholschleife. Die Befehle im eingerückten Block werden 4mal wiederholt
Anstelle der repeat-Schleife kann auch while- oder for-Schleife verwendet werden

Beispiel 3: Auf einem Kreisbogen fahren
Der Roboter bewegt sich auf einem Linksbogen mit dem Radius ungefähr 0.1 m und dann bewegt er sich auf einem Rechtsbogen. Mit setSpeed() kann die Geschwindigkeit angepasst werden (standard 60).

# Mr2c.py
from mbrobot import * 

setSpeed(40)  
leftArc(0.1)
delay(3000)
rightArc(0.1)
delay(3000)
stop() 
► In Zwischenablage kopieren
 
  Für die Steuerung von Motoren stehen folgende Befehle zur Verfügung:
 
 

forward()
backward()
left()
right()
leftArc(radius)
rightArc(radius)
setSpeed(speed)
stop()

bewegt den Roboter vorwärts
bewegt den Roboter rückwärts
dreht nach links
dreht nach rechts
bewegt sich auf einem Linksbogen
bewegt sich auf einem Rechtsbogen
ändert die Geschwindigkeit (default 30)
hält beide Motoren an

 

Motoren einzeln steuern

Die Befehle forward() , left() usw. steuern das ganze Fahrwerk, das aus zwei Motoren besteht. Man kann aber auch die einzelnen Motoren einschalten und ihre Geschwindigket regeln. Mit motL.rotate(speed) wird der linke Motor in die Vorwärtsbewegung versetzt und rotiert mit der Geschwindigkeit speed. Für die positiven speed-Werte rotiert der Motor vorwärts, bei negativer Werten rückwärts und für speed = 0 hält der Motor an. Entsprechend funktioniert der Befehl motR.rotate(speed) für den rechten Motor. Um die einzelnen Motoren zu steuern muss man das Modul mbrobotmot importieren.

Beispiel 4: Der linke Motor läuft zuerst 3 Sekunden mit der Geschwindigkeit 50 vorwärts, dann 2 Sekunden mit der Geschindigkeit 30 rückwärts. Anschliessend hält er an. Führe das Programm zuerst im Simulationsmodus aus und beobachte die Rotationen im Grafikfenster.

# Mr2d.py
from mbrobotmot import *

motL.rotate(50)
delay(3000)
motL.rotate(-30)
delay(2000)
motL.rotate(0)
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

motL.rotate(50): der linke Motor rotiert mit der Geschwindigkeit 50 vorwärts
motL.rotate(-30): der linke Motor rotiert mit der Geschwindigkeit 30 rückwärts
motL.rotate(0): der linke Motor wird angehalten

 

LEDs

Des mbRobots hat zwei rote LEDs, die mit LED_L und LED_R beschriftet sind. Die LEDs können gleichzeitig oder einzeln ein- und ausgeschaltet werden.

Beispiel 5: Beide LEDs 10 mal ein- und ausschalten.
Der Befehl setLED(1) schaltet beide LEDs gleichzeitig ein. Der Befehl setLED(0) schaltet sie aus.

# Mr2e.py
from mbrobot import *

repeat 10:
    setLED(1)
    delay(500)
    setLED(0)
    delay(500)
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

serLED(1): schaltet beide LEDs ein
delay(500): die LEDs bleiben 500 Millisekunden im gesetzten Zustand

Ein Beipiel zum Schalten der einzelnen LEDs findet man in der Aufgabe 6.

Buzzer

Beispiel 6: Mit einem Buzzer Töne abspielen
Der Buzzer findet man auf dem Board hinter dem Steckplatz für den micro:bit. Importiert man das Modul music, so kann man Töne und auch ganze Melodien abspielen.

# Mr2f.py
from music import *
 
repeat 10:             
    pitch(784, 400)
    pitch(524, 400)
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

pitch(784, 300): Spielt den Ton mit der Frequenz 784 Hz während 300 Millisekunden ab


Beispiel 7: Mit dem Buzzer ein Musikstück abspielen

# Mr2g.py
from music import *

song = ENTERTAINER
play(song)
► In Zwischenablage kopieren
 

 

Erklärungen zum Programmcode:

play(song): spielt den Song Entertainer. Einige weitere Musikdateien sind im TigerJython gespeichert. Diese können direkt verwendet werden (siehe Dokumentation oder TigerJython IDE/ unter Hilfe/APLU Dokumentation)

 

 


Aufgaben:


1)


Erstelle mit einigen Gegenständen einen Parcours und schreibe ein dazugehörendes Programm so, dass der Roboter vom Start zum Ziel fährt.

 


2)

Der Roboter soll sich so lange auf einen Linksbogen bewegen, bis er einen ganzen Kreis zurückgelegt hat. Danach soll er sich gleich lange auf einem Rechtsbogen bewegen.
 


3)

Ein Roboter soll nacheinander 4 Orte erreichen, indem er zuerst vorwärts bis zum Ort fährt, dann rückwärts zum Ausgangspunkt zurückkehrt und um ca 90 Grad dreht.
 

4)
Ergänze die Bewegung in der Aufgabe 3 mit LEDs. Jedesmal, bevor der Roboter rückwärts fährt, schaltet er die LEDs ein .  

5)

Ergänze die neben stehende Programmvorlage so dass
         a) der Roboter 2 Sekunden vorwärts fährt
         b) der Roboter 2 Sekunden rückwärs fährt
         c) der Roboter am Ort nach links bzw. nach rechts dreht
         d) der Roboter auf einem Kreisbogen fährt

 
from mbrobotmot import *
motL.rotate(50)
delay(2000)
motL.rotate(0)

6)

Mit den Befehlen ledLeft.write_digital(1) bzw. ledLeft.write_digital(1) kann man nur die linke LED ein- bzw. ausschalten. Mit den Befehlen ledRight.write_digital(1) bzw. ledRight.write_digital(0) nur die rechte LED.

Ergänze die neben stehende Programmvorlage so dass die LEDs 10 mal abwechlungsweisweise blinken (links ON/rechts OFF bzw. links OFF/rechts ON).

 
from mbrobot import *

ledLeft.write_digital(1)
delay(1000)
ledLeft.write_digital(0)
ledRight.write_digital(1)
delay(1000)
ledRight.write_digital(0)

7)

Ergänze die neben stehende Programmvorlage so, dass der Roboter beim Linksbogenfahren jeweils die linke LED und beim Rechtsbogen nur die rechte LED einschaltet.


        

 
from mbrobot import *
           
repeat 2:
    leftArc(0.15) 
    sleep(3000)
    rightArc(0.15)
    sleep(3000)
stop()