Samstag, 1. Februar 2020

Guter Schüler


Das ist ein vorwiegend technischer Artikel über die Programmierung des Tello.
Wer sich nur für das fliegen und fotografieren/filmen mit Quadrocoptern interessiert, findet die relevanten Artikel hier

Statt des Controllers der für Kinderhände gebaut ist hätte ich auch meinen guten, alten 35MHz Sender zerlegen und umbauen können. Auch er hat Potentiometer die man anzapfen könnte, und in seinem Gehäuse hätte ich den Arduino locker untergebracht.

Mein guter, alter 35MHz Sender
Aber ich habe es nicht übers Herz gebracht den Sender kaputt zu machen, auch wenn wir aus guten Gründen nicht mehr mit 35MHz fliegen. Wie viele Abstürze gehen auf das Konto der Funkstörungen! Heute fliegen wir mit 2,4GHz und die Funkstörungen sind Geschichte.

Der Sender hat eine Lehrer-Schüler-Buchse, praktischerweise ein 2,5mm Klinkenstecker den man leicht bekommt. Sie ist dazu gedacht, zwei Sender miteinander zu verbinden. Der Schüler-Sender schickt seine Knüppelstellungen über das Kabel an den Lehrer-Sender. Der Lehrer kann über einen Schalter entscheiden ob sein Sender das Signal des Schülers an das Modell schickt oder die Daten des Lehrer-Senders. Ich verwende meinen Sender als Schüler-Sender und den PC als "Lehrer-Sender".

Das Signal das bei der Schüler-Buchse heraus kommt lässt sich auslesen und verarbeiten.

8-Kanal PPM-Signal

Das PPM (Puls-Pause-Modulation) Format kodiert die Information in Pulsen, deren Dauer von der Knüppelstellung der jeweiligen Kanäle abhängt. Wie man im obigen Oszillogramm sieht, handelt es sich um einen 8-Kanal-Sender. Wenn ich die Knüppel bewege verschieben sich die Pulse.



Ich habe mir schon überlegt wie man ein Programm realisieren könnte das diese Zeitdauern misst. Relativ kompliziert, mit Interrupts. Aber ich bin doch sicher nicht der erste der das versucht und habe Tante Gugl gefragt. Sie hat mir zwei nützliche Informationen gegeben.
  1. Arduino stellt einen Befehl "pulseIn" zur Verfügung der Pulslängen misst 
  2. Jemand hat schon ein Arduino-Programm geschrieben das genau das macht
Dieses Programm nehme ich als Basis um mein eigenes Programm daraus zu entwickeln. Werte umrechnen, ins richtige Format bringen und an der seriellen Schnittstelle ausgeben. Fertig. Na ja, ganz so einfach wie ich es mir vorgestellt habe war es dann doch nicht.

Man könnte jeden Arduino dazu verwenden, aber ich bin zufällig auf eine besondere Ausführung gestoßen: Beetle BadUSB. Ein Arduino auf einer winzigen Platine die sich direkt in USB-Buchse des Computers stecken lässt.

Zusätzlich handelt es sich um einen 32U4-Prozessor mit dem man die Maus- und Keyboard-Bibliotheken des Arduino verwenden kann. Für meinen konkreten Anwendungsfall brauche ich dieses Feature nicht, weil ich auf der PC-Seite auf die (simulierte) serielle Schnittstelle zugreifen kann. Aber mit Maus- und/oder Keyboard-Simulation kann man jedes beliebige Programm steuern, z.B. Spiele.

Ob du es glaubst oder nicht,
das ist ein Arduino!
Naturgemäß ist die Anzahl der IO-Pins auf dieser Platine eingeschränkt, es stehen nur je 3 digitale und analoge Ein/Ausgänge zur Verfügung. Mit meiner angedachten Interrupt-Lösung hätte ich keine Chance weil es leider keine interrupt-fähigen Eingänge sind, aber für die (blockierende) pulsIn-Funktion kann man jeden Eingang verwenden.


Ein bisschen Schrumpfschlauch und fertig.
Ich habe damals noch einen zusätzlichen Schalter in den Sender eingebaut. Diesen verwende ich jetzt um den Befehl zum Landen zu geben. Außerdem baue ich mein Programm so dass es den Befehl zum Landen schickt wenn das PPM_Signal ausfällt. Sender ausschalten und Tello landet. Sender wieder einschalten und Tello ist startklar.

Und dann der erste Probeflug mit der neuem Konfiguration. Der "richtige" Sender vermittelt ein ganz anderes Gefühl als die als die kleinen Spielkonsolen und erlaubt eine wesentlich feinfühligere Steuerung. Trimmung, Expo und einstellbare Rückholfedern stehen zur Verfügung. Das steigert das Flugvergnügen noch einmal!

Wie immer gibt es mein Programm als open-source auf GitHub, siehe hier

Projekt abgeschlossen. Abgehakt? Dann kennst du mich schlecht. Die nächsten Ideen geistern schon in meinem Kopf herum. Den Sender mit nach draußen nehmen, aber den Laptop auf der Parkbank platzieren? Oder auf dem Schoß (dazu ist er ja gedacht)? Nicht so gut. Wie wäre es mit einem kompakteren Rechner? Da gibt es doch den Raspberry Pi. Das Python-Programm auf dem Raspberry zum Laufen bringen und den Raspberry an den Sender montieren. Und noch ein paar Schieber, Schalter, Taster in den Sender einbauen. Und den Raspberry mit dem Handy verbinden,.....

Oder einen Arduino NanoESP ins Gehäuse des Sender einbauen und direkt, ohne zusätzlichen Rechner, mit dem Tello kommunizieren.

Hier wird es bald wieder etwas neues zu lesen geben.


Keine Kommentare: