9 Drahtlose Kommunikation

Über drahtlose Kommunikation ist es möglich, dass Calliope-Boards untereinander Nachrichten austauschen, ohne dass sie dafür mit einem Kabel am Computer verbunden sein müssen.

Die Einführung zu diesem Kapitel hat Julia Kleeberger geschrieben. »Morsen mit mehreren Calliope minis« ist von Patrick Franken, »Alarmanlage vernetzt« von Jan Thar. »Hau den Lukas« wurde von Mario Lukas geschrieben und »Das Roboterballett« von Julia Kleeberger. »Eckstein, Eckstein ... alles muss versteckt sein« ist von Mario Lukas und »Theremin« stammt von Jan Thar.

Bisher hast du deinen Calliope mini immer mit dem Computer verbunden, damit er Anweisungen in Form von Programmen bekommt, die du geschrieben und heruntergeladen hast. Über drahtlose Kommunikation ist es auch möglich, dass Calliope-Boards untereinander Nachrichten austauschen, ohne dass sie dafür mit einem Kabel am Computer verbunden sein müssen: eben drahtlos.

Wie bei jeder Kommunikation brauchst du auch bei der drahtlosen Kommunikation einen Sender, der ein Signal drahtlos an den Empfänger übermittelt. Für die Übermittlung des Signals werden Funkwellen verwendet. Dein Calliope mini kann über zwei verschiedene Wege drahtlos kommunizieren: über Funk (im Engl. »Radio«) und über Bluetooth. In diesem Kapitel wird dir die Arbeitsweise mit Funk erklärt.

9.1 Die Funktionsweise von Funk

Beim Funken sendet der Sender-Calliope das Signal über eine Antenne als Funkwelle in einem bestimmten Frequenzbereich aus. Alle Empfänger-Calliopes in der Umgebung können das Funksignal empfangen. Das ist ähnlich wie beim Radio.

Wie funktioniert Radio?

Eine Radioanstalt sendet sein Programm aus und alle Radiogeräte, die die Frequenz des Radiosenders eingestellt haben, können es empfangen. Man nennt diese Form der Kommunikation auch »one to many«, also ein Sender kann an viele Empfänger gleichzeitig ein Signal versenden. Die ankommende Funkwelle wird bei den Empfängern ebenfalls über eine Antenne aufgenommen, verstärkt und in das ursprüngliche Ausgangssignal zurückgewandelt. Bestimmt ist dir schon mal aufgefallen, dass du dein Lieblingsradiosender im Urlaub evtl. nicht empfangen konntest. Das liegt daran, dass Funkwellen nur eine bestimmte Reichweite haben und nur innerhalb dieser empfangen werden können. Dabei wird das Signal umso besser empfangen, je näher sich der Empfänger an der Sendequelle befindet. Auch Hindernisse wie z. B. Bäume, Wände oder Berge führen dazu, dass die Intensität der Funkwellen abnimmt.

Um diese Funktionsweise mit deinem Calliope mini auszuprobieren, kannst du im PXT-Editor in der Befehlsgruppe »Funk« den Programmierblock »Sende Nummer« auswählen. Mit diesem Befehlsblock wird eine Nummer an alle Empfänger-Calliope-Boards gesendet.

Abb. 9–1 Dieser Befehlsblock überträgt über Funk eine Nummer. Dabei werden alle Calliope minis angesprochen, auf die dieses Programm heruntergeladen wurde.

Kommt ein Datenpaket beim Empfänger an, so kann eine Funktion ausgelöst werden. Hierfür wird folgender Programmierbefehl verwendet:

Abb. 9–2 Dieser Befehlsblock registriert Funktionen, die ausgeführt werden, wenn ein Datenpaket über Funk empfangen wird.

Um diese Funktionsweise zu testen, ist es wichtig, den Programmcode auf alle Boards zu überspielen: sowohl auf den Sender-Calliope als auch auf alle Empfänger-Calliope-Boards.

Wenn du mehrere Sender-Calliope minis einrichten möchtest, die unterschiedliche Inhalte senden, ist es notwendig, Gruppen anzulegen. Damit stellst du sicher, dass bei Boards in derselben Gruppe keine Probleme beim Senden und Empfangen auftreten.

Um Gruppen zu erstellen, wählst du im PXT-Editor die Gruppe der Funk-Befehle aus und klickst dann auf »... Mehr«, damit dir weitere Programmierblöcke angezeigt werden.

Abb. 9–3 Über die Menügruppe »Funk« → »Mehr« gelangst du zu dem Befehlsblock »Setze Gruppe«

Mit der Funktion »Setze Gruppe« kannst du den Calliope mini unterschiedliche Gruppen zuweisen. Somit hören sie nur auf die Signale einer Gruppe. Wenn du also zwei Sender mit unterschiedlichen Gruppennummern hast, kannst du damit festlegen, von welchem Sender dein Empfänger-Calliope das Signal empfangen soll. Jeder Calliope mini kann nur einer Gruppe zugewiesen werden.

Die Namensgebung im PXT-Editor

Funkwellen werden im Englischen also »radio waves« bezeichnet. Daher findest du im Editor an manchen Stellen auch die Bezeichnung »radio« anstelle von Funk.

9.2 Morsen mit mehreren Calliope minis

Bisher bestanden alle deine Projekte aus nur einem Calliope mini. In diesem Projekt lernst du, dass sich mehrere Calliope auch miteinander unterhalten können. Vielleicht schreibst du dann demnächst nicht mehr über das Handy, sondern mit zwei Calliope? So einfach ist es dann doch nicht, aber in diesem Kapitel lernst du, wie du zwischen zwei Calliope minis Nachrichten hin und her sendest. Dazu werden die im Calliope-Board verbauten Antennen verwendet. Was du sendest, ist dir überlassen, aber damit du Nachrichten versenden kannst, lernst du in diesem Kapitel das Morsen. Am besten setzt du dieses Projekt mit einem Freund oder einer Freundin um, denn so macht das Morsen am meisten Spaß.

Abb. 9–4 Calliope minis unter sich

Was ist Morsen?

Früher haben sich Schiffe auf hoher See mit Lichtsignalen verständigt. Jedes Schiff hat eine sehr große Lampe, die von einem anderen Schiff erkannt werden kann. Das andere Schiff hat ebenfalls eine solche Lampe, so können sich die Schiffe dann abwechselnd anleuchten. Es gibt also nur »Licht an« oder eben »Licht aus«. Das ist nicht sehr viel, weshalb sich schlaue Seeleute überlegt haben, wie man mit dieser Technik Nachrichten wie z. B. einen Notruf versenden kann. Als Erstes hat man sich auf zwei Signale geeinigt, ein kurzes und ein langes Leuchten. Dann hat man diese zwei Signale einzelnen Buchstaben zugeordnet. So bekommt der Buchstabe A das Signal, einmal kurz und einmal lang zu leuchten.

A .- B -... C -.-. D -..
E . F ..-. G --. H ....
I .. J .--- K -.- L .-..
M -- N -. O --- P .--.
Q --.- R .-. S ... T -
U ..- V ...- W .-- X -..-
Y -.-- Z --..

Tab. 9–1 Das Morse-Alphabet

Jetzt weißt du auch, weshalb ein Schiff in Seenot SOS funkt. Es sind die Buchstaben für dreimal kurz, dreimal lang und noch dreimal kurz. Das ist auch auf dem Meer nicht zu übersehen, jeder Seemann kennt diese Kombination. Das Morse-Alphabet hilft dir also mit nur zwei Signalen, alle Nachrichten, die du magst, versenden zu können. Du musst nur jeden Buchstaben einzeln in diese Signale übersetzen.

Was sollen deine zwei Calliope minis nun können? Sie sollen sich gegenseitig die zwei Signale »kurzes« und »langes« Leuchten senden können. Bei einem Druck auf Knopf »A« soll ein kurzes Leuchten verwendet werden, bei einem Druck auf Knopf »B« ein langes. Du beginnst mit dem Versenden des kurzen Leuchtens. Dazu startest du wie gewohnt ein neues Projekt und löschst die Beispielblöcke.

Für dieses Morseprogramm verwendest du Blöcke aus der Kategorie »Funk«:

Abb. 9–5 Unter »Funk« findest du alles, um Daten wie Nummern und Texte senden und empfangen zu können.

Um zu starten, verwendest du den »sende Zeichenfolge«-Block. Er soll aufgerufen werden, wenn Knopf »A« gedrückt wird. Für den Anfang programmieren wir das Signal »kurz«.

Abb. 9–6 Der Calliope beginnt zu senden

Nun wird bei einem Druck auf Knopf »A« die Nachricht »kurz« an alle anderen Calliope minis innerhalb der Reichweite versandt. Das hilft dir erst einmal nicht viel, solange dein Calliope-Board nicht auch so eine Morse-Nachricht empfangen kann. Also fügst du noch einen weiteren Block hinzu, der diese Aufgabe übernimmt.

Abb. 9–7 So kannst du auf empfangene Signale reagieren

Der Block »wenn Datenpaket empfangen« wird aufgerufen, sobald dein Calliope mini eine Nachricht von einem anderen Calliope mini erhält. Die empfangenen Daten werden dann im Platzhalter »receivedString« gespeichert. Das ist Englisch und bedeutet »empfangener Text«. Du kannst dies auch umbenennen, verwende dazu den kleinen nach unten zeigenden Pfeil.

Die Verzweigung in diesem Block prüft, ob der empfangene Text dem Text »kurz« entspricht. Jetzt fehlt eigentlich nur noch, dass die LED dann auch kurz leuchtet.

Abb. 9–8 Der Text »kurz« wird empfangen

In diesem Beispiel werden 500 ms, also 500 Millisekunden, gewartet, bis die LED wieder ausgeht. Probier etwas rum und finde den Blinkrhythmus, der dir am meisten gefällt.

Du kannst dein Programm nun bereits testen. Lade es dazu auf beide Calliope minis. Nach einem Druck auf Knopf »A« sollte die LED am anderen Calliope mini kurz aufleuchten. Sollte das erfolgreich gewesen sein, kannst du auch testen, wie weit die Calliope-Boards maximal auseinander sein dürfen, um noch ein Signal vom anderen Board zu empfangen. Wie wirken sich Gegenstände aus, die dazwischen stehen?

Weiter geht es mit dem Signal »lange leuchten«. Du musst also nicht nur prüfen, ob »kurz«, sondern auch ob »lang« empfangen wurde. Dazu kannst du eine zweite Verzweigung verwenden. Du prüfst dazu zuerst, ob der empfangene Text »kurz« ist, und dann, ob er vielleicht »lang« ist.

Abb. 9–9 Die vollständige Verzweigung

Nun ist dir vermutlich schon aufgefallen, dass du den Text »lang« noch nirgendwo versendest. Da »kurz« schon auf Knopf »A« liegt, kannst du für »lang« Knopf »B« verwenden. Du kannst also einfach den ganzen »wenn Knopf A gedrückt«-Block kopieren – das kann man auch duplizeren nennen – und dann »A« durch »B« und »kurz« durch »lang« ersetzen. Wenn das jetzt zu schnell ging, schau im Bild unten noch einmal nach.

Abb. 9–10 Fertiger Block für Knopf »B«

Dein Programm ist schon fertig! Das Programm ist so ausgelegt, dass es sowohl senden als auch empfangen kann. Du kannst also auf beide Calliope minis das gleiche Programm spielen und so können beide miteinander morsen. Probier doch einmal aus, das Wort »Hallo« zu versenden. Am besten nimmt die Person am zweiten Calliope mini ein Blatt und einen Stift zur Hilfe, um sich die einzelnen Buchstaben aufzuschreiben. Mithilfe des Morse-Alphabets kannst du das Wort »Hallo« folgendermaßen zusammensetzen:

H . . . .
A . _
L . - . .
L . - . .
O - - -

Tab. 9–2 Das Wort »Hallo« im Morse-Code

Ein Punkt entspricht hier »kurz«, also Knopf »A«, und der Strich steht für »lang«, also Knopf »B«. Dein Gegenüber benötigt vermutlich etwas Zeit, wird aber mithilfe des Morse-Alphabets deine Nachricht entschlüsseln können.

Mit diesem Programm könnt ihr euch Nachrichten schicken, ohne dass andere den Inhalt erkennen können. Versuch doch einfach, deinem Freund oder deiner Freundin eine geheime Nachricht zu schicken.

...- .. . .-..
... .--. .- ... ...!

9.3 Alarmanlage vernetzt

Am Anfang des Buches hast du schon einmal eine einfache Alarmanlage mithilfe des Lichtsensors gebaut. Für eine Alarmanlage für deinen Raum fehlt allerdings noch die Möglichkeit, sie nach Verlassen des Raumes anzuschalten beziehungsweise selber wieder abzuschalten, ohne den Alarm auszulösen. Zu diesem Zweck lernst du in diesem Projekt, eine etwas komplexere Alarmanlage zu bauen, für die du zwei Calliope minis benötigst. Einer wird als Sensor an deiner Türklinke verwendet (mit ein paar Streifen Klebeband befestigt), den zweiten hast du als Fernbedienung dabei.

Abb. 9–11 Ein Calliope mini bewacht deine Tür

9.3.1 Aufbau

Anstelle des Lichtsensors wirst du hier den Lagesensor zum Auslösen des Alarms verwenden: Durch Herunterdrücken der Türklinke wird der Calliope mini im Raum bewegt, seine Lage wird also verändert und – zack! – wird der Alarm ausgelöst. Im Folgenden wird zunächst die eigentliche Alarmanlage programmiert und anschließend die Fernbedienung für den zweiten Calliope mini.

9.3.2 Alarmanlage

Wenn du noch einmal die Alarmanlage aus Abschnitt 4.3 anschaust, kannst du ganz leicht die Lichtstärke durch die Winkelmessung ersetzen:

Abb. 9–12 Alarmanlage mit Winkelmessung

Klappt es? Piepst der Calliope mini, wenn er bewegt wird? Funktioniert das auch an der Türklinke? Vielleicht musst du den Winkel (hier 10°) noch anpassen, damit deine Alarmanlage im richtigen Moment auslöst.

Wenn du jetzt noch eine Funkfernbedienung hinzufügen möchtest, fängst du am besten beim Starten des Calliope mini mit dem Bilden einer Gruppe an:

Abb. 9–13 Gruppe, erste Platzhalter für die Alarmanlage

Zunächst einmal wird »setze Gruppe 1234« festgelegt, damit nur ein Calliope mini, der die gleiche Gruppe, also »1234«, gesetzt hat, sich mit der Alarmanlage verbinden und sie damit starten oder entschärfen kann. Im Grunde funktioniert das also als Passwort-Code der Alarmanlage, da hier festgelegt wird, welche Calliope minis miteinander reden können. Natürlich ist »1234« nicht besonders kompliziert, vielleicht wählst du besser eine nicht ganz so leicht zu erratende Nummer für deine eigene Alarmanlage aus.

Danach folgen zwei neu erstellte Platzhalter: Einer ist dazu da, zu speichern, ob ein Alarm ausgelöst wurde (»AlarmAktiv«), der zweite ist dazu da, festzulegen, ob die Alarmanlage eingeschaltet ist (»AlarmAngeschaltet«). Anfangs ist sie aus, und kein Alarm soll ertönen, daher ist in beiden Platzhaltern eine 0 gespeichert.

Um eindeutig sehen zu können, ob alles in Ordnung ist, wird zusätzlich beim Starten des Calliope mini kurz »Start« »AN« eingeblendet und die RGB-LED leuchtet gelb.

Abb. 9–14 Empfangen der Kommandos der Fernbedienung

Wenn Werte über Funk empfangen werden, sind das die Kommandos der Fernbedienung. Hier wird eine 1 gesendet, um die Alarmanlage einzuschalten, durch Senden einer 2 wird sie ausgeschaltet. Dazu wird beim Empfangen eines Datenpakets verglichen, welcher Wert gesendet wurde (er ist in »empfangeneNummer« gespeichert), und dann wird die Alarmanlage entsprechend ein- oder ausgeschaltet, indem die Werte von »AlarmAngeschaltet« geändert werden. Zusätzlich wird in beiden Fällen der Alarm abgeschaltet, falls gerade einer aktiv ist (ändere »AlarmAktiv« auf 0). Am Ende wird der Zustand der Alarmanlage wieder durch kurzes Einblenden eines Textes »AN« oder »AUS« sowie durch das Ändern der Farbe der RGB-LED angezeigt.

Jetzt musst du nur noch den Alarmauslöser so weiterentwickeln, dass der Alarm nur dann ausgelöst wird, wenn

1.die Alarmanlage angeschaltet ist und

2.der Calliope mini (um einen Winkel von über 10°) gekippt wird.

Abb. 9–15 Der Alarmauslöser

