ArduSmartPilot - Steuern eines (einfachen) Modellflugzeugs mit dem Handy

Hallo zusammen,

es gibt ja mittlerweile schon die Möglichkeit Quadrocopter mit dem Smartphone zu steuern, indem die Lagesensoren entsprechend interpretiert werden.

An der Fachhochschule an der ich studiere haben wir eine Low-Cost-Variante davon für Flugmodelle entworfen.

Das Modell wird über zwei Achsen gesteuert, wobei auch noch eine dritte Achse per Quellcode erweitert werden kann.

Die Software ist frei verfügbar und die Kosten betragen ca. 60€ inkl. Modell. Voraussetzung ist ein Smartphone mit Android-Betriebssystem.

Eventuell hat ja der ein oder andere Interesse daran etwas damit zu experimentieren.

http://www.tec.reutlingen-university.de/fakultaet-technik/personen/professoren/prof-dr-rer-nat-stefan-mack/ardusmartpilot-projekt.html

---
(ich hab mich mal erbarmt ;) )

Leider kann ich den Beitrag nicht mehr bearbeiten, die Linkadresse für das Projekt hat sich geändert.

http://www.tec.reutlingen-university.de/de/projekte/ardusmartpilot/
 
Zuletzt bearbeitet von einem Moderator:

kreidler

User
Dann fang ich mal an, das Ganze aus mehr aus der Sicht eines Modellfliegers (und -bauers) zu betrachten. Aus Arduino-Sicht war ich bis hierhin noch völlig unbedarft:). Mal sehen, ob es jemanden interessiert:

Vor einiger Zeit bin ich über einen Artikel in der Zeitschrift Make gestolpert, in dem dieses Projekt vorgestellt wurde. Alles war so einfach beschrieben, dass ich die Hoffnung hatte, unseren Junior (10Jahre) mal ein wenig fürs Fliegen zu begeistern und ihn später vielleicht auch noch programmieren zu lassen.
Also mit Vollgas auf die Teileliste gestürzt.

Grob gesagt benötigt man:
1 Wurfgleiter
1 kleinen Brushless mit 8-10A Regler
2 kleine Servos
1 2s Lipo mit <500mAh
1 Arduino Mini Pro mit USB-Seriell-Wandler
1 Bluetooth-Modul
1 Android Smartphone
diverses Kleinzeug

Wurfgleiter war einfach:
Felix1.jpg
Der Flieger hat das übliche Wurfgleiterproblem einer zu hohen EWD von hier 4°. Anders gesprochen: Bei jedem Wurf stieg der Gleiter auf Höhe.
15-20g Blei in der Spitze oder an der Hinterkante des Flügels 6mm untergelegt um auf weniger als 2° zu kommen:
EWD.jpg
Jetzt gleitet der Felix wie ein Gleiter bei 75g.

Motor und Regler gibt es mir den Servos beim HK:
RCteile.jpg
Den vorgeschlagenen Regler habe ich durch einen bewährten 10A Turnigy Plush ersetzt. Da kann man notfalls noch mit der Programmierkarte nachhelfen.

Laut Überschlag im Drivecalc ist beim Motor ist wohl eher die Fraktion Senkrechtstarter vorgesehen für weniger als 200g Abflugmasse:
DriveCalc 7x5.JPG
Ich werde wahrscheinlich den Prop noch ein bischen optimieren:D.

Dann noch Arduino und ein BT-Modul. Wie vorgeschlagen, habe ich mir den 3,3V Arduino besorgt um gleich die Versorgungspannung für das Bluetooth-Modul zu haben. Der erste Lieferant hat mir zuerst ein 5V Board geliefert und die Nachlieferung hielt einen Test mit 12V Versorgungsspannung nur 2 Minuten aus. Der Clon vom zweiten Lieferanten verrichtet aber seine Dienste so wie er soll.
Das Ganze zum Testen zusammengesteckt:
elektronik.jpg

