Nun mal zum zweiten Teil der Software-Seite - Programmieren des Smartphones:
Auf der Projektseite gibt es eine 'kleine' 40-seitige
Einstiegsanleitung zum Programmieren mit 'Processing'. Auch in dieser Anleitung sind meiner Meinung nach ein paar zu viele Fußnoten enthalten. Vor allem wird zum Teil geschreiben: Mache es so oder so, es könnte aber auch anders funktionieren. Die Freiheiten einem Anfänger zu überlassen ist nicht in jedem Fall förderlich.
Als erstes muss die
Processing-Entwicklungsumgebung installiert werden. Leider waren zu dem Zeitpunkt meiner Anfänge alle verfügbaren Versionen fehlerbehaftet, so dass ich erst nach geraumer Zeit herausgefunden hatte, wie der zusätzliche benötigte 'Android-Mode' manuell dazu gefügt werden konnte. Mittelerweile ist diese Problematik in den ersten beta-Versionen hoffentlich behoben. Ich habe mich zudem dafür entschieden, nicht nur das erforderliche Android-SDK zu installieren, sondern das komplette
Android Studio. In dem Studio sind in der normalen Installation nicht die älteren API-Pakete enthalten um z.B. Programme zu schreiben, die auf Android 2.3.3 laufen. Diese Pakete sind manuell über den SDK-Manager zu installieren. Für den ArduSmartPilot reicht diese API-Version aus und generell ist somit auch die Lauffähigkeit des fertigen Programms auf fast allen Android-Geräten gegeben.
Die Anleitung hat mir zumindest weiter geholfen und so konnte ich schon nach kurzer Zeit schon eine Verbindung zwischen einem Smartphone und dem Bluetooth-Modul herstellen. Ein wenig 'tricky' war noch die notwendigen ADB-Treiber für das genutzte Motorola-Handy zu installieren, da ein Unversaltreiber nicht funktionierte.
Das vorgefertigte Programm auf dem Telefon sieht übrigends so aus:
Links stehen 2 oder 3 Rückmeldungen vom Arduino. Daneben kann man die Motorleistung auswählen und die rechte Seite zeigt ein Fadenkreuz, bei dem sich der rote Punkt je nach Neigung des Telefons bewegt und die Bewegungen auch an den Arduino sendet.
Da die Größe der Anzeigen unabhängig von der gewählten Größe des Bildschirms ist, habe ich auch hier ein wenig programmiertechnisch umgearbeitet und zudem noch die eine oder andere Idee verwirklicht:
- Neudesign des gesamten Schirmes abhängig von der gewählten Auflösung
- Extra Motoraktivierung gleichzeitig "Not-Aus"
- Bildschrim skaliert sich in gewissen Grenzen bei Veränderung von size() mit allen Details
- Vibrationsmeldung für Motorfreigabe und zu kleine Akkuspannung
- Einzelzellenüberwachung
- Anzeige und Umrechungen der Akkuspannung mit Alarm durch spannungen[]
- Wackeln / Rauschen um den Nullpunkt herum wird ausgeblendet
Meine Version in 320x240 Pixel sieht so aus:
Sobald im Programmcode nur die Größe 900x540 angegeben wird ändert sich der Schrim auf diese Ansicht:
Bei den ersten Tests hatte ich mir die Frage gestellt, wie in einer 'Gefahrensituation' der Motor besser abgeschaltet werden kann, ohne auf dem Schirm links unten die 0% treffen zu müssen. Dazu habe ich einen Freigabebutton programmiert. Erst nach Druck auf 'MOTOR AUS' wird der Motor 'FREI' und es kann die Leistung ausgewählt werden. Im Flug reicht ein Druck auf den großen 'MOTOR FREI' Knopf um den Antrieb sofort auszuschalten.
Auch die Einzelzellenüberwachung ist ein nettes Gimmick. Vorgegebener Alarmwert ist 3,45V/Zelle. Ab diesem Wert, wird die Anzeige der Zellenspannung rot und das Telefon fängt an zu vibrieren.
Da man das Telefon selten ruhig halten kann, außer es liegt auf einem Tisch, waren auch immer kleine Servo-Zucker vorhanden. Was lag also näher als alle Bewegungen unter 5° Telefonneigung auszublenden. Auch Bewegungen über 90° Telefonneigung sind nicht sinnvoll, führten zu extremen Servobewegungen und werden jetzt auf knapp 90° limitiert.
Als einizge Erweiterung bin ich noch am Überlegen, ob noch eine Trimmung eingebaut werden sollte. Ob diese Idee verwirklicht werden muss, wird die Flugerprobung zeigen.
Doch in den nächsten Tagen zuerst einmal der Einbau der Komponenten in den Felix.
Gruß Matthias