Während der Calliope mini läuft, überprüft er ständig den Zustand des Winkelsensors. Ist der Winkel größer als 10° und der Alarm angeschaltet, so wird der Alarm ausgelöst (in der ersten »wenn-dann«-Entscheidung). In diesem Fall wird der Platzhalter »AlarmAktiv« auf 1 gesetzt, sodass der Alarm auf deinem Calliope mini losgeht und zusätzlich eine Warnmeldung an die Fernbedienung gesendet wird (hier eine 3, aber auch andere Zahlen sind natürlich möglich), damit auch die Fernbedienung weiß, dass eingebrochen wurde.

Nach dieser ersten Entscheidung überprüft der Calliope mini, ob dieser Wert (also »AlarmAktiv«) gleich 1 ist. Ist das der Fall, wird weiterhin wie bei der ersten Alarmanlage eine Note gespielt und dazwischen pausiert, zusätzlich werden aber noch die LED-Anzeige und die RGB-LED einmal an- und wieder ausgeschaltet. Die RGB-LED leuchtet natürlich auch in Rot, wie es sich für einen Alarm gehört. Zum Abschalten der RGB-LED werden beim Setzen der Farbe alle drei Farbwerte zusammen mit Weiß auf 0 gesetzt, sodass die LED wieder dunkel ist.

Jetzt ist es an der Zeit, deine Alarmanlage zu testen. Bevor du sie an der Türklinke anbringst, kannst du (durch Kippen des Calliope mini) schon einmal per Hand den Alarm auslösen. Funktioniert deine Alarmanlage? Hörst und siehst du das Signal, wenn du den Calliope mini kippst?

Wenn alles klappt, kannst du den Calliope mini mit einem Battery-Pack (zum Beispiel mit Klebeband) an der Türklinke befestigen, sodass beim Herunterdrücken der Alarm ausgelöst wird. Wenn es nicht gerade genug auf der Klinke liegt, kann man es mit etwas Material an einer Seite unterfüttern oder aber den Winkel, ab dem der Alarm losgeht (hier die 10°), noch etwas vergrößern.

So, die Alarmanlage funktioniert schon einmal und verschreckt sicher den Eindringling. Damit die Alarmanlage nicht losgeht, wenn du selbst einmal die Türklinke herunterdrückst, kannst du sie nun mit einer Fernbedienung steuern.

9.3.3 Fernbedienung

Die Fernbedienung soll:

Das Letztere ist nützlich, wenn du selbst nicht in Hörweite des Alarms bist und trotzdem mitbekommen möchtest, wenn jemand unerlaubt in dein Zimmer eindringt.

Für die Fernbedienung werden die beiden Knöpfe des Calliope mini als Ein-und Ausschalter für den Alarm verwendet. Wenn man aber eh schon eine Vernetzung mit der Alarmanlage hat, kann man auch gleich Einbrüche mit der Fernbedienung anzeigen lassen.

Hierfür programmierst du für den zweiten Calliope mini ein anderes Programm.

Abb. 9–16 Fernbedienung: Wähle die gleiche Gruppe wie die Alarmanlage.

Beim Starten des Fernbedienungs-Calliopes passiert noch nichts besonders Aufregendes: Einmal wird die Zeichenfolge »Start« angezeigt. Wichtig ist aber vor allem, dass der Calliope mini in derselben Gruppe wie der Calliope mini der Alarmanlage ist. Wie vorher beschrieben, kann auch eine etwas einfallsreichere Nummer anstelle von »1234« gewählt werden.

Abb. 9–17 Fernbedienung: Knopf »A« zum Anschalten ...

Beim Drücken von Knopf »A« muss nun das passende Kommando an den zweiten Calliope mini gesendet werden: Es wird zunächst die passende Zahl zum Einschalten an die Alarmanlage gesendet, wodurch der Calliope mini beim Empfangen der Zahl die Alarmanlage aktiviert. Danach wird mit den folgenden zwei Programmierbefehlen durch eine Anzeige der Zeichenfolge »AN« und Ändern der Farbe der RGB-LED auf »Gelb« signalisiert, dass die Alarmanlage eingeschaltet ist.

Probier es aus! Schaffst du es, die Alarmanlage mit der Fernbedienung anzuschalten? Löst das dann beim Kippen des anderen Calliope mini den Alarm aus? Ja, aber er hört gar nicht mehr auf? Dann wird es Zeit, auch eine Möglichkeit zum Ausschalten der Alarmanlage zu programmieren.

Abb. 9–18 Fernbedienung: ... und Knopf »B« zum Abschalten

Bei einem Druck auf Knopf »B« geschieht im Grunde das Gleiche, nur dass eine andere Zahl zum Ausschalten der Alarmanlage gesendet wird. Danach wird der Text »Aus« angezeigt und LED-Farbe auf »Grün« umgestellt.

Abb. 9–19 Fernbedienung: Alarmanzeige

Für die Anzeige eines Alarms kannst du mehr oder weniger den Alarmteil der Alarmanlage kopieren, nur dass das Abspielen der Töne und das Blinken von LED-Matrix und RGB-LED dann durchgeführt wird, wenn der Calliope mini etwas von der Alarmanlage empfängt (hier die Zahl 3). In diesem Beispiel wird zwar auch noch überprüft, ob der empfangene Wert wirklich 3 ist, die die Alarmanlage senden sollte. Da das aber der einzige Wert ist, den sie sendet, könnte man das genauso gut auch weglassen.

9.3.4 Erweiterungen

Bei der Fernbedienung wird der Ton nur einmal beim Auslösen des Alarms abgespielt, danach herrscht wieder Ruhe. Wenn der Ton dauerhaft ertönen soll, musst du ihn in die »dauerhaft«-Schleife einbauen. Schaffst du das?

Das Festlegen der Gruppe entspricht der Sicherheit deiner Alarmanlage – je mehr Ziffern, desto besser: Wenn du nur die Gruppe 0 für deine beiden Calliope-Boards wählst, könnte jemand rein zufällig – oder auch absichtlich – eine Fernbedienung mit der gleichen Gruppe bauen und damit deine Fernbedienung entschärfen, ohne dass du es willst. Die »1234« ist auch nicht so toll, aber bei so etwas wie »35437« kann es schon etwas länger dauern, bis ein Einbrecher herausfindet, mit welcher Gruppe er seinen Calliope programmieren muss, um deine Alarmanlage zu entschärfen.

Was zu einem weiteren möglichen Projekt führt: Lass einen Freund einen Calliope mini mit einer bestimmten (kleinen Zahl) als Gruppe als Alarmanlage programmieren – schaffst du es sie zu knacken, das heißt die richtige Gruppe herauszufinden?

Tipp für das erfolgreiche Knacken

Für die Nummer der Gruppe kannst du einen Platzhalter anlegen. In dieses kannst du zuerst die Zahl »0« speichern und ausprobieren, ob du (mit der Gruppennummer 0) die Alarmanlage deines Freundes ausschalten kannst. Falls es nicht geklappt hat, zählst du den Platzhalter um 1 hoch und probierst es erneut. Wenn du das ganze einprogrammierst, testet dein Calliope mini automatisch alle Gruppennummern durch. Kannst du so die Alarmanlage knacken, also eine Alarmanlage mit dem Calliope ausschalten, deren Gruppe du gar nicht kennst?

Viel Spaß beim Bau deiner Alarmanlage und der Fernbedienung dafür!

9.4 Hau den Lukas

Ein altes Jahrmarktspiel ist »Hau den Lukas«, wo man versucht, mit möglichst viel Kraft mit einem Hammer auf einen Sensor zu schlagen, wobei die Schlagstärke gemessen und durch eine Reihe von Leuchten an einer Stange angezeigt wird. Da man die Calliope minis gut vernetzen kann, kannst du dich auch direkt mit deinen Freunden messen und schauen, wer das Spiel gewinnt.

Allerdings gibt es leider keinen verwendbaren Kraftsensor auf dem Calliope mini – oder auch zum Glück, denn wenn man das Spiel wie auf der Kirmes mit einem Hammer spielen würde, würde das deinem Calliope mini auf Dauer nicht gut tun. Was es gibt, ist ein Beschleunigungssensor; damit kann man etwas Ähnliches erreichen.

Abb. 9–20 Hau den Lukas

9.4.1 Grundprinzip

Für das »Hau den Lukas«-Spiel auf dem Calliope mini wirst du den Beschleunigungssensor nutzen. Der Spielablauf soll so aussehen:

