Nanocopter
Mit minimalen Bauteilen in die Luft
Einen Quadrocopter kennen vielleicht viele von euch, aber kennt ihr auch einen Nano-Quadrocopter, der nur aus einer einzigen Platine und aus vier Motoren besteht? Wahrscheinlich eher nicht :) Die Idee ist nicht ganz neu und auch nicht meine eigene, trotzdem ist dieser Quadrocopter eine Selbstentwicklung von mir. Der Schaltplan, das Layout, die Lötarbeit und letztendlich die Software; eben alles was dazugehört.
Mein Ziel war es mit möglichst geringem Aufwand und mit sehr wenigen Bauteilen einen Low-Budget Quadrocopter zu bauen, der seinen großen Brüdern in nichts nachsteht. Im Verlauf des Projekts stellte es sich dann allerdings heraus, dass ich mich mit den Ausgaben ein bisschen verschätzt hatte. Es summierte sich im Laufe der Entwicklung schon so einiges auf, was auch daran lag, dass ich mir für dieses Projekt einen Programmier- und Debug-Adapter kaufen musste um eine Möglichkeit zu haben schnell und effizient Fehler im Programmcode zu finden.
Das teuerste Bauteil ist der 4x4mm große Beschleunigungs- und Gyrosensor mit 25€, dementsprechend groß war die Anspannung, als ich die 24 haarfeinen Lötpins des QFN-Gehäuses verlötet habe.
Mit meinem Quadrocopter-Projekt habe ich im Juni 2012 angefangen, als ich ein paar spektakuläre Videos von diversen Quadrocoptern auf Youtube gesehen habe. Hier zum Beispiel ein kleines Video von Nanocoptern, die die Titelmelodie zu James Bond spielen:
Ab da ging es mit dem Projekt langsam aber stetig voran. Ich schaute mich bei ebay nach einem geeigneten RC-Sender und Empfänger um und machte die ersten Entwürfe für die Schaltung. Währenddessen erkundigte ich mich in unterschiedlichen Foren oder bei verschiedenen Webseiten über schon bestehende Quadrocopter-Projekte.
RC-Line Forum
Pi's Website
Shrediquette
Harald Sattler
Dumm nur, dass mir kein Projekt, bei dem sowohl Software als auch Hardware frei zugänglich war, so richtig auf Anhieb gefiel. Und Projekte, die ich richtig cool fand und bei denen mir auch das Layout und die Einfachheit des Quadros gefielen, waren leider kommerziell, weshalb der Schaltplan und das Platinenlayout nicht für jedermann verfügbar waren. Also musste der Eigenbau her.
Ich entschied mich für einen 32MHz ATxMega-Prozessor und den Beschleunigungssensor MPU6050 von Invensense, der zwar nicht ganz billig war, aber sehr gute Ergebnisse liefert. Normalerweise wird dieser Beschleunigungs- und Gyrosensor in Smartphones oder Navigationssystemen eingebaut.
Die Eckdaten des Nanocopters im Überblick:
- ATxMega32A4U, 32MHz (er kann alles was das Mikrokontrollerherz begehrt ;))
- MPU6050, 2000 deg/sec Samplingrate
- 340mAh Lion Akku, damit erwartete Flugdauer von etwa 8min
- 4 Miniatur Bürstenmotoren aus Ersatzteilen von einem kommerziellen Nanocopter (Walkera Lady Bird)
Nach vielen, vielen Arbeitsstunden am Computer stellte ich den Schaltplan und das Layout fertig.
Die Firma Seeedstudio stellte die PCB Platinen innerhalb eines Monats her, weshalb ich viel Zeit hatte in Ruhe die benötigten Bauteile bei Digikey zu bestellen. Als mir nach etlichen Anlaufschwierigkeiten endlich die Bauteile geschickt wurden, konnte ich den Nanocopter nach meinen Fertigungsplänen zusammenlöten.
Das Ergebnis sieht denke ich ganz passabel aus:
Achtet auf den unglaublich kleinen (4x4mm) Sensor in der Mitte der Platine (kleines schwarzes Quadrat). Es war gar nicht so einfach seine winzigen Pins zu verlöten.
Als nächstes wurden die ersten Versuche gestartet für dieses Ding eine Software zu schreiben. Eine I2C Kommunikation zwischen Mikrocontroller und IMU (Beschleunigungs- und Gyrosensor MPU6050) musste aufgebaut, die Motoren über PWM angesteuert und eine PID Regelschleife programmiert werden. Alles nicht so einfach, wie ich mir das am Anfang vorgestellt hatte, aber das folgende Video zeigt, dass mein Projekt doch sehr vielversprechend ist:
In den nächsten Tagen muss ich noch den Empfänger auf den Nanocopter montieren und das Programm für den Empfang der Empfängerdaten erweitern. Wenn alles gut geht, dürfte der Nanocopter in wenigen Wochen flugbereit sein :) (Aber ich kenne diesen Satz langsam von mir, und aus den Wochen werden Monate…)
Die Software und alle anderen Projektunterlagen sind hier zu finden.
18. April 2013: Update
Endlich! Die Software womit ich auf die Daten meines Nanocopters zugreifen kann funktioniert!
Es war ein langer Weg bis zu dieser Software, vor allem weil ich mich bisher nicht mit Cocoa und Objective-C auskannte. Wie im Video zu sehen ist, werden die Winkel der Nick- und Rollachse auf einem Graph ausgegeben. Die Videoqualität ist zwar nicht so gut, aber ich glaube man erkennt so einigermaßen, was die Software macht. Geplant ist in nächster Zeit die Software für weitere wichtige Daten zu erweitern. Schlussendlich möchte ich mit der Software die PID-Reglerwerte für meinen Quadrocopter genau einstellen können.
31. Januar 2014: Der Nano-Quadrocopter geht in die zweite Runde
Nach langer Wartezeit gibt es jetzt endlich mal wieder ein paar Updates und sogar erste Codeschnippsel. Ich muss leidvoll gestehen, dass ich nur sehr langsam an diesem Projekt weiterkomme, aber was mittlerweile daraus geworden ist, seht ihr hier.
Tja, eine Diplomarbeit zu schreiben benötigt viel Zeit und Aufmerksamkeit. Deshalb geht es mit meinen anderen Projekten nur sehr langsam voran. Aber ich habe vor einigen Wochen Verstärkung bekommen! Ja, das glaubt man kaum, aber ich arbeite mittlerweile mit Harald Sattler zusammen, der selbst an einem Quadrocopter-Projekt bastelt. Durch ihn hat mein Projekt neuen Schub bekommen, weshalb ich euch meine Fortschritte zeigen möchte. Harald arbeitet mit einem ähnlichen Setup. Er verwendet ebenfalls einen XMega32 Prozessor, seine Schaltung ist größtenteils identisch (bis auf Pinbelegung) zu meiner Schaltung, deshalb bietet es sich an, an einem gemeinsamen Code zu schreiben. Doch alles Schritt für Schritt.
Zuerst einmal etwas zur Benutzeroberfläche, mit der man meinen Quadrocopter einstellen und wichtige Daten sichtbar machen lassen kann. Die Benutzeroberfläche wurde für Mac OS X in Cocoa - eine spezielle Programmiersprache für die Oberflächen von Mac OS X - von mir geschrieben. Der Quadrocopter kommuniziert mit diesem Programm über eine serielle Schnittstelle, beispielsweise über einen USB-To-Seriell-Adapter oder über einen Arduino. Auf Befehl des Programms sendet der Quadrocopter entweder die aktuellen Winkel- oder bestimmte Debugwerte und trägt sie in einem Diagramm gegen die Zeitachse ab. Damit ist eine sehr gute Datenkontrolle möglich und man sieht ganz genau, was auf dem Quadrocopter gerade so passiert.
Die Oberfläche ist an sich selbsterklärend. Es gibt einen Bereich wo die vom Quadrocopter empfangene Daten abgetragen werden und einen Bereich wo man neue Daten eintragen kann, um sie an den Quadrocopter zu schicken. Diese Daten können zum Beispiel bestimmte Konfigurationswerte für die PID-Regelschleife sein. Außerdem lassen sich über die Benutzeroberfläche die Motoren starten oder ausschalten, falls das aus irgendwelchen Gründen nötig sein sollte.
Den Code der Benutzeroberfläche habe ich hier veröffentlicht. Natürlich ist er mit Vorsicht zu genießen. Es ist noch nicht die endgültige Version und im Laufe der Entwicklung kann sich vielleicht noch einiges ändern. Zum Beispiel das Format des Datenstromes möchte ich bei Gelegenheit noch anpassen. Bis jetzt werden einzelne Datensätze als Ascii-Werte, die mit Kommas oder Strichpunkt voneinander getrennt sind, an die serielle Schnittstelle geschickt und vom Programm als String eingelesen. Ein Algorithmus trennt die einzelnen Datensätze voneinander und konvertiert sie wieder in Integer oder Double Werte. Das ist nicht sehr elegant und kann bestimmt irgendwie optimiert werden. Aber das hat denke ich noch Zeit. Zuerst sind andere Sachen wichtiger. Wen die Hintergründe genauer interessieren, sollte den Code herunterladen und darin stöbern. Die Routinen, die die Kommunikation zur serielle Schnittstelle bereitstellen, sind von einem anderen Projekt (ORSSerialPort) kopiert.
Zu meinem Quadrocopter selber kann ich euch schon einmal diesen Code als Vorabversion präsentieren: xNQ_QDC. Wie gesagt, ist dieser Code in Zusammenarbeit mit Harald Sattler entstanden und eine Portierung der Multi-Wii-Firmware. Durch die Adaptierung an den XMega Prozessor geht einiges an Funktionalität der Multi-Wii-Firmware verloren, aber das meiste wird für meinen (und auch für Haralds) Quadrocopter nicht benötigt. Falls ihr beabsichtigt diesen Code zu verwenden denkt daran, dass womöglich einige Port Zuordnungen oder Timer an euer Projekt angepasst werden müssen. Noch ein Hinweis: Die Codeteile für meinen Quadrocopter (können mit #define QDCMK ausgewählt werden) funktionieren noch nicht alle. Die Codeteile von Haralds Quadrocopter (#define xNQ) funktionieren allerdings schon sehr gut, er konnte mit diese Code schon fliegen. Außerdem ist diese Firmware Version nicht mit der oben beschriebenen graphischen Benutzeroberfläche für Mac OS X kompatibel, sondern mit der GUI der Multi-Wii-Software, die hier zu finden ist.
25. September 2014: Update
Das ganze Projekt ist seit neuestem auch auf meiner Github-Seite zu finden: QDC_MK1_Quadrocopter
Es wurden in den letzten Tagen einige Änderungen am bestehenden Code vorgenommen, z.B. wurde der unverständliche PID-Algorithmus der MultiWii-Firmware durch einen eigenen Algorithmus ausgetauscht. Obwohl nun Fließkomma-Berechnungen vom Mikrokontroller durchgeführt werden müssen, ändert sich die Geschwindigkeit der PID-Schleife nicht. Im Gegenteil, die Schleifenfrequenz beträgt nun satte 800Hz! Desweiteren werden die Winkel anders berechnet und die Filterung der Daten geschieht nun durch einen Kalman Filter. Insgesamt ist der Code nun (hoffentlich) besser verständlich und klarer strukturiert als der ursprüngliche MultiWii-Code. Die ersten Flugversuche fallen ebenfalls sehr positiv aus.
5. Oktober 2014: Jungfernflug
Nach mehr als zwei Jahren und unzähligen Stunden am PC zur Programmierung der Software ist es nun endlich soweit. Der kleine Quadrocopter, der nur aus einer Platine und aus vier Motoren besteht, fliegt! Die PID-Regelung zur Stabilisierung kann noch verbessert werden, aber das kleine Flugmodell ist jetzt schon flugfähig und mit ein bisschen Geschick gut steuerbar.
Hier der Erstflug: