Calliope mini - Spaß durch Programmieren

Entwicklungsumgebungen

Fernsteuerung mit einem Joystick

Ziel: Mit einem Joystick, der an einem Calliope mini angeschlossen ist, wird über die Bluetooth-Schnittstelle ein Calli:bot gesteuert.

Im Online-Versandhandel erhält man für wenige Euro kleine Joysticks, die für die Fernstreuerung sehr gut geeignet sind und überraschend robust auch auf nicht so feinfühlige Kinderhände reagieren. Suchbegriff: Joystick Arduino.

Joystick

Joystick abfragen

Der Joystick hat fünf Anschlüsse: zwei für die Stromversorgung, je einen Ausgang für X und Y und einen Ausgang für den Druckschalter. Für die Fernsteuerung benötigt man nur X und Y, der Schalter bleibt frei. Die Ausgänge X und Y sind mit den Schleifkontakten von je einem Potentiometer verbunden. An ihnen kann man entsprechend de Auslenkung eine Spannung von 0 V bis zur angelegten Spannung abgreifen, mit dem Calliope mini also zwischen 0 V und 3,3 V.

Vor dem Einsatz müssen die beiden Anschlüsse P1 und P2 als analoge Eingänge konfiguriert werden.

Danach lässt sich z.B. für den P1-Eingang (X) die eingelesenen Werte anzeigen. Sie liegen ungefähr zwischen 0 und 1024 (10-Bit Analog-Digital-Wandler)

X-Daten übertragen

Beim Übertragen der Daten treten Fehler auf, wenn die Stellenanzahl wechselt, also z.B. bei Zahlen über 1000 zurück zu Zahlen unter 1000. Warum das so ist, kann nicht erklärt werden. Das Problem lässt sich aber leicht umgehen, wenn man vor dem Senden einfach 2000 addiert und nach dem Empfangen 2000 wieder subtrahiert.

Hinweis: Man muss eine Zahl addieren, die größer als 1000 ist. Da später die gesendeten Werte nochmal bearbeitet werden, wird 2000 addiert.

Im Video ist links der Sender und rechts der Empfänger. Es werden bisher nur die X-Werte übertragen.

Damit die Übertragung nicht durch die Anzeige der Zahlen auf dem 5x5-Bildschirm gestört wird, verwendet man hier die 4-Digit-LED-Anzeige.

X- und Y-Daten übertragen

Wie kann man hintereinander sowohl die X- als auch die Y-Daten übertragen, so dass der Empfänger weiß, welcher der X- und welcher der Y-Wert ist? Beim Übertragend es X-Wertes wurde vor dem Übertragen 2000 addiert. Damit liegen die X-Werte immer zwischen 2000 und 3024. Wenn man dem Y-Wert z.B. 4000 addiert, liegen diese Werte immer zwischen 4000 und 5024. Damit kann der Empfänger eindeutig identifizieren, zu welcher Achse der empfangene Wert liegt.

Der Sender sendet ununterbrochen die maskierten Y- und X-Werte. Damit die Übertragung reibungslos funktioniert, muss dazwischen 2 ms gewartet werden.(Keine Erklärung!)

Nun kann man sich auf die Übertragung der Daten verlassen und weiter arbeiten. Aber die Erfahrung zeigt, dass man das unbedingt überprüfen muss. Viel Zeit ist schon verschwendet worden, weil man sich auf etwas verlassen hat, was nicht wirklich funktioniert hat.

Im konkreten Fall scheint es, dass auch Werte übertragen werden, die nichts mit den X- und Y-Werten zutun haben. Deshalb werden im Empfänger die empfangenen Daten gesiebt. Nur, wer den entsprechenden Bereich einhält, wird wirklich registriert.

Senders
Sender
Senders
Der Empfänger registriert nur die Werte, die in den entsprechenden Bereichen liegen.

Funktioniert alles richtig, werden die X- und Y-Werte sauber übertragen. Es werden im Sekundentakt abwechselnd die X- und Y-Werte angezeigt.

Das Programm für die Übertragung, den Empfang und die Darstellung auf dem Display kann heruntergeladen werden: Fernsteuerung_1 im OpenRobertaLab

Korrigierte X- und Y-Daten übertragen

Der Callio:bot soll in der Mittelstellung des Joystick stehenbleiben und sich dann entsprechend der Joystickausrichtung bewegen. Dazu werden die Werte schon im Sender entsprechend aufbereitet.

Beim Einschalten des Calliope mini steht der Joystick in seiner Nullstellung. Die X- und Y-Werte werden vor der unendlichen Schleife abgefragt und dann beim jeweiligen Senden von den aktuellen Werte abgezogen.

Jetzt wird auch klar, warum zum X-Wert 2000 addiert werden.

Zur Kontrolle werden die übertragenen Werte wieder angezeigt. Negative Werte werden auf der Anzeige durch einen Doppelpunkt gekennzeichnet.

Das Programm kann im OpenRobertaLab geöffnet werden: Fernsteuerung_2

Motoren ansteuern

Nachdem man nun sicher ist, dass die Joystickwerte sauber an den Calli:bot übertragen werden, können endlich die Motoren bewegt werden. Wenn der empfangene Wert größer als 1000 ist (sicherer Wert vom Joystick!), werden die Y-und X-Werte gesetzt. Da die Werte maximal etwa 500 annehmen können, werden sie vor der Übertragung an die Motoren durch 5 geteilt.