Schau dir den Spielablauf etwas genauer an: Zum einen muss also jeder Spieler wissen, wie lange das Spiel dauert. Außerdem muss irgendwo festgelegt werden, ob ein Spiel gerade gestartet wurde. Die Kommunikation selber funktioniert so: Wird der Knopf gedrückt, muss eine Nachricht an alle Spieler gesendet werden, und nach Ablauf des Spiels noch einmal. Danach kann ausgewertet werden, wer gewonnen hat. Jeder Spieler kann dabei das Spiel kontrollieren, also starten.

Abb. 9–21 Der Calliope startet das Spiel »Hau den Lukas«

Beim Starten des Calliope mini wird der Titel des Spiels genannt (damit du weißt, dass das richtige Programm auf dem Calliope mini läuft), danach wird der Bewegungsmesser auf einen möglichst großen Wert gestellt (»8g« bedeutet achtfache Erdbeschleunigung). Wenn er zum Beispiel auf 1g stehen würde, würde er maximal die Erdanziehung messen können. Das heißt, die effektivste Methode, das Spiel zu gewinnen, wäre, den Calliope mini einfach richtig herum hinzulegen – und das wäre etwas langweilig.

Danach werden zwei neue Platzhalter eingeführt und Werte darin gespeichert: Zum einen der Platzhalter »startSpiel«, um intern speichern zu können, ob das Spiel begonnen hat (dazu wird dann der Platzhalter auf »1« geändert). Zum anderen der Platzhalter »SpielDauer«, das bedeutet die Zeitdauer, wie lange man den Calliope mini während eines Spiels bewegen sollte. Dies sind hier 1000 ms, also eine Sekunde (das m steht für milli, 1000 Millisekunden sind eine Sekunde). Dieser Wert wird im Programm selber nicht verändert. Trotzdem ist es sinnvoll, einen Platzhalter zu verwenden. So kannst du jederzeit an einer Stelle diese Zeit abändern, falls die eine Sekunde zu kurz oder lang ist.

Abb. 9–22 Starten des Spiels

Das Spiel soll beginnen, sobald ein Spieler Knopf »A« drückt. Hierzu wählst du die »wenn Knopf A gedrückt«-Funktion aus. Dabei soll das Spiel nur dann gestartet werden, wenn es nicht eh schon läuft. Dafür ist im Inneren der Funktion noch ein »wenn-dann«-Befehl eingebaut, der prüft, ob das Spiel noch nicht gestartet wurde (also »startSpiel« = 0 ist), ansonsten passiert durch einen Knopfdruck gar nichts. Ist das Spiel noch nicht gestartet, werden die weiteren Befehle ausgeführt:

Abb. 9–23 Empfangen von Werten

Laufzeit

Die Laufzeit ist die interne Uhr des Calliope mini. Sobald der Calliope gestartet wird, fängt die Uhr an zu zählen. Jede Tausendstel Sekunde (kurz ms) wird der in »Laufzeit« gespeicherte Wert um 1 hochgezählt. Damit weiß man genau, wie viel Zeit seit Start des Calliope mini vergangen ist. Eine Umrechnung in eine normale Uhrzeit wäre also nur möglich, wenn man die genaue Uhrzeit kennt, zu der der Calliope mini gestartet wurde.

Beim Empfangen der Datenpakete müssen zwei Fälle unterschieden werden: Zum einen gibt es eine empfangene 0. Sie zeigt an, dass jemand anderes ein Spiel gestartet hat. In diesem Fall werden dieselben Sachen ausgeführt wie beim Knopfdruck, um das Spiel zu starten. Zum anderen soll nach dem Beenden eines Spiels die »momentaneStaerke« von allen Calliope minis an alle anderen gesendet werden – damit reicht hier eine einfache Fallunterscheidung mittels des Befehls »wenn ... dann ... ansonsten« aus.

Wenn du also Werte größer als 0 empfängst, wird der »ansonsten«-Teil ausgeführt und der empfangene Wert wird einfach mit dem eigenen gespeicherten Stärkewert (im Platzhalter »momentaneStaerke) verglichen. Sollte der empfangene Wert größer als dein eigener sein, hast du bzw. dein Calliope mini leider verloren, was im »Gewonnen«-Platzhalter der 2 entspricht. Hast du und ein Mitspieler genau den gleichen Wert erreicht, haben beide gewonnen: In beiden Fällen ist der vom Mitgewinner empfange Wert nicht größer als der eigene, damit bleiben beide Spieler im Zustand »Gewonnen«.

Auch wenn dein Programm noch nicht ganz fertig ist, probier einmal aus, ob der Spielstart schon funktioniert. Dazu brauchst du nur zwei Calliope minis. Wenn auf einem Calliope mini Knopf »A« gedrückt wird, sollten beide das Spiel starten, was du am Aufleuchten der RGB-LED in Gelb erkennen kannst.

Abb. 9–24 Was Calliope ständig machen muss

Es fehlt nun noch das Aufsummieren der Beschleunigungswerte und die Anzeige, ob du gewonnen hast oder nicht. Dazu baust du in der »dauerhaft«-Schleife des Calliope mini zunächst eine Fallunterscheidung ein, ob das Spiel gerade läuft oder nicht (»startSpiel« muss dafür also 1 sein). Ist dies der Fall, wird in einer zweiten Schleife während des laufenden Spiels (also solange die aktuelle Zeit noch kleiner als der beim Start des Spiels festgelegte Wert im Platzhalter »Zeitstempel« ist) ständig die Beschleunigung gemessen und zu »momentaneStaerke« hinzuaddiert. Dabei ist es wichtig, den Absolutwert der Beschleunigung zu nehmen, damit sich die Beschleunigungen beim Hin-und Herbewegen in entgegengesetzte Richtungen nicht aufheben (also zu 0 addieren).

Ist der Zeitpunkt des Spielendes erreicht, wird »startSpiel« wieder auf nicht laufend (0) zurückgesetzt, die erreichte »momentaneStaerke« kurz angezeigt und an die anderen Calliope minis gesendet. Um auf Nummer Sicher zu gehen, wird das hier nur gemacht, wenn die Stärke tatsächlich nicht 0 ist, um nicht aus Versehen ein neues Spiel zu starten. Der Platzhalter »Gewonnen« wird außerdem auf 1 gesetzt. Solange keine weiteren Daten empfangen werden, die dem widersprechen, hast du das Spiel also gewonnen.

Nach dieser Fallunterscheidung wird noch der Platzhalter »Gewonnen« ausgewertet:

Und das war auch schon alles. Der Trick bei der Auswertung, wer gewonnen hat, besteht einfach darin, dass man zunächst einmal davon ausgehen kann, selber gewonnen zu haben, solange nicht ein Wert eintrifft, der größer als der eigene ist. In diesem Fall wird nachträglich auf die rote LED umgeschaltet, was aber so schnell geht, dass du es meist nicht sehen kannst. Damit ist die Anzahl der Mitspieler beliebig und könnte sich auch während eines Spiels noch ändern, wenn ein Spieler zum Beispiel ausfällt.

9.4.3 Verbesserte Punkteanzeige

Wie du vielleicht merkst, ist die Zahl für die eigene Stärke nicht wirklich gut zu lesen, da sie viel zu lang ist. Eine Alternative ist, die LEDs auf dem LED-Display des Calliope mini einzeln zu verwenden, sodass jede LED einer bestimmten Anzahl »Punkte« entspricht.

Abb. 9–25 Matrixdisplay als Punkteanzeige

Dafür kannst du den »zeige Nummer«-Block nach dem Senden des Platzhalters »momentaneStaerke« durch eine Anzeige per LED-Display ersetzen. Zunächst speicherst du den Wert der Stärke in einem neuen Platzhalter zwischen (deswegen auch »Zwischenspeicher« genannt). Da die Stärke sehr große Werte annimmt, kannst du den Wert für die »momentaneStaerke« durch einen bestimmten Wert teilen, was hier beim Ändern des Zwischenspeichers auf »momentaneStaerke/2000000« geschieht: Leuchten nach dem Schütteln gar keine LEDs auf, sollte er verkleinert werden. Sind danach alle an, sollte der Wert 2000000 noch einmal vergrößert werden – oder du bist einfach nur besonders gut.

Danach folgt jeweils eine Schleife für die Reihen und Spalten des Displays. Mit der ersten, äußeren Schleife werden alle Spalten des LED-Displays durchlaufen. Dabei wird für jede Spalte danach in einer weiteren Schleife auch jede Reihe durchlaufen. Solange der Zwischenspeicher noch größer als 0 ist, wird eine LED angeschaltet (mit der »Zeichne«-Funktion an der passenden Stelle für Spalte und Reihe), danach der Wert im Zwischenspeicher um 1 verringert. Irgendwann ist er soweit reduziert, dass keine weiteren LEDs mehr aufleuchten – oder es leuchten bereits alle LEDs.