...und auf eine Lötrasterplatine umgesteckt:
Platine1.jpg

Links sieht man den Balancer-Anschluß des Akkus für die Einzelzellenüberwachung. Doch dazu die Tage mehr.

Gruß Matthias

P.S.: Vielleicht kann ein Mod bei dem gleichen Thema noch verweisend korrigieren http://www.rc-network.de/forum/showthread.php/523488-ArduSmartPilot-Fernsteuern-mit-Smartphone.
 

kreidler

User
Hier nochmals die Platine. In der Projektbeschreibung wurde erwähnt, dass im Ursprungsprojekt von Bosch SMD-PCBs gefertigt wurden. Damit kann ich leider nicht dienen, sondern nur eine unsaubere Lötrastervariante, die auch im Projekt fliegend verkabelt auf Balsabrett vorhanden ist. Bei mir ein wenig aufgeräumter:D:
Platine1_1.jpg
Platine2.jpg

Mit aufgesetztem Arduino sieht das Ganze dann so aus:
alles.jpg

Mit meinen bescheidenen Kenntnissen ins fritzing gebracht:
SmartPilot_3V3_Steckplatine.png
SmartPilot_3V3_Schaltplan.png
Die rot markierten Stifte werden nicht verwendet, sondern helfen dabei nicht komplett gestückelt die Stiftleiste löten zu müssen. Die Arduino-Pins sind über Kopf eingelötet. Das Bluetooth-Modul ist auch nicht exakt das verwendete HC-05. Der Jumper ist um die Stromversorgung zum BT-Modul zu kappen, wenn der Arduino neu programmiert wird. Ich hatte sonst meist Fehlermeldungen.
Da im Sketch für den Arduino bereits eine Rückübertragung der Akkuspannung auskommentiert eingeplant war, habe ich das Ganze mal aktiviert und einen zweiten Spannungsteiler für die 1. Zelle dazu gebaut. Die Werte sind so berechnet, dass bei 8,4V/4,2V die 3,3V am Signal-Pin anliegen sollten um den vollen Bereich zur Verfügung zu haben. Ich habe dazu Widerstände aus der E96 Reihe (Werte siehe Schaltplan) genommen, die exakt passen sollten. Sonst könnte man Differenzen auch in einem der beiden Programme kompensieren. Effektiv scheinen Abweichungen von ca. 0.05V vorhanden zu sein, wobei dann die Frage ist, ob es vom Multimeter kommt oder Toleranzen oder lastabhängige Abweichungen sind. Für einen Alarm reicht die Genauigkeit aber ohne Probleme.

Vor zwei Wochen hatte ich mal Trockentests mit einem älteren Bluetooth-Modul (wahrscheinlich HC-06) gemacht und konnte mit einem Windows-Smartphone über ein Terminal-Programm lockere 70-80m Reichweite auf freier Fläche erreichen:).

Nächster Teil: Software :D
 

kreidler

User
Software ist zweigeteilt: a) Arduino und b) Processing

Jetzt Arduino:
Hierzu ist im Projekt eine kleine Anleitung hinterlegt. Hier sind die groben Züge anhand auch von kleinen Beispielen erwähnt. Mir persönlich sind der gesamten Dokumentation einfach so viele Fußnoten mit Verweisen enthalten. Da frage ich mich, ob es ein wissenschaftlicher Anspruch ist, oder ob ein Schulkind an das Programmieren herangeführt werden soll. Nichtsdestotrotz können faule Menschen auch den Quellcode fertig runterladen: http://www.tec.reutlingen-university.de/uploads/media/ArduSmartPilot_Arduino_270615_01.zip.
Ausgehend von dem Sketch Motorflug ist meine Version im Anhang entstanden. Glücklicherweise konnte ich noch auf sehr eingeschlafene C-Kenntnisse aus grauer Vorzeit zurückgreifen:).

