 Ja, hallo. Vor etwas mehr als einem Jahr habe ich mir mal so einen kleinen Quadrocopter gekauft und habe festgestellt, dass ich nicht wirklich gut bin, da dieses Ding drin zu fliegen. Und so habe ich mir gedacht, na ja, wenn ich es selber schon nicht schaffe, kann man ja vielleicht versuchen, den Computer das Ding fliegen zu lassen. Dummerweise, weil das nur ein ganz billiger 15 Euro beziehungsweise 15 Dollar Quadcop war, hat er keine Computerschnittstelle und so habe ich mir dann Gedanken gemacht, wie man denn eine Computerschnittstelle hinzufügen kann. So, okay. So, dieser Quadrocopter hat wie alle in dieser Preisklasse oder wie eigentlich alle Quadrocoptoren so eine kleine Fernbedienung mit zwei Joysticks und noch ein paar Knöpfen. So, und was die Idee war jetzt eine Schnittstelle zu bauen, die quasi die Bewegung, die ich an der Fernsteuerung mache, aufzuzeichnen und auch wiedergeben zu können und zugleich auch den Status zu visualisieren. Net wäre aber im Moment noch nicht implementiert, auch irgendwann früher oder später noch ein Editor zu programmieren, mit dem man dann auch solche Flugbewegungen quasi from scratch oder auch bestehend aus einem aufgenommenen Bewegung editieren kann. So, wie sieht das Ganze jetzt aus? Also, wir haben zum einen den Quadcop, so wie ich ihn gekauft habe, bestehend aus der Flugeinheit und der Fernbedienung. Zum anderen, die von mir hin zugefügten Erweiterungen bestehend aus einer Signaladapter Platine, einer Signalprozessor Platine und schließlich der eigentlichen Applikation, die auf einem Linux-Rechner läuft. So, ja, so sieht das Ding aus, also wie gesagt hier der kleine Quadrocopter plus die Fernbedienung und man sieht hier schon, ich habe da schon so ein Kabel dran gebastelt mit einem Stecker dran, das werde ich nachher noch ein bisschen genauer zeigen, was ich da gemacht habe. Das Ganze sieht dann so aus, also wir haben jetzt unten links die Fernbedienung, die Fernsteuerung, dann oben links die Signaladapter Platine, die ein bisschen größer als ursprünglich gedacht worden ist, warum erkläre ich später. Dann oben rechts haben wir ein Arduino, der die grundlegende Signalaufbereitung in digitaler Form macht und unten rechts noch ein Raspberry Pi, auf dem dann die eigentliche App läuft. So, die Signalplatine, die wir jetzt gerade eben oben links gesehen haben, die ist selbst gemacht, selbst entworfen und Aufgabe von der ist zum einen eine Signalanpassung, weil die Fernbedienung arbeitet intern mit 3,3 Volt, der Arduino erwartet aber fünf Volt-Signale, zum anderen auch eine Signalverstärkung mit Operationsverstärkern, zum dritten auch eine Signalaufbereitung, um die Signalqualität zu verbessern, indem ich da noch ein paar Filter eingebaut habe. Und schließlich, das war eigentlich der größte Batzen dieser Platine, auch eine Statusanzeige der Fernbedienung mit LEDs. So, die signal, die digitale Signalaufbereitung auf dem Arduino-Bot, was wir eben gesehen haben, da verwende ich ein Arduino Mega, weil der entsprechend viele IO-Leitungen hat, die ich hier dann auch brauchte. Geschrieben ist das wie beim Arduino üblich in C und der Arduino macht die AD-Wandlung, also vom Analogen zum Digitalen, wenn das Signal von der Fernsteuerung Richtung Rechner geht und der umgekehrte Weg, wenn die Daten vom Rechner in Richtung Fernsteuerung gehen, dann die Digital-Analog-Konversion. Dann, wie eben schon erwähnt, Signalfilterung, dann auch Signalzusammenführung und auseinander trennen, warum werden wir nachher noch sehen und auch noch eine Kurzzeitpufferung der Daten, damit der hinten dran gehängte Raspberry Pi quasi nicht in Echtzeit die Daten verarbeiten muss, sondern ein bisschen mehr Zeitpuffer hat. Mit anderen Worten, der Arduino nimmt also quasi die wirklich zeitkritischen Aufgaben und arbeitet auch intern mit Zeitstempeln für die Daten. Dann haben wir als letztes Client hier den Raspberry Pi, auf dem dann eine Java-Application läuft, die nimmt quasi die Daten vom Arduino entgegen und umgekehrt sendet auch wieder Daten zum Arduino über eine serielle Schnittstelle, das heißt, ich kann jetzt mit dieser App tatsächlich Flugbewegung aufzeichnen und auch als Dateipersistent speichern. Ich kann gespeicherte Aufzeichnungen auch wiedergeben und das heißt, einen aufgezeichneten Flug dann auch wieder quasi abspielen. Und schließlich kann ich mir auf dem Bildschirm, weil es eine grafische Swing-Application ist, auch den Status des Displays noch anzeigen, zumindest Teile davon. Und wie schon erwähnt, was noch nett wäre, wäre ein Flugdaten-Editor. Das könnte man sich zum Beispiel vorstellen, so ähnlich wie bei einem Sequencer, so eine Piano-Roll-Ansicht, wo quasi die X-Achse, die Zeitachse ist und auf der Y-Achse sieht man quasi die einzelnen Controls und wie sich deren Status verändert. So, angefangen hat das Ganze zunächst mal, wie komme ich an die Daten überhaupt an die Signale ran? Dazu musste ich die Fernbedienung ein bisschen auseinandernehmen und ein bisschen da ein paar operative Eingriffe vornehmen. Und zunächst habe ich mir mal angeschaut, wie das denn so aussieht. Und angefangen habe ich mit den Joystick-Elementen, die umgesetzt sind als Potentiometer. Also der Joystick hat hier eine X- und Y-Achse. Das heißt, wir haben für die X-Achse ein Potentiometer, für die Y-Achse ein Potentiometer. Und die Spannung intern, wie gesagt, ist 3,3 Volt. Und ich habe dann tatsächlich auch erfunden, wie ich es auch erwartet hatte, dass quasi dort ein Potentiometer vorliegt, angeschlossen an 3,3 Volt und Masse. Und dann wird hier nach Stellung des Potentiometers das Signal abgegriffen. Und das Signal geht normalerweise dann direkt zum Mikrocontroller, der in dem, in der Fernbedienung drin setzt. So, das heißt, ich muss jetzt hier reinkrägen an der Stelle, wo quasi das Signal vom Potentiometer in den Mikrocontroller reingeht. Das heißt, ich schneide hier sozusagen, ich trenne die Leiterplatine an der Stelle auf und führe dann das Signal vom Potentiometer zur Signalanpassungsplatine. Und umgekehrt hole ich dann auch dort wieder ein Rück-Signal ab und führe das dann zum Mikrocontroller. So, wie sieht das dann aus? Also hier sehen wir ein bisschen vergrößert dann im Inneren einen dieser Joysticks. Und wir sehen hier quasi auf der Vorderseite die eine Achse und seitlich, also rechts und links wäre dann die andere Achse. Und wir sehen hier quasi jetzt frontal auf eines dieser beiden Potentiometer drauf. Und man sieht hier auch schon, da habe ich ein Draht angelötet, vorne. Nee, Maus, doch, hier habe ich nur Maus, okay. Also hier ist quasi der Pin, der ursprünglich eingelötet war in die Platine. Das heißt, was ich hier gemacht habe, ist das Potentiometer auszulöten, dann das Beinchen von dem Potentiometer einfach hochzubiegen und an das hochgebogene Beinchen ein Draht anzulöten, den einen Draht. Und dann habe ich ja, nachdem das Beinchen hochgebogen ist, unten ein Loch in der Platine und dort in das Loch habe ich dann von der Unterseite aus quasi den anderen Draht angelötet und habe dann sozusagen zwei Trähte rausgeführt und grätsche dann so da sozusagen rein in das Signal. Hier sieht man noch eine andere Ansicht. Genau, hier sieht man also quasi die X und Y Achse oben der Regler und wie das dann auf die beiden Potentiometer verteilt wird. Das heißt, ich habe hier insgesamt vier Potentiometer für die zwei Joysticks, die ich hier der Art operieren musste. Und so sieht das dann auf der Rückseite der Platine aus. Ja, hier sieht man noch ein paar mehr Trähte, weil, wie gesagt, es gibt ja auch noch Schalter, die hier auch noch dazu kommen. So, was waren die Herausforderungen hierbei? Zum einen das Potentiometer erst mal auszulöten, weil solange man nur einen einzelnen Draht hat auszulöten, ist kein Problem. Aber wenn man so eine Struktur hat mit mehreren Beinchen, die dann rauszukriegen, ohne es kaputt zu machen, ist schon ein bisschen herausfordernd und muss man ein bisschen vorsichtig sein. Gut, dann habe ich das Beinchen hochgebogen, dann wieder neu eingelötet. Ja, genau. So, dann haben wir als nächstes noch die Schaltknöpfe. Da war zunächst die Vorstellung. Klassische Schaltweise wäre auch hier. Man hat wieder seine 3,3 Volt, hat einen Widerstand, hat einen Knopf und der Knopf verbindet quasi den unteren Teil des Widerstands mit Masse und dann greife ich das Signal ab und dann habe ich entweder, wenn die Taste offen ist, habe ich 3,3 Volt dran oder wenn die Taste geschlossen ist, habe ich Masse-Signal dran. Denkt man, wäre die normaler, denkt man, was man erwarten würde. Jetzt habe ich aber, ach so, genau, wenn man diese Erwartung hat, dann wäre quasi der Eingriff folgendermaßen. Hier braucht man nämlich gar nicht mal die Platine aufzuschneiden, sondern hier brauchen wir einfach nur einen zusätzlichen Draht anzulöten. Zum Abgreifen des Signals detektiere ich einfach, welche Spannung da dran hängt und umgekehrt, wenn ich da reingrätschen will, na ja, dann mache ich halt parallel zu dem Schalter, der schon existiert, baue ich hier noch einen Transistor ein, hier unten und wenn der durchschaltet, dann ist das quasi wie parallel zu dem Schalter geschaltet, quasi noch ein weiterer Schalter. Und die Spannungen greife ich hier einfach dann über einen Verstärker ab und messe einfach, was da dran ist. Soweit die Theorie. Dann habe ich aber ein bisschen reingemessen in das Ding und habe festgestellt, hups, da sind keine 3,3 Volt, wie erwartet, sondern irgendwelche komischen anderen Spannungen dran. So, dann habe ich mal die Spannung getrennt und habe einfach mal von den sechs Schaltern, die es gab, immer diesen Abgriff herausgenommen und quasi die Widerstände zwischen diesen sechs Schaltern gemessen und da kam dann folgende Tabelle raus. So, und mein Verdacht war schon, okay, die sind irgendwie hintereinander geschaltet, wahrscheinlich um ein paar Bauteile zu sparen und so stellte sich das dann auch raus, so war es, genau. Nämlich in Wirklichkeit sahen die Schalter so aus, das heißt, man hat hier oben seine 3 Volt und dann kommt hier eine Kaskade von verschiedenen Widerständen, bis man bis zum letzten Schalter und jeder der Schalter quasi verbindet dann einen Teil zur Masse. Jetzt war noch die Frage, wie kriege ich die Widerstände hier raus, weil die Werte kann man leider auf der Platine nicht wirklich entziffern und das geht tatsächlich wieder über die Messung hier. Ich habe einfach jedes Paar mit jedem durchgemessen und dann nehme ich zum Beispiel hier von dem Switch Nummer 6, nehme ich mir den kleinsten Wert, also wenn alle Tasten offen sind und weil nämlich kleinere Werte können eigentlich nur dadurch entstehen, dass zusätzliche Schalter geschlossen werden. Das heißt, ich habe hier meine rund 620 Ohm, das heißt, am Schalter da muss 620 Ohm anliegen, genauso kann ich dann auch mit dem Switch Nummer 5 gehen. Hier muss ich dann gucken, okay, hier habe ich diese Widerstände, der kleinste wäre hier die gemessenen 333, das heißt, hier sitzt ein 330 Ohm Widerstand und so weiter und dann kriege ich auch automatisch dann auch die Verbindung der einzelnen untereinander raus. Mit diesem Wissen war also quasi das Messen, welche Taste gedrückt ist, ergibt sich dann dadurch, dass sich an der Stelle quasi die Spannungmesse, die hier insgesamt anliegt, die sich ergibt durch den gedrückten Taster und umgekehrt für das drückendes Taster, das kann ich aber wieder wie vorhin gehen, das heißt, ich kräte hier wieder parallel rein und schalte die Dinger auf Masse. So, das sieht dann so aus, wieder mit der Verlötung, dass ich hier auch wieder dran gehe mit den Drähtchen. So, dabei muss man auch noch ein bisschen, hopps, dabei muss man auch noch ein bisschen aufpassen, da ist die Antenne und ich möchte möglichst nicht die Signalqualität der Antenne beeinträchtigen, deswegen habe ich mich bemüht, nicht ganz so dicht mit den Drähtchen hier dran zu kommen an die Antenne einerseits, hopps, und andererseits der eine Draht, der leider sehr nah dran geführt werden musste, den habe ich versucht, möglichst, möglichst eben rechten Winkel dran vorbeizuführen, sodass dann die gegenseitige Beeinflussung möglichst gering ist. So, die Umsetzung sieht dann wie folgt aus, eben wie gesagt erwähnt an der einen Stelle greife ich das Signal ab. Achso, nee, Quatsch, ich muss gar nicht mal die Tasten einzeln rausführen, an der Stelle genau, es reicht nämlich aus, indem ich quasi diesen Wert, der hier oben gemessen wird, den auch wieder reinzugeben, das heißt, ich brauche gar nicht für alle Schalter hier einzeln einen Wert rauszuführen, sondern kann hier dann quasi auch mit der Spannung hier direkt draufgehen, die ich dann erzeuge. Und dann sieht das Ganze so aus, ich messe hier die Spannung, stabilisiere die nochmal bzw. mache dann hier auch noch die Spannungswandlung auf die 5 Volt vom Arduino und umgekehrt mit dem Spannungsteiler und einem Spannungsfolger hier nochmal als verstärker auch wieder die Rückwärtswandlung. So, dann, okay, das habe ich im Wesentlichen schon alles gesagt. Okay, auch so, ansonsten habe ich hier jetzt keine weitere Maßnahmen drin, nee, doch das war es, okay, ja, so. Ah, sorry, sorry, Entschuldigung, hier habe ich das falsch erzählt, also der rausgehende Knopf, der wird schon hier dann wieder über ein Transistor realisiert, genau. So, dann habe ich noch die Anzeige auf dem Display, wir haben vorhin diese vielen schönen LEDs gesehen und das hat sich dann als aufwendigste Teil der Platine rausgestellt, weil ich nämlich tatsächlich hier einen ziemlich großen Aufwand für die Vertratung hatte, hat auch viel Platz gekostet, also aus heutiger Sicht würde ich sagen, nee, mache ich kein zweites Mal, sondern warum mich einfach ein fertiges LCD-Display nehmen und einfach den Status anzeigen, dann habe ich deutlich weniger Hardware-Bust-Ligh-Aufwand. Aber naja, gut, ich habe es halt trotzdem gemacht, das heißt, ich baue hier eine Matrix auf, habe dann hier einen Demultiplexer, mit dem ich dann quasi eine Zeile ansteuere und muss dann in dem Moment, wo ich die Zeile ansteuere, hier quasi dann die Daten für diese LED-Matrix dann auch als Datum anlegen und dann leuchten die entsprechenden LEDs auf. Und das muss ich dann iterativ machen, hinreichend schnell, so dass dann der Eindruck eines stehenden Bildes entsteht. So, schließlich habe ich noch die, da ich sowieso das Ding, die Signaladapter-Platine mit der Fernbesteuerung verbunden habe, habe ich das dann gleich auch noch genutzene Spannungsversorgung einzubauen und nehme hier für die 5 Volt vom Arduino und wandte die dann um in 3,3 Volt und brauche dann eben in der Fernbedienung keine Batterie mehr und habe dann auch eine definierte gleichbleibende Spannung. So, hier einen Blick auf diese Signaladapter-Platine, man sieht dann hier auch die LEDs und es sind halt auch einige und wie gesagt, das macht ein Großteil des Vertragungsaufwandes auf, aus hier nochmal von der anderen Seite betrachtet. Also die Balken geben dann auch die Auslenkung der Joysticks an und die einzelnen LEDs quasi den Zustand der einzelnen Knöpfe. Da mag man lachen, das ist meine Art der Vertragung für ein Prototyp. Ich nehme einfach viel Zinn und papp das auf so eine Lochraster-Platine drauf. Ist eigentlich eine Verschwendung von Zinn, aber es funktioniert und es funktioniert witzigerweise auch mit sehr hohen Frequenzen bis in zweistelligen Megahertz-Bereich, was wir hier zwar nicht brauchen, aber ja, also keine Probleme wie in der Fädeltechnik, wo ich dann, wo dann bei maximal 10 Megahertz Schluss ist oder so, also geht eigentlich relativ gut. So, do not try this at home. Also es gibt viele Möglichkeiten den Quadcop kaputt zu machen, das heißt entweder nur einen ganz billigen Quadcop nehmen und mit dem das ausprobieren oder noch am besten auch noch dann folgende Vorsichtsmaßnahmen ergreifen. Die Bauteile sind in der Regel C-Maus-Bauteile, das heißt, man muss aufpassen, dass man keine elektrostatischen Entladung auf die Bauteile loslässt. Das heißt, man sollte sich erden. Man sollte möglichst keine synthetische Kleidung tragen. Idealer Weise, wenn man sowas hat, kann man auch ein antistatisches Hand-Amband tragen. Es gibt sogar ein Autor, habe ich heute im Netz gefunden, der empfiehlt, in dem Falle Barfuß zu arbeiten, damit man halt noch besser geerdet ist, wie auch immer. Dann sollte man auch vermeiden, dass zu viel Wärme beim Löten entsteht, weil durch zu viel Wärmen können die Bauteile auch sehr schnell kaputt gehen, das heißt gegebenenfalls dann zwischendurch aufhören, wieder ein bisschen abkühlen lassen. Und man muss halt auch mit der mechanischen Belastung gerade beim Auslöten der Pottys aufpassen, dass man keine Haaresse in der Platine erzeugt, beziehungsweise irgendwie andere Wackelkontakte dann einbaut. Und die Antenne, wie gesagt, sollte man auch möglichst unverändert lassen, weil sonst die Gefahr besteht, dass man die Signalqualität des Senders und Empfängers beeinträchtigt. So, hier ein kurzer Blick dann auf die App. Die App ist eigentlich ganz einfach und simpel von der Oberfläche gebaut. Es gibt ein Record-Knopf, es gibt ein Play-Knopf, es gibt ein Stop-Knopf. Man kann also quasi eine Flugbewegung aufzeichnen, man kann sie wiedergeben und man kann sie als Datei speichern oder wieder einladen. Editor, wie gesagt, ist noch nicht implementiert, könnte man aber dann irgendwann nochmal nachreichen. So, gleichzeitig gibt es aber auch noch ein Wermutstropfen, nämlich die Genauigkeit des Ganzen, ist noch ein bisschen enttäuschend. Dafür gibt es verschiedene Gründe. Zum einen die AD und DA-Wandlung auf dem Arduino. Die AD-Wandlung ist nicht gerade die schnellste. Zwar haben wir hier wirklich nur langsame Bewegungen, aber auch das kostet immer noch Zeit. Das heißt, so la la geht so. Was aber noch ein größeres Problem ist, dass die DA-Wandlung mit einem PWM, also pulsmodellierten, pulsbreitmodellierten Signal erfolgt. Das heißt, das Signal, was daraus kommt, ist zunächst mal ein Rechtecksignal mit verschiedenen Pulsen, Pulslängen. Das heißt, um da raus ein sauberes Analogs-Signal zu machen, muss ich das erst mal durch ein Tiefpassfilter jagen. Wenn ich es aber durch ein Tiefpassfilter jage, der die schön glatt macht, dann habe ich auch zugleich auch wieder eine Latenz drin und die schnelle Bewegung verschmieren dann halt auch. Also das ist alles sehr grenzwertig. Das heißt, Verbesserung hier wäre vielleicht externe DA und AD-Wandler anzufügen. Dann das Timing. Das ist jetzt Schlamperei von mir in der Programmierung. Im Moment habe ich einen großen Loop auf dem Arduino, der quasi regelmäßig Daten konvertiert, also die Analog-Digitalgewandelten einliest. Zwischen Puffert mit Timestamp versieht beziehungsweise auf Anforderungen dann auch noch an den Raspberry Pi weiter sendet und umgekehrt vom Raspberry Pi Daten entgegen nimmt und wieder drauf sendet. Das Ganze ist im Moment ohne Interrupts gemacht, läuft aber trotzdem noch erstaunlich präzise, weil halt die einzelnen Schritte mehr oder weniger in der Regel gleichen Menge an Zeit kosten. Aber wenn man es noch genauer haben will, würde man das natürlich interrupt gesteuert machen. So, dann der Quadro-Cop da selber hat auch nicht gerade die beste Signalqualität, wie ich dann feststellen musste. Da ist ein ziemlicher Jitter auf vielen Signalen drauf. Hängt natürlich auch damit zusammen, dass ich die rausführe auf den Drehchen. Also da könnte man auch die Drehchen eventuell nochmal eine dickere Stärke geben. Oder man nimmt einfach einen besseren Quadcop, aber wenn man einen besseren Quadcop nimmt, dann hat er vielleicht ohnehin schon ein Computer-Interface. Was man aber noch machen könnte, wäre tatsächlich zwei Kameras installieren im Raum, die einfach die Position des Quadcop quasi tracken und dann die Software so weiter entwickeln, dass die Abweichung von der Sollposition einfach korrigiert, indem dann einfach ein bisschen nach geregelt wird. Aber das ist alles Futurework. So, wenn das Ding schon so unpräzise fliegt, was kann man damit trotzdem noch machen? Na ja gut, ich habe es in der Ausstellung verwendet. Und zwar war das letztes Jahr auf der Und hier in Karlsruhe und da habe ich eine Ausstellung gemacht, wo mit dem Titel Freiflug, wo quasi der Quadro-Cop der Gefangen ist, in einem Stacheldrahtzaun und versucht gerade, Flüge zu werden aus einem Nest quasi herauszufliegen, aber kann nicht, weil er sich an dem Stacheldraht verheddert und wie man schon sieht, er fängt an zu bluten. Da läuft so ein bisschen das Blut runter und da konnte ich aber das Ding so programmieren, dass es ein bisschen in dem Nest gezuckt hat und einfach von sich aus in zufälligen Abständen einfach mal versucht hat, eine kleine Flugbewegung zu machen. Hab also dann doch noch eine sinnvolle Anwendung für die Basslei gefunden. Hier sieht man es noch mal im Detail. Also man sieht schon, der hat sich ein bisschen die Flügel an dem Stacheldraht ein bisschen aufgewetzt und lebt dann auch nicht mehr lange. So, das ganze Projekt habe ich im Quellcode dokumentiert, aufgetan. Kann man also reinschauen, also einschließlich auch der handgemalten Schaltpläne. Layout in dem Sinne gibt es nicht, weil es wie gesagt nur als Prototyp gelötet habe, aber ja, ist wahrscheinlich ohnehin für jeden Quadcop sowieso die Signaladapter Platine wieder ein bisschen anders. Das heißt, man müsste dann eh das individuelle wieder ein bisschen anders gestalten. Jo, das war es im Wesentlichen eigentlich. Wir hätten jetzt theoretisch noch glaube ich fünf Minuten. Ich könnte versuchen vielleicht eine kurze Bewegung zu zeigen oder vielleicht frage ich erstmal, gibt es Fragen? Yes, questions? Questions from the internet? No, then please give a big round of applause for Jürgen. Okay, then I may try to make a very short demonstration. So, hopefully it works. We will see. Moment, just a moment. Ah, okay. So, here if I move the joystick on the remote control, you can see it here on the screen. But you also see, also man sieht auch, dass das ein bisschen wackelt. Also hier haben wir noch ein Jitter drauf. Okay, so basically now it works. So I have recorded a little movement. It should just start a little bit, then move to the left, stop and then move to the right, hopefully. Let's see if it works. Okay, maybe once again. There was a start problem with one of the rotors. So, as I told, es ist nicht sehr präzise, aber im Prinzip kann man schon die Bewegung machen. Hier war jetzt das Problem, dass einer der Rotoren ein bisschen Anlaufproblem hatte und deswegen er erst ins Trudeln kam. Ja, das war es.