TigerJython xx
für Gymnasien
Deutsch   English 

5. Roboter fernsteuern via Bluetooth

Zwei micro:bits können über Bluetooth miteinander kommunizieren. In einer typischen Applikation wird ein mbRobot mit einem zweiten micro:bit ferngesteuert. Die dazu notwendigen Funktionen werden aus dem Modul radio importiert. Die nachfolgenden Beispiele funktionieren nur im Realmodus.

In diesem Kommunkationsmodell ist jeder micro:bit (auch Knoten gennannt) gleichzeitig ein Sender und ein Empfänger. Mit radio.on()erstellen zuerst beide Knoten eine drahtlose Bluetooth-Verbindung. Mit radio.send(msg) sendet der eine Knoten eine Message (als String) an den anderen Knoten, der dort im Empfangsspeicher abgelegt wird. Mit dem Befehl radio.receive() holt dieser die älteste Message aus seinem Empfangsspeicher.

In den folgenden Beispielen werden 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 Befehl 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)
stop()
► 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() Holt die älteste Message aus dem Empfangsbuffer (None, falls leer)


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   
► In Zwischenablage kopieren
 
# Mr5d.html (receiver)
import radio
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()     
    delay(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 verwende das oben stehende Programmum mit dem micro:bit den mbRobot möglichst rasch vom Start zum Ziel zu fahren.

 


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. Dazu muss er auch rückwärts fahren können.