Veränderungen im Vergleich zu Motorflug:
  • Bereinigung von auskommentierten Teilen
  • Jetzt wird auch Höhe und Seite bei Failsafe mit übertragen
  • Kommawert entfällt bei Rückübertragung, dafür 2s Einzelzellenübertragung
  • Ansteuerung des Reglers über us auf Graupnerwertebasis 1100/1900 entspricht auch 20/160 macht es aber logischer

Programmiertechnisch könnte man durchaus noch das eine oder andere verändern, dabei sollte man aber nicht den ursprünglichen Gedanken von diesem Projekt komplett vergessen.

Gruß Matthias
 

Anhänge

  • MotorflugMGS8910A23.ino.txt
    5,4 KB · Aufrufe: 93

kreidler

User
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:
ArduSmartPilotOriginal.JPG
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:
SmartPilot320.JPG

Sobald im Programmcode nur die Größe 900x540 angegeben wird ändert sich der Schrim auf diese Ansicht:
SmartPilot900.JPG

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.
SmartPilot900frei.JPG

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
 

Anhänge

  • SmartPilot.pde.txt
    12,8 KB · Aufrufe: 87
Zuletzt bearbeitet:

kreidler

User
Heute mal zu dem Teil, welcher am wenigsten mit dem Unterforum zu tun hat: Bau des Modells. Auch hierfür gibt es eine Anleitung auf der Projektseite: http://www.tec.reutlingen-university.de/uploads/media/ArduSmartPilotBauanleitung_180514.pdf. Die Art und Weise hat mir nicht wirklich gefallen und möchte hier nur die Abweichungen zu der Ursprungsanleitung eingehen.

Motorspant.jpg
Warum das Rundholz am Motorspant schräg angeklebt werden soll, habe ich nicht verstanden, da das Loch von dem Stahlgewicht normalerweise groß genug ist, ansonsten ist ein Lötkolben hilfreich.

In die Höhen- und Seitenflosse habe ich zwischen Flosse und Ruder jeweils ein kleines psychologisches Stück Kohlfaser eingeklebt.
kohle hinten.jpg

Als Rudermaterial hatte ein Kollege noch ein Stück 6mm EPP liegen. Perfekt mit Tesa und Uhu Por anscharniert. Richtige Scharniere sind hier doch wohl eher Kanonen.
tesa.jpg

Ich mag diese außenliegenden Elektroniken nicht wirklich. Daher scharfen Cutter angesetzt und die Platine mit dem Arduino in den Passagierbereich.
Innenraum.jpg

Deckel drauf nicht vergessen. Bringt Stabilität. Vorher auch die richtige Software aufspielen. Das weiße EPP an der Tragflächenauflage ist die EWD Korrektur;)
innenraum zu.jpg

Servos nach Anleitung, aber ein schwebender 0,8mm Stahldraht ist nicht meine Welt. 2mm Carbonstab mit jeweils einem kleinen angeschrumpften Stück 1,2mm Stahldraht macht die Anlenkung stabil:
servos.jpg

Vorne noch das Regler-Kabel verstecken und das Bluetooth-Modul ins Cockpit und die Antenne oben rausschauen lassen (mal wieder die Psychologie:D).
vorne.jpg

Den Schwerpunkt auszuwiegen hat mich doch ein wenig schockiert, da der Akku fast ins Heck musste. Die 8x4 GWS HD hatte ich noch liegen. Der Prop ist nach DriveCalc noch ok.
SP auswiegen.jpg

Fertich mit 162g:
fertich.jpg

Die Tage geht es dann ab zum Testen.

Gruß Matthias
 

kreidler

User
Update

Update

Es gibt wohl doch größere Unterschiede zwischen den Bluetooth-'Einheiten'. Ich habe vor ein paar Tagen mit einem älteren Android-Telefon eines Kollegen getestet und die Reichweite war nur noch 20-25m. Da ich nach dem erfolgreichen 70m Test auch noch das Bluetoothmodul gegrillt hatte, ist jetzt ersteinmal Ursachenforschung angesagt. Der Flieger war zudem sehr kippelig oder die Steuerung so gewöhnungsbedürftig, dass zum Einfliegen ein normaler Empfänger eingebaut wird, damit dann mit BT alles passt.
 

