Calliope mini - Spaß durch Programmieren

Entwicklungsumgebungen

Calli:bot - Ferngesteuert

Ziel: Ein Calli:bot wird durch die Neigung eines Calliope mini ferngesteuert.

Neigungswinkel

Zuerst muss ermittelt werden, welchen Drehwinkel der Neigungssensor bei welcher Drehung anzeigt.

Der Bildschirm des Calliope mini ist dafür zwar verwendbar, aber auf Grund seiner Trägheit nicht gut geeignet. Besser ist die 4-Digit-Anzeige, die das Ergebnis sofort anzeigt.

Ergebnis: Sowohl der x- als auch der y-Wert sind in der waagerecheten Lage 0. Neigt man den Calliope mini nach

  • vorn: 0° bis -90°
  • hinten: 0° bis 90°
  • links: 0° bis -90°
  • rechts: 0° bis 90°

Hinweis: In früheren Versionen des OpenRobertaLab waren die Werte für links und rechts anders.

Zuerst werden die X-Werte und dann die Y-Werte gezeigt. In der Anzeige leuchtet der Doppelpunkt bei negativen Werten auf.

X-Werte mit Bluetooth übertragen

Im nächsten Schritt sollen die X-Werte an einen zweiten Calliope mini übertragen werden. Dazu wird auf dem Sender in der unendlichen Schleife nach der Anzeige des X-Wertes auf dem Display der X-Werte als Zahl gesendet.
Der Empfänger zeigt auf seinem Display die empfangene Zahl an. Das darf er aber nur, wenn auch wirklich eine Zahl empfangen wurde. Die Funktion "Empfange Nachricht Zahl" liefert eine 0 zurück, wenn nichts empfangen wurde. Das wird in dem Programm für die Entscheidung genutzt.

Calliope mini-Empfang

Überraschung: das Programm funktioniert nicht richtig. Werden positive Zahlen übertragen, kommen falsche Werte an. Damit wäre eine Fernsteuerung nicht möglich.
Es hat sich aber gezeigt, dass alles korrekt übertragen wird, wenn man in der unendlichen Schleife auf Empängerseite den Block irgendwo einfügt.

Die Übertragung funktioniert nur bei negativen Zahlen. Bei positiven Zahlen kommen falsche Werte an.

Zeigt man bei jedem Schleifendurchlauf auf dem Bildschirm ein Zeichen (z.B. eine 0), funktioniert es. Klinkt seltsam; ist aber so. (Stand Januar 2020)

Er fährt! Aber nur vor- und rückwärts :-(

Auf Empängerseite liegen nun je nach Neigung des Senders um die X-Achse Werte zwischen -90 und 90 vor. Die kann man nun fast unbehandelt zur Steuerung der Motoren verwenden. Damit der Calli:bot bei der Neigung nach vorn auch wirklich vorwärts fährt, muss der empangene x-Wert mit -1 multipliziert werden.
z.B. so:

Übertragung der x- und y-Werte

Damit der Calli:bot auch nach rechts und links fahren kann, müssen neben den x-Werten auch die y-Werte übertragen werden.
Dafür gibt es zwei Lösungsansätze:

  1. Jeder Wert wird auf einem extra Kanal gesendet. Sender und Empfänger wechseln ständig den Kanal.
  2. Es wird alles über einen Kanal gesendet. Der x-Wert kommt unverändert; beim y-Wert addiert man vor dem Senden einen hohem Zahlenwert dazu.

Ich habe mich für die zweite Variante entschieden und addiere zum y-Wert vor dem Senden den Wert 500. Damit liegt der y-Wert zwischen 410 und 590.

Der Empfänger empfängt ununterbrochen und entscheidet dann, ob der gerade empfangene Wert x oder y ist. Liegt der Wert über 400, muss es y sein. Dann werden einfach 500 subtrahiert und man hat wieder den ursprünglichen Wert.

Mit A wird die Anzege umgeschaltet. LED rot: x-Werte, LED grün: y-Werte.
Die 2 in der Anzeige dient dem richtigen Übertragen der Werte (siehe oben) und zeigt gleichzeitig den Kanal an, auf dem gesendet wird.

Er fährt richtig :-)

Nachdem nun sowohl die x- als auch die y-Werte vorliegen, kann man die Motorsteuerung realisieren. Ein Vorschlag sieht so aus:

Je nach Neigung des Steuer-Calliope mini wird der x-Wert auf einem Rad verkleinert. Damit fährt der Calli:bot in die Richtung, wo man das Rad bremst.

Folgende Änderungen machen das Fahren noch geschmeidiger:

  • Der y-Wert wird vor der Verarbeitung zur Motorsteuerung durch einen Wert geteilt (z.B. 3). Dadurch reagiert der Calli:bot beim Lenken nicht so hektisch.
  • Der Sender sendet die x- und y-Werte nur dann, wenn auf ihm die Taste A gedrückt wird. Wird sie nicht gedrückt, wird eine Zahl gesendet, die bei den x- und y-Werten nicht vorkommt. Wenn der Empfänger diese Zahl erkennt, stoppt er die Motoren.

Sender

Ein Calliope mini arbeitet als Sender. Er überträgt über Bluetooth ununterbrochen in zwei Wertepaaren die x- und die y-Neigung. Die Begriffe nicken und rollen kommen aus dem Flugwesen.

Damit der Calli:both nicht unkontrolliert fährt, muss entweder Taste A oder Taste B gedrückt werden. Ansonsten wird nur der Text "stop" übertragen.

Die Anzeige der Funkgruppe dient nur zur Kontrolle.

Calliope mini-Empfang

Übertragung testen

Bevor der Calli:both losfährt, wird überprüft, ob die Werte übertagen werden.Das dargestellte Programm zeigt den Test des x-Wertes. Man sollte auch den y-Wert und den Stop-Wert überprüfen. Das erspart dann viel Sucherei, wenn etwas nicht funktioniert.

Man sollte auch aufschreiben, wo die x- und y-Achsen liegen und in welcher Richtung positive oder negative Werte geliefert werden.

Calliope mini-Empfang

Die Motoren ansteuern

Der Programmauschnitt zeigt die Ansteuerung für negative x-Werte im Dauerhaft-Block.

Die Winkelwerte können sofort verwendet werden, da die Leistung der Motoren in Prozent festgelegt werden. Die Neigung geht von 0° bis 90°, so dass das gut zusammenpasst. Die fehlenden 10% bis zur vollen Leistung mekt man nicht.

Da die Motoren nur positive Angaben für die Geschwindigkeit verstehen, müssen die Absolutwerte gebildet werden.

Wenn man den Block für positive x-Werte geschrieben hat, fährt der Callio:bot je nach Neigung nach allen Richtungen.

Calliope mini-Empfang

Stoppen

Wenn beim Sender keine Taste gedrückt ist, schickt er dauerhaft die Textnachricht stop zum Empfänger. Der muss auf den Empfang der Textnachricht reagieren und die Variable stop auf wahr setzen. Wird dagegen das Wertepaar aus x- oder y-Achse mit den entsprechenden Winkeln empfangen, geht die Variable auf falsch zurück.

Calliope mini-Empfang

zurück