Dieser Artikel passt chronologisch nicht in die Serie über meinen Hexakopter, sondern beschreibt wie das Flight Control mit der MultiWii Software bespielt, eingestellt und mit GPS und Bluetooth Addons erweitert wird. Dies macht man (in Teilen) nachdem die Elektronik auf dem Rahmen angebracht worden ist, als letzten Schritt vor dem Jungfernflug. Ich habe diesen Artikel lediglich so lange zurückgehalten, bis ich alle Komponenten da hatte, in Betrieb nehmen und testen konnte.

Crius AIO Pro Flight Control von oben

Crius AIO Pro Flight Control von oben

Logisch ist es, mit dem Herzstück des Flight Controls zu beginnen, in meinem Fall das Crius AIO Pro, mit seinem ATMega 2560 und den ganzen Sensoren an seiner Seite. Das Board kommt mit irgendwas vorbespielt aus Shenzen in einem Bubblepack, was dort allerdings drauf war, habe ich mir aber gar nicht angesehen.

Klar ist jedenfalls, dass der Arduino Bootloader bereits vorhanden ist, was eine interessante Information ist, wenn man später die Arduino Software konfiguriert.

Crius AIO Pro Flight Control von unten

Crius AIO Pro Flight Control von unten

Das Board hat den FTDI-Controller bereits drauf, sodass man es direkt per µUSBKabel am Rechner (Linux, Windows, Mac) anschließen kann. Unter Windows braucht man vermutlich erst noch nen Treiber, unter Linux (und vermutlich auch OSX) funktioniert das Gerät als serielle Schnittstelle out-of-the-box.

Patchen der Multiwii Software

AIO Pro beim Funktionstest nach dem Flashen

AIO Pro beim Funktionstest nach dem Flashen

Nun die MultiWii Software runterladen, derzeit ist die Version 2.1 die letzte aktuelle und entpacken. Darin befinden sich 2 Ordner: MultiWii_2_1 (die eigentliche MultiWii Software) und MultiWiiConf_2_1 (ein grafisches Java-basiertes GUI-Tool). Nun muss ich 2 Dateien des Quellcodes anpassen, um statt 9 einzelnen Kabeln vom Empfänger mit je einem Signal pro Kabel, das komplette PPM_SUM Signal durch ein Datenkabel übertragen zu können.

[yellow_box]Dieser Hack / Patch seit Multiwii Dev 1232 nicht mehr nötig[/yellow_box]

Hierzu habe ich 2 Software Patches gedifft:

--- ../MultiWii_2_1/def.h 2012-07-15 19:21:38.000000000 +0200
+++ MultiWii_2_1 Hexa1024 ppm_sum def.h 2012-08-03 08:41:58.000000000 +0200
@@ -328,7 +328,14 @@
#define STABLEPIN_ON PORTC |= 1< <6; #define STABLEPIN_OFF PORTC &= ~(1<<6); - #define PPM_PIN_INTERRUPT attachInterrupt(4, rxInt, RISING); //PIN 19, also used for Spektrum satellite option + // #define PPM_PIN_INTERRUPT attachInterrupt(4, rxInt, RISING); //PIN 19, also used for Spektrum satellite option + #if defined(PPM_ON_THROTTLE) + //configure THROTTLE PIN (A8 pin) as input witch pullup and enabled PCINT interrupt + #define PPM_PIN_INTERRUPT DDRK &= ~(1<<0); PORTK |= (1<<0); PCMSK2 |= (1<<0); PCICR |= (1<<2); + #else + #define PPM_PIN_INTERRUPT attachInterrupt(4, rxInt, RISING); //PIN 19, also used for Spektrum satellite option + #endif + #define SPEK_SERIAL_VECT USART1_RX_vect #define SPEK_DATA_REG UDR1 //RX PIN assignment inside the port //for PORTK

--- ../MultiWii_2_1/RX.ino 2012-07-15 19:21:38.000000000 +0200
+++ MultiWii_2_1 Hexa1024 ppm_sum RX.ino 2012-08-03 08:38:48.000000000 +0200
@@ -216,6 +216,11 @@
ISR(INT6_vect){rxInt();}
#endif

+// PPM_SUM at THROTTLE PIN on MEGA boards
+#if defined(PPM_ON_THROTTLE) && defined(MEGA) && defined(SERIAL_SUM_PPM)
+ ISR(PCINT2_vect) { if(PINK & (1< <0)) rxInt(); } +#endif + // Read PPM SUM RX Data #if defined(SERIAL_SUM_PPM) void rxInt() {

Diese können wie folgt eingespielt werden (im Multiwii_2_1 Ordner):