kreidler

User
Mal ein kleines Update zu meinem bisherigen Monolog:

Der Flieger hatte am Wochenende seine ersten Flüge hinter sich gebracht, aber mit einer normalen Funke.
Leichte Trimmkorrekturen auf Seite und größere auf Höhe waren erforderlich. Ich muss mal überlegen, wie man diese Möglichkeit einfach in die Steuerung mit einbaut. Höhe ist jetzt nur 60% vom Grundausschlag. Mehr genervt hat die notwendige Tiefenzumischung von ca. 10% bei Vollgas. Wobei Vollgas, wie schon erwartet eher der Kategorie Senkrechtstarter zuzuordnen ist:D. Da muss ich wohl auch noch etwas in die Software einbauen. Ein Ausgleich per Smartphonewinkel ist wohl sehr ambitioniert.
Vom Fliegen her ging sogar ein wenig segeln und nicht Backstein. Loopings wollten nur mit ein wenig Motor.

Sobald die Programmierung fertig ist mehr dazu hier.

Gruß Matthias
 

kreidler

User
Gute Projekte brauchen manchmal Ihre Zeit und werden dann doch nicht beendet. Die Klicks hier gehen langsam hoch, aber es traut sich wohl keiner an dieses Spielzeug ran:confused:?

Nach langem Überlegen und kurzem Programmieren steht die erste Version der Android-Software mit den angedachten Trimmungen und dem Mischer. In diesem Zuge, damit nicht immer hin und her gerechnet werden muss, habe ich die Version jetzt auf us umgestellt. Dazu auch links oben noch die Testeinblendungen.

SmartPilot_last.JPG

Doch noch voll geworden der Schirm. Die Vorgabewerte sind zur Zeit noch hardcodiert und wenn alles funzt kommt noch eine Variante mit Dateiablage. Jetzt noch kurz die Arduino-Programmierung abändern und dann geht es fliegen.

Gruß Matthias
 

jweber

User
Nur damit jetzt mal ein Feedback kommt:
Ich find das Projekt super und habe das vor einiger Zeit außerhalb von RCN zufällig gefunden.
Ein Arduino liegt auch schon da, aber da ich mich damit bisher überhaupt nicht beschäftigt habe, wollte ich erstmal an die Grundlagen.

Aber genau deswegen: Begeisterter Mitleser und bitte berichte weiter.

Jörn
 

kreidler

User
Hi Jörn,
und ich dachte schon die Klicks kamen durch Fehlbedienung zustande:confused:. Das Ganze ist ja auch schon sehr speziell...

Mit dem Fliegen hat es aufgrund der norddeutschen Windverhältnisse noch leider nicht geklappt. Wird bei Gelegenheit nachgeholt. Vielleicht kann ich noch ein Video dazu erstellen.

Die Software für Modell und Android-Gerät sind aber jetzt in der Endstufe. Es fehlt mir höchstens noch eine Möglichkeit die Trimmungen zu den Failsafe-Einstellungen in das Modell zu übertragen. Im Vergleich zum Ursprungsprogramm ist die Android-Geschichte fast schon ausgeufert - Mit der Trimmungsübertragung wäre dann der Punkt erreicht. Ein paar Kleinigkeiten im Vergleich zum letzten Bild habe ich noch aufgehübscht. Anbei meine wohl letzte Versionen der Quellcodes.
Wie gehabt das .txt entfernen. Zusätzlich habe ich noch für das Processing das AndroidManifest.xml dazugepackt, damit keiner vergisst die entsprechenden Einstellungen vorzunehmen: Querformat, Bluetooth und Vibration.