9.4.4 Was man noch so machen könnte

Hier verwendest du ja nur die x-Komponente der Beschleunigung. Eine mögliche Änderung wäre es, alle drei Komponenten (x, y und z) auszuwerten – entweder als Addition zur momentanen Stärke oder als Subtraktion (wenn du die Spieler bestrafen willst, wenn sie den Calliope mini in einer unerlaubten Richtung bewegen). Du könntest natürlich auch die Rotation benutzen, sodass der Calliope mini möglichst schnell gedreht werden muss, um das Spiel zu gewinnen.

9.5 Das Roboterballett

Beim Roboterballett schlüpfen du und deine Freunde in die Rolle von Robotern, und ihr erhaltet auf euren Calliope minis Bewegungsanweisungen von einem Choreografen, nach denen ihr dann im Gleichklang tanzen könnt.

Für das Roboterballett brauchst du also eine Gruppe Kinder, die die Rolle der Roboter übernehmen, sowie ein weiteres Kind oder einen Erwachsenen für die Rolle des Choreografen, der die Anweisungen über seinen Calliope mini an die Roboter sendet. Jedes der Roboterkinder hält dabei seinen Calliope mini in der Hand und führt exakt die Bewegungen aus, die es auf dem Calliope angezeigt bekommt. Dabei ist der Mikrocontroller des Choreografen der Sender für alle anderen Empfänger-Calliopes der Roboterkinder

Abb. 9–26 Der Roboter soll einen Schritt nach rechts gehen.

Für die Programmierung des Roboterballetts solltest du dich bereits mit Logikverknüpfungen und dem Umgang mit Platzhaltern auskennen. Es ist also von Vorteil, wenn du bereits Programmiererfahrung besitzt und ein paar Projekte aus diesem Buch schon ausprobiert hast.

9.5.1 Bewegungsanweisungen senden

Zu Beginn deines Projektes musst du dir überlegen, aus welchen Grundbewegungen dein Ballett besteht. Ich entscheide mich für die Bewegungen vorwärts, rückwärts, rechts, links und hochspringen. Um diese Bewegungsanweisungen an das Roboterballett zu übermitteln, lege ich folgende Display-Anzeigen fest:

Abb. 9–27 Display-Anzeigen für das Roboterballett: links, rechts, vorwärts, rückwärts, hochspringen

Diese fünf Anzeigen sollen auf den Calliope-Displays der Roboter angezeigt werden, wenn der Choreograf mit seinem Calliope mini verschiedene Eingaben ausführt:

Die Empfänger-Calliopes der Roboterkinder müssen per Funk eine Nachricht erhalten, welche Eingabe der Sender-Calliopes durchgeführt hat. Um den Wert dieser 5 Eingaben an den Empfänger-Board übermitteln zu können, benötigst du einen Platzhalter. Lege einen neuen Platzhalter an und nenne ihn »richtung«. Als nächsten Schritt ordnest du den 5 Bewegungen die Zahlenwerte aus der folgenden Tabelle zu. Das nächste Bild zeigt dir, wie du die Befehle im Editor-Skript zusammenstellen musst.

Bedeutung Eingabe Wert von »richtung«
Links Wenn A gedrückt 0
Rechts Wenn B gedrückt 1
Vorwärts Wenn A+B gedrückt 2
Rückwärts Wenn Display nach unten 3
Hochspringen Wenn geschüttelt 4

Tab. 9–3 Zuordnung von Eingaben zum Zahlenwert des Platzhalters »richtung«

Wann immer eine dieser Eingaben erfolgt, muss der Wert des Platzhalters »richtung« auf den entsprechenden Wert aus der Tabelle geändert werden. Du brauchst insgesamt fünf Eingabe-Klammern und 5 »ändere richtung auf«-Blöcke. Dein Programmcode für das Versenden sollte jetzt ungefähr so aussehen:

Abb. 9–28 Alle Programmierbefehle für den Choreografen

Der Sender-Calliope soll den Wert dieses Platzhalters an alle anderen Calliope-Empfänger senden, nachdem er den Zahlenwert geändert hat. Den notwendigen Befehl findest du in der Befehlsgruppe »Funk«. Wähle den »sende Nummer«-Block und füge anstatt der 0 einen »richtung«-Platzhalter ein.

Abb. 9–29 »richtung«-Platzhalter verändern und senden

Durch Auswertung dieser Nummer und der entsprechenden Anzeige auf den Empfänger-Boards werden die Roboterkinder wissen, wie sie sich bewegen sollen.

Hinweis

Die Befehle für die Empfänger fügst du im gleichen Projekt ein wie die oberen Befehle für den sendenden Choreografen. Du siehst später, wie du bestimmen kannst, welcher Calliope mini der Choreograf ist und welche Boards die Roboterkinder sind.

9.5.2 Bewegungsanweisungen empfangen und auswerten

Die gesendete Nummer muss anschließend ausgewertet werden. Jeder Calliope mini kann darauf reagieren, wenn er ein Datenpaket empfangen hat. Der dazugehörige Befehl im Editor erwartet eine »receivedNumber«. Dies ist Englisch und bedeutet »empfangene Nummer«. Wähl diesen Block aus.

Abb. 9–30 Befehlsgruppe »Funk«

Zum Anzeigen der jeweiligen Display-Anzeige ist nun noch eine Logik-Abfrage notwendig, sodass die Empfänger-Boards wissen, welches der fünf Symbole angezeigt werden soll. Um zudem nachfolgend aufeinander immer wieder neue Befehle auf dem Display anzeigen zu können, ist es wichtig, dass das Display vor der Anzeige eines neuen Befehls immer wieder gelöscht wird. Dafür kannst du vor jeder Display-Anzeige noch den Befehl »Bildschirminhalt löschen« hinzufügen.

Abb. 9–31 Auswertung der empfangenen Nummer

Wiederhole diese Abfrage nun für die weiteren vier möglichen Fälle (rechts, vorwärts, zurück und hochspringen). Du kannst mit der rechten Maustaste auf das Wort »wenn« klicken und den Menüpunkt »Duplizieren« auswählen. Den neuen »wenn dann«-Block kannst du unten anfügen und die empfangene Nummer und die angezeigten LEDs verändern. Achte darauf, dass du keine Nummer doppelt hast.

Abb. 9–32 Auswertung der empfangenen Nummer

Ihr könnt das Programm im Simulator ausprobieren oder gleich schon auf eure Calliope minis herunterladen. Jeder Calliope mini mit diesem Programm wird die Befehle ausführen können.

Wenn ihr das Roboterballett mit euren Calliope minis ausprobiert, werdet ihr bald feststellen, dass ihr alle die Choreografen sein könnt. Das bedeutet: Wenn ein Kind (zum Beispiel Maxi) den Knopf B drückt, erscheint der Pfeil nach rechts auf den beiden anderen Displays. Wenn nun aber eins der anderen Kinder danach vielleicht auf Knopf A drückt, dann erscheint auch auf Maxis Display ein Pfeil nach links.

Wenn ihr wollt, dass eine bestimmte Zeitlang nur Maxi der Choreograf sein soll, dann müsst ihr euer Programm noch ein bisschen verändern.

9.5.3 Einen einzigen Sender-Calliope bestimmen

Du benötigst für den folgenden Schritt noch einen Platzhalter. Erstell einen neuen Platzhalter und nenne ihn »empfangen«. Solange du diesen Platzhalter nicht veränderst, liegt sein Wert bei 0. Ein Platzhalter kann aber auch die Werte »wahr« oder »falsch« speichern. Solange du ihn nicht veränderst, ist ein Platzhalter »falsch«.

Stell dir vor, du als Roboterkind hältst deinen Calliope mini in der Hand und machst ihn an. Es wird nichts angezeigt, weil du noch kein Datenpaket empfangen hast. Also kannst du deinen Calliope mini auch die ganze Zeit fragen: »Hast du etwas empfangen?« – »Nein, habe ich nicht.« oder anders gesagt: »Calliope mini, du hast etwas empfangen!« – »falsch, habe ich nicht.« Nun führt ein anderes Kind (Maxi) eine Eingabe durch, zum Beispiel Knopf A drücken, und du fragst deinen Calliope mini wieder: »Hast du etwas empfangen?« – »Ja, stimmt, habe ich, es ist wahr.« Dein Calliope mini weiß nun bis zum nächsten Neustart, dass es bereits (früher) etwas empfangen hat.