Über die Berechnung der linken und rechten Motorwerte kann man gerne nachdenken.

Geschmeidiges Fahren

Man wird merken, dass der Calli:bot noch nicht geschmeidig fährt. Das hängt damit zusammen, dass die Prozentwerte keine lineare Geschwindigkeitskurve erzeugen. Zum Angleich hat sich die Wurzelfunktion bewährt.Damit werden die kleinen Prozentwerte aufgewertet und der Callio:bot fährt flüssiger.

Die Variable faktor muss individuell erprobt werden. Als Beispiel kann man mit 4 beginnen.

Joystick abfragen

Der Joystick hat fünf Anschlüsse: zwei für die Stromversorgung, je einen Ausgang für X und Y und einen Ausgang für den Druckschalter. Für die Fernsteuerung benötigt man nur X und Y, der Schalter bleibt frei. Die Ausgänge X und Y sind mit den Schleifkontakten von je einem Potentiometer verbunden. An ihnen kann man entsprechend de Auslenkung eine Spannung von 0 V bis zur angelegten Spannung abgreifen, mit dem Calliope mini also zwischen 0 V und 3,3 V.

Es lassen sich z.B. für den P1-Eingang (X) die eingelesenen Werte anzeigen. Sie liegen ungefähr zwischen 0 und 1024 (10-Bit Analog-Digital-Wandler)

X-Daten übertragen

Das Übertragen der X-Werte von einen Calliope mini auf den anderen Calliope mini erfolgt über die Bluetooth-Schnittstelle. Dazu muss die Erweiterung "radio-broadcast" geladen werden.

Im Video ist links der Sender und rechts der Empfänger. Es werden bisher nur die X-Werte übertragen.

Damit die Übertragung nicht durch die Anzeige der Zahlen auf dem 5x5-Bildschirm gestört wird, verwendet man hier die 4-Digit-LED-Anzeige.

X- und Y-Daten übertragen

Wie kann man hintereinander sowohl die X- als auch die Y-Daten übertragen, so dass der Empfänger weiß, welcher der X- und welcher der Y-Wert ist? Beim Übertragend es X-Wertes wurde vor dem Übertragen 2000 addiert. Damit liegen die X-Werte immer zwischen 2000 und 3024. Wenn man dem Y-Wert z.B. 4000 addiert, liegen diese Werte immer zwischen 4000 und 5024. Damit kann der Empfänger eindeutig identifizieren, zu welcher Achse der empfangene Wert liegt.

Nun kann man sich auf die Übertragung der Daten verlassen und weiter arbeiten. Aber die Erfahrung zeigt, dass man das unbedingt überprüfen muss. Viel Zeit ist schon verschwendet worden, weil man sich auf etwas verlassen hat, was nicht wirklich funktioniert hat.

Senders
Sender
Senders
Der Empfänger registriert nur die Werte, die in den entsprechenden Bereichen liegen.

Zur Kontrolle kann man sich die beiden übertragenen Werte anzeigen lassen.

Senders

Korrigierte X- und Y-Daten übertragen

Der Callio:bot soll in der Mittelstellung des Joystick stehenbleiben und sich dann entsprechend der Joystickausrichtung bewegen. Dazu werden die Werte schon im Sender entsprechend aufbereitet.

Beim Einschalten des Calliope mini steht der Joystick in seiner Nullstellung. Die X- und Y-Werte werden beim Startabgefragt und dann beim jeweiligen Senden von den aktuellen Werte abgezogen.

Jetzt wird auch klar, warum zum X-Wert 2000 addiert werden.

Zur Kontrolle werden die übertragenen Werte wieder angezeigt. Negative Werte werden auf der Anzeige durch einen Doppelpunkt gekennzeichnet.

Das Programm kann in MakeCode geöffnet werden: Fernsteuerung

Motoren ansteuern

Nachdem man nun sicher ist, dass die Joystickwerte sauber an den Calli:bot übertragen werden, können endlich die Motoren bewegt werden. Da die gesendeten Werte maximal etwa 500 annehmen können, werden sie vor der Übertragung an die Motoren durch 5 geteilt. Damit erhält man Werte zwischen 0 und 100.

In der unendlichen Schleife werden aus den x- und y-Werten die Steuerdaten für die beiden Motoren berechnet. Anhand der Vorzeichen werden die Motoren dann vorwärts oder rückwärts bewegt. Die Motoren arbeiten nur, wenn positive Werte verwendet werden!

Geschmeidiges Fahren

Man wird merken, dass der Calli:bot noch nicht geschmeidig fährt. Das hängt damit zusammen, dass die Prozentwerte keine lineare Geschwindigkeitskurve erzeugen. Zum Angleich hat sich die Wurzelfunktion bewährt.Damit werden die kleinen Prozentwerte aufgewertet und der Callio:bot fährt flüssiger.
Die Variable faktor muss individuell erprobt werden. Als Beispiel kann man mit 4 beginnen.

Damit der Calli:bot in der Nullstellung des Joysticks nicht ruckelt, wird noch eine Entscheidung eingebaut, die ihn erst bei Werten größer als 1 fahren lässt. Ansonsten werden beide Motoren gestoppt.

zurück