Jython

5. Roboter fernsteuern

Zwei micro:bits können miteinander über Bluetooth miteinander kommunizieren. Einr mbRobot kann daher mit einem zweiten micro:bit ferngesteuert werden. Die dazu notwendigen Funktionen werden mit dem Modul radio importiert. Bei der Kommunikation zwischen zwei micro:bits (auch Knoten genannt) kann jeder der Knoten ein Sender und gleichzeitig ein Empfänger sein. Zuerst schalten beide Knoten mit radio.on() sozusagen das Sende-/Empfangsgerät ein. Dabei wird eine drahtlose Bluetooth-Verbindung erstellt. Der Sender sendet mit dem Befehl radio.send(msg) eine Message (als String) an den anderen Knoten und dieser kann mit dem Befehl radio.receive() die Message in seinem Empfangsspeicher holen.

In den folgenden Beispielen wird der nicht im mbRobot eingebaute micro:bit als Sender und der mbRobot als Empfänger verwendet.

Beispiel 1: Die roten LEDs des Roboters ferngesteuert ein- und ausgeschalten
Die beiden Geräte erstellen mit dem Befehle radio.on() die Bluetooth-Verbindung. Die Fernsteuerung erfolgt durch das Klicken des linken bzw. des rechten Buttons auf dem Sendergerät. Beim Klicken des linken Buttons wird der Befehl radio.send("on") ausgeführt und die Message "on" gesendet , beim Klicken des rechten Buttons die Message "off". Der Roboter empfängt mit dem Befehl radio.receive() den gesendeten String und schaltet beide LEDs ein bzw. aus.


Sender (micro:bit):   Empfänger (mbRobot)
#Mr5a.py
from microbit import *
import radio

radio.on()
while True:
    if button_a.was_pressed():
        radio.send("on")
    elif button_b.was_pressed():
        radio.send("off")
► In Zwischenablage kopieren
 
# Mr5b.py (receiver)
import radio
from microbit import *
from mbrobot import *

radio.on()
while not button_a.was_pressed():    
    rec = radio.receive()
    if rec != None:
        if rec == "on":
            ledLeft.write_digital(1)
            ledRight.write_digital(1)
        elif rec == "off":
            ledLeft.write_digital(0)
            ledRight.write_digital(0)
exit()
► In Zwischenablage kopieren

Erklärungen zum Programmcode:

import radio: Importiert das Modul radio, welches die Befehle für die Bluetooth-Kommunikation enthält
radio.on(): Schaltet den Verbindungskanal ein
radio.send("on") Sendet den String "on"
rec = radio.receive() Empfängt die Message und speichert sie in der Variablen rec


Beispiel 2: Roboter fernsteuern
Mit einem zweiten micro:bit wird der Roboter wie folgt ferngesteuert:

Kein Button gedrückt → angehalten (state = "STOP")
Linker Button gedrückt → links fahren (state = "LEFT")
Rechter Button gedrückt → rechts fahren (state = "RIGHT")
beide Buttons gedrückt → geradeaus fahren (state = "FORWARD")

Es ist vorteilhaft, bei solchen Aufgaben eine Variable state einzuführen, wo der momentane Zustand gespeichert wird. Insbesondere wird eine Message nur dann gesendet, wenn der Zustand geändert hat.


Sender (micro:bit):   Empfänger (Roboter)
#Mr5c.py
from microbit import *
import radio

radio.on()
state = "STOP"
oldState = ""
while True:
    if button_a.is_pressed() and button_b.is_pressed():
        state = "FORWARD" 
        display.show('F')
    elif button_a.is_pressed():
        state = "LEFT"
        display.show('L')
    elif button_b.is_pressed():
        state = "RIGHT"
        display.show('R')
    else:
        state = "STOP"
        display.show('S')
    if oldState != state:
        radio.send(state)
        oldState = state   
    sleep(10)
► In Zwischenablage kopieren
 
# Mr5d.html (receiver)
import radio
from microbit import *
from mbrobot import *

radio.on()
setSpeed(15)
while True:
    rec = radio.receive()    
    if rec == "FORWARD":
        forward()  
    elif rec == "LEFT":
        leftArc(0.1)
    elif rec == "RIGHT":
        rightArc(0.1) 
    elif rec == "STOP":
        stop()     
    sleep(100)
► In Zwischenablage kopieren

 

Erklärungen zum Programmcode:

display.show("F") Auf dem LED-Display des micro:bits wird der Buchstabe F angezeigt
radio.send(state) Je nach dem, welche Buttons gedrückt wurden, wird FORWARD, LEFT, RIGHT oder STOP gesendet
if oldState != state: Eine Message wird nur dann gesendet, wenn der Zustand geändert hat

 


Aufgaben:


1)


Erstelle mit einigen Gegenständen einen Parcours und schreibe ein Programm so, dass der Roboter ferngesteuert mit einem zweiten micro:bit vom Start zum Ziel fährt.

 


2)

Markiere 4 Orte gemäss Vorlage und schreibe ein Programm so, dass der Roboter ferngesteuert jeweils zu jedem Ort hinfährt und dann wieder zum Ausgangsort zurückfährt.