Abb. 9–33 Der Calliope mini soll sich merken, dass er ein Datenpaket empfangen hat.

Maxis Calliope mini hat aber noch kein Datenpaket empfangen, sondern nur eine Nummer gesendet. Der Platzhalter »empfangen« wurde auf Maxis Board noch nicht verändert, er ist immer noch bei 0 oder falsch.

Füge nun in den Eingabe-Blöcken eine Abfrage hinzu, die prüft, ob der Platzhalter »empfangen« noch falsch ist. Wenn dieser Platzhalter noch falsch ist, bedeutet es, dass dieser Calliope mini (seit dem letzten Neustart) noch kein Datenpaket empfangen hat. Nur dann soll er den »richtung«-Platzhalter als Nummer an die anderen Calliope minis senden. Du findest die dafür notwendigen Befehle in der Befehlsgruppe »Logik« und benötigst außerdem den »empfangen«-Platzhalter.

Abb. 9–34 Nur senden, wenn noch nichts empfangen wurde.

Verändere alle Eingabeblöcke in dieser Form. Jeder »sende Nummer richtung«-Block sollte von einem »wenn dann«-Block umschlossen werden, der überprüft, ob der Wert des Platzhalters »empfangen« falsch ist. Damit steht fest, ob es sich bei dem Calliope mini um den einzigen Sender oder einen der vielen Empfänger handelt.

Maxis Calliope mini hat noch kein Datenpaket empfangen und darf weitersenden. Die anderen Calliopes der Roboterkinder können nicht mehr senden, weil sie nach dem ersten Datenpaket ihren Platzhalter »empfangen« schon auf »wahr« verändert haben.

Wie bestimmt ihr nun, wer der nächste Choreograf sein soll, der den Roboterkindern Befehle senden darf? Der Calliope mini, der als Erstes etwas sendet, bleibt bis zum nächsten Neustart der Sender. Wenn ihr nach einem Durchgang alle auf den weißen Reset-Knopf auf euren Calliope minis drückt, kommt ihr wieder zurück zum Anfang. Noch niemand hat ein Datenpaket empfangen. Sobald ein Kind zum Beispiel auf den Knopf A drückt oder den Calliope mini schüttelt, werden bei allen anderen Calliope minis die entsprechenden Anzeigen aufleuchten. Dieses Kind darf die anderen dann steuern und Befehle senden, die anderen können nur noch Befehle empfangen.

Wenn du alle Schritte ausgeführt hast, sieht dein Programm so aus wie auf dem nächsten Bild, und ihr könnt mit dem Roboterballett beginnen, wenn alle Mitspieler dieses Programm auf ihre Calliope-Boards heruntergeladen haben.

Abb. 9–35 Das fertige Programm für sendende und empfangende Calliope minis

9.5.4 Erweiterungen

Für die Ballettaufführung können sich die Roboterkinder noch effektvolle Roboterkostüme bauen. Mit Alufolie, Papiertüten und Papprollen lassen sich im Handumdrehen Helme und Armbänder zaubern – eurer Kreativität sind hier keine Grenzen gesetzt.

Ihr könnt euch auch noch andere Anweisungen ausdenken, solange alle tanzenden Mitspieler wissen, welche Bedeutung die Anzeigen auf dem Display haben. Eine leuchtende LED in der rechten oberen Ecke kann bedeuten, dass alle Roboter ihren rechten Arm heben müssen.

Ballett aus mehreren Gruppen

Unter Verwendung des Programmierblocks »setze Gruppe« kannst du dein Ballett auch in zwei oder mehrere Gruppen unterteilen. Je nachdem, wie viele Gruppen du verwendest, brauchst du dann auch dieselbe Anzahl Choreografen, die über je eine Gruppe Regie führen.

Let’s dance!

9.6 Eckstein, Eckstein ...  alles muss versteckt sein!

Mit diesem Calliope-Projekt erfindest du das Versteckspiel neu! Wie ein Geheim­agent benutzt du deinen Calliope mini, um das Versteck eines anderen Callio­pe-Mitspielers aufzuspüren. Dein Calliope-Board hilft dir durch seine Funkfähigkeit und die LED-Anzeige dabei, die versteckten Calliope minis aufzuspüren. Die LED-Anzeige zeigt dir genau an, wie nah du am Versteck bist. Kurz bevor du das Versteck gefunden hast, verrät der Calliope deines Mitspielers mit einen Ton aus dem Lautsprecher sein Versteck.

Abb. 9–36 Wer findet den versteckten Calliope mini?

Du fragst dich sicher, wie das funktionieren kann. Genau wie beim echten Versteckspiel, wo dein Mitspieler manchmal durch ein Geräusch auf sich aufmerksam macht, kann auch der Calliope mini auf sich aufmerksam machen. Allerdings nicht durch ein Geräusch, sondern durch ein Funksignal. Der suchende Calliope hört sich nach diesem Funksignal um und stellt fest, wie weit der versteckte Calliope entfernt ist. Je näher du mit deinem Calliope mini am Versteck des anderen bist, desto stärker wird das Funksignal.

Abb. 9–37 Das Funksignal wird stärker, je näher die Calliope minis einander sind

Wie du festgestellt hast, brauchst du zur Umsetzung für das Suchspiel zwei Calliope-Boards. Eins, das versteckt wird und als Sender arbeitet, und eins, das als »Sucher« zum Empfangen benutzt werden soll. Diesmal musst du also zwei unterschiedliche Programme bauen: für jeden der beiden Calliope minis ein anderes. Da du nun ungefähr weißt, wie das Versteckspiel funktioniert, kann es mit der Programmierung losgehen.

9.6.1 Das Programm für den versteckten Calliope

Du beginnst mit dem Programm für den versteckten Calliope mini. Als Erstes musst du über den Programmstart deinem Calliope einige Dinge mitteilen. Zum Beispiel müssen beide Calliope mini wissen, auf welcher Funkfrequenz sie sprechen. Das kannst du dir ähnlich wie einem Radiosender vorstellen. Diese Sender heißen beim Calliope »Gruppe«. Den Programmbefehl »setze Gruppe« findest du im Editor in der Rubrik »Funk« und dort wiederum unter »…Mehr«. Du wählst hier ganz einfach die Zahl 0 als Gruppe. Der Programmstart könnte wie auf dem folgenden Bild aussehen:

Abb. 9–38 Beim Starten wird eine Gruppe gesetzt

Damit du auch in kleineren Räumen suchen kannst und der Calliope mini nicht zu schnell gefunden wird, solltest du die Senderstärke etwas niedriger einstellen. Dein Calliope-Board funkt dann etwas »leiser« und das suchende Calliope-Board hat es später nicht zu einfach, den versteckten Calliope mini zu finden. Hierzu wählst du ebenfalls aus der Rubrik »Funk« und anschließend »…Mehr« den Programmierbefehl »setze Übertragungsstärke«. Da der größte wählbare Wert hier 7 ist, wählst du ungefähr die Mitte. Die Zahl 3 ist hier ein guter Anfang.

Abb. 9–39 Die Übertragungsstärke wird gesetzt

Die Startvorbereitungen hast du somit abgeschlossen, jetzt kommt der spannende Teil. Du musst dafür sorgen, dass dein Calliope mini auf sich aufmerksam macht. Dazu musst du es dauerhaft funken lassen. Dabei ist erst einmal egal, was dein Calliope-Board per Funk überträgt, es soll später nur vom suchenden Calliope mini gehört werden. Dein Programm muss also um den Programmierbefehl »dauerhaft« und zum Beispiel »sende Zeichenfolge« erweitert werden.

Abb. 9–40 Fortwährend wird eine Zeichenfolge gesendet

Damit ist das Programm des versteckten Calliope-Spielers eigentlich schon fertig. Wenn du es auf deinen Calliope lädst, wirst du aber schnell feststellen, dass man nichts sehen kann. Das ist auch in Ordnung, aber unheimlich langweilig. Deshalb kannst du dein Programm so verändern, dass dein Calliope mini dir auf eine spannende Art und Weise mitteilt, dass er gerade auch wirklich funkt. Die beste Möglichkeit bietet dir dazu die LED-Anzeige. Du musst dazu nichts weiter tun, als dein Programm um drei Programmbefehle zu erweitern.

Abb. 9–41 Das Calliope-Display kommt hinzu

