Software

Für den ArduSmartPilot sind zwei getrennte Softwareentwicklungen nötig: Erstens wird eine Andro­id App und zweitens ein Arduino-Programm erstellt.

Die Arduino-Plattform ist nicht nur eine Hardwareplattform sondern beinhaltet auch eine Open Source IDE (Entwicklungsumgebung), die sowohl auf Mac, Linux und Windows läuft. Die Software des Mikrocontrollers wird hier über eine einfache C-artige Sprache geschrieben, für die es eine große Anzahl von Tutorials im Internet und entsprechende Lehrbücher gibt.
Die „Sketches“ genannten Arduino-Programme sind unverändert auf jede Arduino-Platine übertrag­bar, auch wenn sich darauf unterschiedliche Mikrocontroller befinden. Die Sketches werden daher zuerst auf einem handlichen Arduino Uno entwickelt und nach erfolgrei­chen Tests auf einen Ardui­no Pro Mini übertragen.

Die Möglichkeiten der Programmierung sind durch die C-ähnliche Sprache der Arduino IDE be­schränkt. Dies lässt sich aber sehr leicht umgehen, da man innerhalb eines normalen Quelltextes auch Maschinencodebefehle und C++ Befehle verwenden kann. Dadurch erreichen die Schüler/Stu­denten einen fließenden Übergang in das professionelle Programmieren von Mikrocon­trollern.

Im oberen Bild rechts ist ein Screenshot der Arduino IDE dargestellt.

Das Erstellen einer Android App ist generell ein sehr komplexer Prozess, der gute Java-Kenntnisse und einen Umgang mit professionellen IDEs wie Eclipse voraussetzt. Die Programmierung wird wegen der hohen Diversität der Android-Endgeräte zu­sätzlich komplexer. Schließlich ist der Zu­griff auf das Bluetooth-Modul im Android-Endgerät keine triviale Programmieraufgabe.

Die bis hierhin genannten Tatsachen machen die Android-Programmierung innerhalb eines Schü­lerprojekts eigentlich zu einem unmöglichen Unterfangen.

Doch glücklicherweise gibt es hierfür auch eine Open Source IDE, die nicht nur aus dem selben Ursprung wie die Arduino IDE stammt, sondern mit Hilfe entsprechender Bibliotheken eine ebenso einfache Programmierung erlaubt.

Diese plattformunabhängige IDE heißt „Processing“ und verwendet eine vereinfachte dem Java ähnli­che Programmiersprache. Es ist also kein Wunder, dass die Benutzeroberfläche von Proces­sing fast identisch mit der der Arduino IDE ist.

Im mittleren Bild links ist ein Screenshot der Processing IDE dargestellt.

Processing besitzt mehrere Modi, von denen in diesem Projekt der Java- und der Android-Modus verwendet werden: Im Java-Modus erstellt man Java-Programme, die sich auf einem PC/Mac aus­führen las­sen. Dabei handelt es sich um interaktive Grafikanima­tionen, d.h. der Programmablauf wird vom Benutzer über dessen Mausklicks gesteuert.

In diesem Sinne wird die App zur Steuerung des Ar­duSmartPilot zuerst als Java-Programm auf einem PC entwi­ckelt, wobei der PC via USB (statt über Blue­tooth) mit dem Arduino kommuniziert.

Damit lernen die Schüler die Programmierkonzepte wie Schleifen oder if-Verzweigungen nicht textbasiert sondern anhand von Grafikanimationen, was die Moti­vation und den Lernerfolg wesent­lich erhöht. Auch kommen hier künstlerisch kreative Ansprüche an das Programmierergebnis weitaus mehr zur Geltung.

Ist das Java-Programm zur Steue­rung des Flugzeugs erfolgreich am PC getestet, dann kann es im An­droid-Modus fast 1:1 auf das An­droidgerät übertragen werden. Den Mausklicks entsprechen dann ein Tippen auf den Touchbildschirm. Das Foto zeigt die Benutzeroberfläche einer sol­chen App.

Mit Hilfe der „Ketai“-Bibliothek wird bei der Android App die Bluetooth-Verbindung realisiert sowie interne Sensoren des Smartphones ausgelesen. Da­mit wird es möglich, das Flug­zeug z.B. mit Hil­fe des Lagesensors über ein Kippen des Smartphones zu steuern.

Bevor direkt mit dem Arduino Pro Mini im Flugzeug kommuniziert wird, testen die Schüler ihre App an einem Arduino Uno, der mit einem Bluetooth-Shield ausgestattet ist (= aufsteckbares funktions­fertiges Bluetooth-Modul). Die hier geschilderte Vor­gehensweise ermöglicht nicht nur den Schülern einen schritt­weisen und damit frustrationsarmen Einstieg in die Programmierung, sondern lehrt sie auch ein professionelles systematische Vorge­hen beim Erstellen und Testen von Software für eingebettete Systeme.