$ patch def.h def.h.patch 
$ patch RX.ino RX.ino.patch

Der Quellcode ist nun für das Dekodieren vom PPM_SUM Signal auf einem Pin vorbereitet.

Anschluß der GPS und Bloothooth Empfänger

Hexacopter FlightControl mit GPS und Bluetooth

Hexacopter FlightControl mit GPS und Bluetooth

Zum Fliegen wird das GPS zwar nicht benötigt, ist für Komfortfeatures, wie 'Position halten' oder 'Komm zurück nach Hause' gerade für blutige Fluganfänger wie mich dennoch sehr praktisch und vllt. auch später noch von Nutzen, falls der Kopter die Position, Höhe und Ausrichtung halten kann, während ich gerade die angehängte Kamera für ein Foto einstelle - das muss er allerdings in der Zukunft erst noch unter Beweis stellen.

Ich habe mich bewusst gegen das via I2C kommunizierende Crius GPS Board entschieden und stattdessen ein einfaches serielles gekauft, weil das Crius Teil teurer ist als die ganze FC, der Warenwert dann die 150€ überstiegen hätte und ich zusätzlich zu EUSt auch noch Zollgebühren hätte bezahlen müssen. Die Funktionalität ist ohnehin die Gleiche.

[red_box]Blöderweise versorgt das Board VCC an den seriellen Ausgängen nur dann mit +5V Spannung, wenn es via "Extend Power in" mit Strom versorgt wird, bezieht es den Strom über die Motorregler, gibts die 5V Strom nur am I2C Stecker"[/red_box]

Bluetooth Serial Adapter

Bluetooth Serial Adapter

Der Einfachheit halber, habe ich das Bluetooth Modul sowie das GPS beide über die Spannung am I2C Konnektor versorgt. Das GPS habe ich an Serial 1 (TX1/RX1) angeschlossen (und inter Config entsprechend eingestellt). Die Datenleitungen des Bluetooth Moduls kommen an die TX/RX Leitungen der FTDI Buchse. Dabei sollte man natürlich darauf achten, dass was am Bluetooth Adapter mit TX gekennzeichnet ist, mit RX am FC verbunden wird und umgekehrt. Dann funktioniert das Ganze auch direkt beim ersten und nicht erst beim 2. Versuch.

Flashen der Multiwii Software auf den Hexakopter

[red_box]Nun muss die Config-Datei an den eigenen Kopter und die verwendete Hardware angepasst werden sowie Voreinstellungen bei Bedarf geändert werden![/red_box]

Arduino: bereits zum Hochladen der Software

Arduino: bereit zum Hochladen der Software

Meine Hexakopter-Config (zum spicken): Hexa_AIOPRO_C_1024_GPS

Sind diese Vorbereitungen getroffen, kann der MultiWii_2_1 Sketch in die Arduino Software geladen werden. Unter Tools -> Board -> 'Arduino MEGA 2560 or MEGA ADK' auswählen, dann kann der Sketch kompiliert / getestet und anschließend hochgeladen werden. Danach sollte das Flight Control automatisch neu starten und betriebsbereit sein.

Konfiguration der Steuereingangssignale (AUX)

Startet man nun die MultiWiiConf GUI Software, sollte man sich über USB zum Flight Control verbinden können und sollte eine Visualisierung der von den Sensoren gelieferten Daten, die ein- und ausgehenden Steuersignale von der Fernbedienung und für die Motoren sehen können.

MultiWiiConf - Das Konfigurationstool

MultiWiiConf - Das Konfigurationstool

Funktioniert das soweit, kann man die Kanalbelegung einstellen. Die Buttons L / M / H bedeuten niedrige, mittlere, hohe Signale und besagen, bei welchen Eingabewerten auf dem entsprechenden Kanal die angegebene Kopterfunktion aktiviert wird. So ist es möglich, aus den verbleibenden 4 Kanälen des FrSky Funksystems mehr als 4 Funktionen am Hexakopter zu steuern. Nachdem die Anpassungen an der AUX-Konfiguration in der Multiwii-Software erfolgt ist, muss natürlich die Fernsteuerung auch so programmiert werden, dass sie die entsprechenden Signallevel beim Umlegen der zugewiesenen Schalter ausgibt. In der er9x Software ist das Stichwort "Mixer" zu finden in den modellspezifischen Einstellungen. Hier kann man solche Sachen konfigurieren, allerdings erschließt sich die Bedienung nicht direkt, weshalb ich erstmal das Handbuch zur Recherche empfehle, da mein Blog-Eintrag zur Turnigy 9X Fernbedienung auch noch nicht geschrieben ist.