Jetzt spielt dein Calliope eine kleine Filmsequenz ab, die dir anzeigt, dass dein Calliope-Programm läuft und »Hallo hier bin ich!« sendet. Das Programm ist fürs Erste fertig. Es geht weiter mit dem zweiten Calliope mini, der als Sucher eingesetzt wird.

9.6.2 Das Programm für den suchenden Calliope

Auch hier beginnst du im Programmstart mit dem Programmbefehl »setze Gruppe«. Im Gegensatz zum versteckten Calliope wird der Programmbefehl »setze Übertragungsstärke« hier nicht benötigt. Dein erster Befehl ist also ganz einfach und sieht wie folgt aus.

Abb. 9–42 Der erste Befehl für den suchenden Calliope mini

Als Nächstes soll der suchende Calliope Ausschau nach dem versteckten Calliope halten. Hierzu fügst du dem Programmbefehl »wenn Datenpaket empfangen« den Platzhalter »receivedString« hinzu. Dieser Programmbefehl wird immer dann ausgeführt, wenn dein Calliope mini die Nachricht »Hallo hier bin ich!« vom versteckten Calliope empfängt.

Abb. 9–43 Wenn der suchende Calliope eine Nachricht empfängt

Wie du in der Einleitung des Projekts gelernt hast, soll dein Calliope mini prüfen, wie stark das empfangene Funksignal des versteckten Calliope mini ist. Hierzu musst du am Programmbefehl »wenn Datenpaket empfangen receivedString« noch eine Spezialeinstellung vornehmen. Dazu klickst du auf das kleine blaue Kästchen mit dem Zahnrad.

Abb. 9–44 Das kleine Zahnrad links oben

Anschließend öffnet sich ein Kasten mit weiteren Programmierbefehlen. Dort findest du den Programmierbefehl »signal«. Diesen Befehl schiebst auf der rechten Seite zum Programmierbefehl »Packet«.

Abb. 9–45 Der Programmierbefehl »Packet« wird ergänzt

Dein suchender Calliope mini ist nun in der Lage, den versteckten Calliope zu hören. Außerdem verrät dir das Programm nun schon, wie weit der versteckte Calliope mini noch entfernt ist. Damit du die Entfernung auch ablesen kannst, fügst du deinem Programm den Programmierbefehl »zeige Nummer signal« hinzu.

Abb. 9–46 Der Befehl »zeige Nummer signal« wird eingefügt

Du kannst das Programm nun testen, indem du es wie gewohnt auf den suchenden Calliope lädst. Schalte nun den versteckten Calliope mini ein. Dann beobachte, was der suchende Calliope macht. Wenn das Programm startet, siehst du, wie auf der LED-Anzeige eine Zahl erscheint. Bewege den suchenden Calliope nun in die Nähe des versteckten Calliope. Vor der angezeigten Zahl siehst du ein »-«, das können wir erst einmal ignorieren. Du wirst feststellen, dass die Zahl immer kleiner wird, je näher der suchende Calliope dem versteckten Calliope-Board kommt. Das »-« vor der Zahl kannst du durch einen weiteren Programmierbefehl entfernen. Hierzu erweiterst du das Programm durch den Programmierbefehl »Absolute von«. Du findest den Programmierbefehl in der Gruppe »Mathematik« und dort unter »…Mehr«.

Abb. 9–47 »Absolute von signal« wird angezeigt

Jetzt weißt du, dass die Signalstärke sich verändert, wenn du dich dem versteckten Calliope näherst. Eigentlich bist du mit deinem Programm fertig, aber nach ein paar Versuchen bemerkst du, dass die Zahlen in recht großen Abständen über die LED-Anzeige laufen. Das dauert nicht nur lange, sondern ist auch nicht schön. Aus diesem Grund kannst du dein Programm so verändern, dass die Signalstärke durch unterschiedlich große Kreise angezeigt wird. Ein großer Kreis bedeutet, dass dein Calliope sehr weit vom versteckten Calliope entfernt ist. Ein Punkt hingegen bedeutet, dass dein Calliope das Versteck gefunden hat. In der Mitte gibt es noch einen mittelgroßen Kreis, der dir sagt, dass du schon ganz nah bist.

Zuerst betrachtest du den Fall. in dem die Signalstärke größer als 65 ist. Eine Zahl, die größer oder gleich 65 ist, bedeutet in deinem Programm, dass die beiden Calliope-Boards noch sehr weit voneinander entfernt sind. Da ein großer Kreis genau dies anzeigen soll, erweiterst du dein Programm also um einen »wenn dann«-Programmierbefehl. Anschließend zeichnest du über »zeige LEDs« den großen Kreis. Auf dem Bild siehst du, wie dein Programm jetzt aussehen soll.

Abb. 9–48 Wenn Signal schwach, dann großer Kreis

Der nächste Fall sagt deinem Calliope mini, was er anzeigen soll, wenn es ganz nah am Versteck ist. »Ganz nah« bedeutet soviel wie »die Signalstärke ist kleiner als 55«. Auch hier verwendest du einen »wenn dann«-Programmierbefehl, der genau dies überprüft. Mit dem Programmierbefehl »zeige LEDs« kannst du dann den Punkt zeichnen.

Abb. 9–49 Wenn ganz nah, dann nur Punkt anzeigen

Jetzt fehlt nur noch der Teil, der den mittelgroßen Kreis anzeigt. Da dein Calliope bereits weiß, wann es sehr nah ist und wann es weit weg ist, musst du dein Programm noch so ergänzen, dass dein Calliope auch weiß, wann es das Versteck noch nicht gefunden hat, aber auch nicht so weit entfernt ist. Der gesuchte Programmierbefehl muss also genau die Signalstärken dazwischen überprüfen. Auch hierzu verwendest du natürlich am besten einen »wenn dann«-Programmierbefehl. Allerdings musst du ein wenig mehr überprüfen als in den beiden anderen Fällen. Denn zum einen muss die gefundene Signalstärke größer oder gleich 55 sein und zum anderen muss die Signalstärke kleiner oder gleich 65 sein. Du musst also die beiden vorherigen Fälle miteinander kombinieren. In der Gruppe »Logik« findest du einen Programmierbefehl »und«, der dir bei dieser Kombination hilft. Dein Programm ist nun fertig.

Abb. 9–50 Das Programm für den suchenden Calliope

Damit du den versteckten Calliope noch besser findest, kannst du das Programm des suchenden Calliope und des versteckten Calliope noch etwas verbessern, indem der versteckte Calliope mini einen Ton ausgibt, sobald der suchende Calliope sehr nah ist.

Im Programm des suchenden Calliope mini teilst du dem versteckten Calliope mini durch eine kurze Nachricht einfach mit, dass du sehr nah am Versteck bist. Dazu sendest du zum Beispiel eine Nummer.

Abb. 9–51 Eine Nummer wird gesendet

Im Programm des versteckten Calliope wartest du so lange, bis der suchende Calliope die Nummer geschickt hat. Dies kannst du erreichen, indem du den Programmierbefehl »wenn Datenpaket empfangen« zum Programm des versteckten Calliope mini hinzufügst. Aber anstatt die Signalstärke zu überprüfen, musst du diesmal wirklich die empfangenen Daten auswerten. Da dein suchender Calliope mini die Zahl 0 versendet, sobald es sehr nah ist, muss im Programm des versteckten Calliope mini natürlich auch genau dies überprüft werden. Wenn also die empfangende Zahl 0 ist, dann soll dein verstecktes Calliope eine Note abspielen.

Abb. 9–52 Der versteckte Calliope mini spielt eine Note ab

9.6.3 Was ist noch möglich?

Viel Erfolg beim Verstecken und beim Finden!

9.7 Theremin

Ein Theremin ist ein Musikinstrument, das den Abstand deiner Hände zu dem Instrument misst und abhängig davon die Frequenz und Lautstärke misst – also, welcher Ton gerade wie laut gespielt wird. Im Gegensatz zu anderen Musikinstrumenten ist damit ein gleichmäßiger Wandel des Tons möglich, da ja nicht eine Taste angeschlagen wird, sondern der Abstand deiner Hand zum Instrument beliebig geändert werden kann, was zu schön spukigen Klängen führt. In diesem Projekt wirst du etwas Ähnliches mit deinem Calliope mini bauen.

Leider ist der Lautsprecher des Calliope nicht besonders laut (wobei mancher, der das mit anhören muss, vielleicht anderer Meinung ist). Damit du das Theremin besser hören kannst, gibt es weiter unten noch zwei Erweiterungen: Du kannst deinen Calliope mini als Kopfhörer verwenden oder einen externen Lautsprecher anschließen.

