Calliope mini - Spaß durch Programmieren

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.

zurück