Thymioremotecontrol

Ein Thymio mit einem anderen Thymio steuern

Da jeder drahtlose Thymio mit einem Funkmodul ausgestattet ist, können zwei Thymios direkt miteinander kommunizieren. Ein Thymio kann wie eine Fernbedienung für den anderen verwendedet werden. Man kann zum Beispiel, einen einen ferngesteuerten Rennwagen bauen.

thymioremotecontrol_presentation.jpg

Material

- 2x Wireless Thymios
- 1x Dongle

Vorbereitung: Die Thymios müssen im gleichen Funknetzwerk sein

Zuerst muss gewährleistet werden, dass die beiden Thymios sich im gleichen Netzwerk befinden. Normalerweise müssen Sie dazu nichts tun, den "ab Werk" sind immer alle Thymios im gleichen Netzwerk.

Wenn dies nicht der Fall ist, weil die Konfiguration früher schon verändert wurde, dann benutzen Sie einfach wieder den Konfigurator für Thymio Wireless-Netzwerke um die Roboter wieder in gleiche Netzwerk zu bringen.

Die beiden Thymios können nun mit einem Dongle und im selben Fenster Aseba Studio programmiert werden.

thymioremotecontrol_setup.jpg

Das Programm des Senders

Um eine Meldung auf dem ganzen Netzwerk zu versenden wird folgender Befehl benutzt:

emit [name_der_meldung] [variable]

Zum Beispiel:

onevent buttons
when button.forward == 1 do
   emit button_emit 2
end

sendet eine Meldung mit dem Namen "button_emit" und dem dem Inhalt (=Argument) 2, wenn die Vorwärtstaste berührt wird.

Sie müssen jedoch den Netzwerk der Thymios sagen, dass eine solche Nachricht vorhanden ist und einen Wert trägt. Dazu müssen wir ein globales Ereignis (im rechten Fenster), mit dem Ereignisnamen "bouton_emit" und der Anzahl der "1" Argumente erstellen.

Im weiteren ist es auch möglich mehrere Werte in einer einzigen Meldung gleichzeitig zu versenden. Zum Beispiel:

onevent acc
emit acc_control acc

sendet die drei Werte des Beschleunigungssensors in einer Meldung namens "acc_control". Es muss also ein globales Ereignis mit dem Namen "acc_control" mit der Anzahl der Argumente "3" definiert werden.

Es ist aber auch möglich eine Meldung ohne Argument zu versenden

emit prox

indem ein globales Ereignis mit 0 Argumenten definiert wird.

Der Code des Empfängers

Jetzt wollen wir die Nachricht abrufen, die von einem Thymio gesendet wurde. Verwenden Sie einfach den Befehl:

onevent [name_der_meldung]

und darunter schreiben Sie den Code mit welchem auf dieses Ereignis reagiert wird. In diesem Teil des Programms kann die Variable

event.args

verwendet werden. Dies Variable enthält die Werte, welchen beim Versenden in das Ereignis gepackt wurden. Da es sich um eine Array-Variable handelt, müssen die einzelnen Werte mit event.args[0] für den ersten Wert, event.args[1] für den zweiten Wert etc verwendet werden.

Ein Beispiel:

onevent button_emit
if event.args[0] == 0 then
   call leds.top(32,0,0)
elseif event.args[0] == 1 then
   call leds.top(0,0,32)
end

Dieser Code lässt die oberen LED, entsprechend des gesendeten Wertes in "button_emit", aufleuchten.

Beispiel: Ein ferngesteuerter Thymio

Wir wollen nun einen ferngesteuerten Thymio bauen. Das Ziel ist einfach: Ein Thymio soll mit einem Anderen ferngesteuert werden. Im speziellen wollen wir den gesteuerten Thymio

  • starten und wieder stoppen.
  • mit verschiedenen Geschwindigkeiten vorwärts und rückwärts fahren lassen
  • nach links und rechts steuern, indem der Steuer-Thymio wie bei einem Steuerrad gedreht wird.

Der Steuer-Thymio

# Remote controller

onevent acc
emit acc_control acc
if acc[0] > 0 then
    call leds.top(acc[0]*2,0,0)
else
    call leds.top(0,abs(acc[0]*2),0)
end

onevent buttons
when button.forward == 1 do
    emit button_emit 1
end

when button.center == 1 do
    emit button_emit 0
end

when button.backward == 1 do
    emit button_emit -1
end

Der ferngesteuerte Thymio

# Remote controlled car

var state = STOP
var acceleration = 0
var speed = 0

onevent acc_control
if state == START then
    motor.left.target = speed - COEFF*event.args[0]
    motor.right.target = speed + COEFF*event.args[0]
    if speed > 0 and timer.period[0] == 0 then
        call leds.bottom.left(0,speed/15,0)
        call leds.bottom.right(0,speed/15,0)
        call leds.top(0,speed/15,0)    
    elseif speed < 0 and timer.period[0] == 0 then
        call leds.bottom.left(abs(speed/15),0,0)
        call leds.bottom.right(abs(speed/15),0,0)
        call leds.top(abs(speed/15),0,0)
    end
end

onevent button_emit
if event.args[0] == 0 then
    if state == STOP then
        state = START
        speed = 0
        motor.left.target = 0
        motor.right.target = 0
    elseif state == START then
        state = STOP
        speed = 0
        motor.left.target = 0
        motor.right.target = 0
    end

elseif event.args[0] == -1 then
    speed = speed - 100
    if speed < -MAX_SPEED then
        speed = -MAX_SPEED
    end

elseif event.args[0] == 1 then
    speed = speed + 100
    if speed > MAX_SPEED then
        speed = MAX_SPEED
    end
end

onevent timer0
if state == STOP then
    call leds.buttons(32,32,32,32)
elseif state == START then
    call leds.buttons(0,0,0,0)    
end
if speed == 0 then
    call leds.bottom.left(0,0,0)
    call leds.bottom.right(0,0,0)
    call leds.top(0,0,0)
elseif speed >= 0 then
    call leds.bottom.left(0,speed/10,0)
    call leds.bottom.right(0,speed/10,0)
    call leds.top(0,speed/10,0)
elseif speed < 0 then
    call leds.bottom.left(-speed/10,0,0)
    call leds.bottom.right(-speed/10,0,0)
    call leds.top(-speed/10,0,0)
end

Das Resultat

Beachten Sie, dass der Computer und der Dongle, wenn die Thymios einmal programmiert sind, nicht mehr benötigt werden.

Zusammenfassung

  1. Die Thymios müssen im gleichen Netzwerk sein.
  2. Ein globales Erreignis, mit Namen und Anzahl Argumente definieren.
  3. Das Erreignis mit emit [name_der_meldung] [variable] versenden.
  4. Auf das Ereignis mit onevent [name_der_meldung] reagieren.
  5. Die Werte event.args[] benutzen um Aktionen durchzuführen.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License