Dafür bräuchtest du allerdings im ersten Fall einen weiteren Calliope mini, im zweiten Fall einen kleinen Lautsprecher (8 Ohm), etwas Draht und einen kleinen Widerstand (etwa 47 Ohm).

Abb. 9–53 Calliope mini mit Lautsprecher

9.7.1 Los geht’s

Der Lichtsensor des Calliope mini ist ein Sensor, der sich prima als Grundlage für das Theremin eignet: Wenn du den Calliope mini entweder unter eine Lampe legst und mit der Hand abschattest oder einfach mit einer Taschenlampe unterschiedlich beleuchtest, wird ein ähnlicher Effekt wie bei einem richtigen Theremin erzielt.

Das Grundprogramm noch einfacher als die Alarmanlage mit dem Lichtsensor, die am Anfang des Buches gebaut wurde.

Abb. 9–54 Das Basisprogramm für das Theremin

Du benutzt den Lichtsensor, um damit einfach die Frequenz des Klingeltons festzulegen. Wenn du es ausprobierst, merkst du aber, dass es nicht richtig gut klingt. Leider stimmen die Zahlenwerte, die der Sensor liefert, nicht richtig zu dem, was man als unterschiedliche Töne haben will – da muss also noch etwas nachgebessert werden.

Abb. 9–55 Das Theremin mit etwas Mathematik

Dazu kannst du ein wenig Mathematik gebrauchen: Wenn der Sensor zu niedrige Werte liefert, kann man nur ein dumpfes Brummen hören (wenn überhaupt etwas zu hören ist). Um etwas schönere Töne zu erzielen, kannst du einfach einen Wert (hier 200) zum Sensorwert addieren. Hier merkst du, dass eine höhere Frequenz gleichbedeutend ist mit höheren Tönen. Zusätzlich könnte man auch die Sensorwerte mittels Multiplikation noch weiter vergrößern. In dem Beispiel multiplizierst du nur mit 1, was am Ergebnis nichts ändert und damit erst einmal nichts wirklich bringt. Du kannst aber einfach einmal an beiden Zahlenwerte so lange herumspielen, bis dein Lieblingstonbereich erreicht ist.

9.7.2 Ein Calliope mini als Kopfhörer

Am besten ist der Lautsprecher des Calliope mini natürlich zu hören, wenn er möglichst nah am Ohr ist. Da der Lichtsensor, mit dem du die Melodie erzeugst, aber direkt daneben ist, kann man ihn so nicht benutzen. Stattdessen kannst du, falls du ein zweites (oder gar drittes) Calliope-Board zur Verfügung hast, diesen Calliope mini als Kopfhörer verwenden.

Abb. 9–56 Musik-Sender

Ein Calliope mini arbeitet dabei als Sensor, der zunächst den Wert des Lichtsensors misst und entsprechend deinen mathematischen Berechnungen für die besten Töne an alle Calliope-Board einer bestimmten Gruppe (hier 42) sendet. Die Gruppe wird direkt beim Start des Calliope mini festgelegt.

Danach wird dauerhaft wie zuvor die Lichtstärke ausgelesen und mit der gleichen Mathematik wie zuvor angepasst. Der Wert wird allerdings nicht mehr genutzt, um den Klingelton direkt abzuspielen, sondern in einem Platzhalter namens »Frequenz« gespeichert. Danach wird der Klingelton mit dieser Frequenz auch noch auf dem Calliope mini selber abgespielt. Das schadet nicht, und du kannst einfach kontrollieren, ob das Programm läuft. Danach wird die Frequenz auch noch an alle anderen Calliope minis in derselben Gruppe gesendet.

Abb. 9–57 Musik-Empfänger

Einen zweiten Calliope mini programmierst du als Empfänger mit einem weiteren Programm. Es kommt beim Starten in dieselbe Gruppe wie das sendende Theremin (hier die 42). Jedes Mal, wenn ein neuer Wert empfangen wird, wird dann der Klingelton auf den empfangenen Wert geändert. Damit kann man den einen Calliope an sein Ohr halten, während man den anderen zum Erzeugen der Melodie verwendet. Funktioniert das bei dir?

9.7.3 Es wird lauter – Anschluss eines externen Lautsprechers

Eine weitere Möglichkeit, den Calliope mini besser klingen zu lassen, ist der Anschluss eines externen Lautsprechers (wie auf dem Bild am Anfang des Kapitels). Dafür brauchst du natürlich erst einmal einen externen Lautsprecher, vielleicht hast du so etwas in der Bastelbox oder kannst jemand fragen, der so etwas hat. Es muss nichts Besonderes sein, irgendein Kleinlautspecher sollte funktionieren. Im Grunde kannst du auch genauso einen alten Kopfhörer anschließen, je nachdem, was du halt da hast. Dann brauchst du noch etwas Draht (einfache Büroklammern zum Beispiel bestehen nur aus Draht) und für den Lautsprecher wahrscheinlich noch einen kleinen Widerstand (auch hier kannst du wieder kreativ Sachen nutzen, die du gerade griffbereit hast: Mit einem Bleistift beispielsweise kann man prima Widerstände bauen.) Programmieren musst du in diesem Fall nichts, sondern nur den Lautsprecher anschließen.

Abb. 9–58 Calliopes Lautsprecherkontakte

Die Kontakte dazu verbergen sich in der Kontaktreihe für den Motoranschluss, wie auf dem Bild gezeigt. Die Anschlüsse auf dem Calliope mini sind leider schlecht zugänglich für einfache Basteleien und auch noch unbeschriftet. Als ersten Schritt kannst du – falls dein Lautsprecher nicht schon welche hat – Drähte an ihm befestigen. Hier wurde eine sogenannte Litze verwendet, ein Bündel aus dünnen Drähten mit einer Kunststoffisolierung außen herum. Die Isolierung wurde an den Enden entfernt (das geht normalerweise schon, indem du den Draht zwischen zwei Fingernägel klemmst und dann zum Ende abziehst (genauer wurde das bereits in Abschnitt 7.2.4 erklärt)). Das kannst du dir sparen, wenn du einen Draht ohne Isolierung verwendest (ein super angenehmer Draht dafür ist sogenannter Silberdraht aus dem Bastelladen oder aber die angesprochenen Büroklammern aus Draht).

Der Draht wird einfach um die Kontakte des Lautsprechers herumgewickelt und in die passenden Löcher im Calliope mini gesteckt. Auf der Rückseite kannst du die Drähte umbiegen und mit einem Streifen Klebeband auf den Calliope mini kleben. Du musst nur aufpassen, dass die blanken Drähte keine anderen metallischen Stellen berühren außer den beiden Löchern, daher solltest du sie auch am besten mit Klebeband festkleben.

Wenn beim Einstecken der Drähte beim Calliope mini die Lichter ausgehen (vor allem die kleine gelbe Power-LED), verbraucht der Lautsprecher zu viel Strom. Das kannst du reparieren, indem du einen Widerstand zwischen einen Draht des Lautsprechers und den Ausgang des Calliope mini einbaust: Je größer der Widerstand, desto geringer der Stromverbrauch, aber damit auch die Lautstärke. Du müsstest also durch Ausprobieren herausfinden, mit welchem Widerstand sich der Calliope mini nicht mehr abstellt, der Lautsprecher aber noch laut genug ist.

Veränderbare Widerstände

Am leichtesten lässt sich der Widerstand einstellen, wenn du ein Potentiometer oder einen anderen veränderbaren Widerstand griffbereit hast. Diese Widerstände haben üblicherweise drei Kontakte. Zwischen zwei der Kontakte (meist die äußeren) befindet sich Material, durch das der Strom nicht so gut fließt. Der dritte Kontakt ist ein Schleifkontakt auf diesem Material. Damit befindet sich zwischen diesem Kontakt und einem der äußeren je nach Einstellung unterschiedlich viel Material, der Widerstand ändert sich dementsprechend.

9.7.4 Erweiterungen und Änderungen

Natürlich kannst du auch beide Varianten kombinieren, sodass mehrere Calliope minis mit Lautsprechern per Funk angesteuert werden. Auch könntest du mit zwei Calliope-Boards deinen eigenen Funkkopfhörer basteln. Schließlich ist der Lichtsensor nicht der einzige Sensor, der hierfür verwendet werden kann: Beschleunigung, Rotation und Magnetkraft wären weitere Möglichkeiten. Schaffst du es, das Programm so anzupassen, dass diese Sensoren anstelle des Lichtsensors genutzt werden?