Das Arduino-Proggi im Modell ist ohne Kommentare keine 100 Zeilen. Bei dem Android-Programm würde ich wahrscheinlich ein paar Dinge anders machen, wenn ich von vorne angefangen hätte. So aber, hat sich der Code aus der Ursprungsidee herausentwickelt. Ich habe versucht, alles einigermaßen gut zu kommentieren. Bei Problemen oder für weitere Ideen bin ich natürlich offen.

Die nächste Anwendung fängt auch langsam das Laufen an und ist wahrscheinlich sinnvoller als ein Modellflugzeug zu steuern: Modellschiff mit Sonderfunktionen:

smartCaptain.JPG

Gruß Matthias
 

Anhänge

  • MotorflugMGS8910A23_millis.ino.txt
    5,7 KB · Aufrufe: 103
  • SmartPilot1_0.pde.txt
    18,3 KB · Aufrufe: 93
  • AndroidManifest.xml.txt
    685 Bytes · Aufrufe: 68
Ich finde die Beschreibung wirklich toll, aber eine Frage: was für Sensoren werden im Flieger verwendet.
Ich habe noch nirgends eine Bezeichnung für die Sensoren gefunden alles andere hätte ich für einen Nachbau vorrätig.

Bin weiter gespannt auf die folgenden Berichte

Helmut
 

kreidler

User
Ich finde die Beschreibung wirklich toll, aber eine Frage: was für Sensoren werden im Flieger verwendet.
Ich habe noch nirgends eine Bezeichnung für die Sensoren gefunden alles andere hätte ich für einen Nachbau vorrätig.
Bin weiter gespannt auf die folgenden Berichte
Helmut

Hallo Helmut,
Sensoren im eigentlichen Sinn braucht man ja nicht. Es sind nur die 4 E96-Widerstände für den 2s Lipo anzuschließen, wenn man es sich wünscht. Siehe der fritzing-Schaltplan weiter oben. Ansonsten die Zeilen in beiden Programmen auskommentieren.

Bericht geht gleich weiter.

Gruß Matthias
 

kreidler

User
Gestern ergab sich gegen abend kurzfristig die Möglichkeit zum Testen.
Der letzte Flug endete so:D:
Wasserpumpe.jpg

Die Lacher der Anwesenden hatte ich auf meiner Seite und der Rumpf ist jetzt leider reparaturbedürftig.
Die Versuche davor endeten halt ohne die Pumpe aber fast genauso "kontrolliert".

Probleme:
  1. Bedingt durch die normale Haltung meiner Hände (ich verwende das Samsung Tablet von dem Foto) habe ich automatisch einen kleinen Vorhaltewinkel zwischen 5 und 10 Grad. Bis 5 Grad wird ausgeblendet und danach mit 5 Grad in Servoweg umgerechnet angefangen. Was durchaus ruppig sein kann.
  2. 90° Android-Geräte Winkel für Vollausschlag sind für die Praxis zu viel bzw. nicht wirklich mit den Händen vernünftig zu verwirklichen und die Steuerwege waren mir somit zu klein.
  3. Wenn der Flieger auf dem Boden liegt war in fast jedem Fall der Verbindung weg.

Die Lösung für die ersten beiden Punkte habe ich in das Processing-Programm eingebaut und angehängt. Je nach eigenen Vorlieben kann man die Ausblendung für Seite und Höhe getrennt anpassen sowie den maximalen Steuerwinkel begrenzen. Meine Idee: 45°.

Der dritte Punkt ist zwar nervig aber normal für 2,4GHz Systeme.

Aufgrund der aktuellen Lichtverhältnisse wird das neue Testen wohl nur noch an Wochenenden passieren können. Schaun mer mal wann dazu das Wetter passt. Dann mehr.

Gruß Matthias
 

Anhänge

  • SmartPilot1_01.pde.txt
    20,5 KB · Aufrufe: 125
Ansicht hell / dunkel umschalten
Oben Unten