Antennen Tracker mit RSSI Peilung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Antennen Tracker mit RSSI Peilung

      Antennen Tracker mit RSSI Peilung

      Im Posteingangsthread bin ich gefragt worden, was ich mit 4 VAS Super Cannon Helix-Antennen und zwei Arduinos anfangen möchte, und habe dann zugesagt, ein HowTo zu meinem Antennentracker Projekt zu schreiben. Hier ist der Anfang. Fertig bin ich noch lange nicht.

      Die Lust auf das Projekt habe ich bekommen, als ich auf Youtube ein sehr informatives Video von Antti Vainik fand, der einen netten kleinen Tracker vorgestellt hat. Dieser Tracker findet das Modell ohne Telemetrie von GPS-Daten, allein mit Hilfe der Signalstärke von zwei Empfangsmodulen.



      Die Idee zum Peilen mit Hilfe der Signalstärke ist an sich nicht neu. Vor langer Zeit hatte ich einen etwas grösseren Peiler zum Verfolgen von Wettersonden im Einsatz, der nach dem gleichen Prinzip funktionierte. Deshalb wusste ich, dass das geht, sofern man nicht direkt über sich fliegt oder eine Nebenkeule der Antenne erwischt.



      Zum Nachführen in der horizontalen Ebene (Pan) braucht es zwei Antennen in leichter V-Stellung. Man dreht die Anlage in Richtung derjenigen Antenne, welche das stärkere Empfangssignal hat, bis die Signale beider Antennen gleich stark sind. Das ist dann der Fall, wenn sich der angepeilte Sender genau in der Winkelhalbierenden zwischen den beiden Antennen befindet. Das funktioniert umso besser und genauer, je stärker die Richtwirkung der Antennen ist. Helix Antennen eignen sich gut, weil sie nur kleine und schwache Nebenkeulen haben. Mit zwei weiteren Antennen kann man die gleiche Peilung auch noch für die vertikale Ebene (Tilt) machen. Das interessiert mich aber nicht, weil ich das senkrecht-über-mir Fliegen für langweilig halte.

      So ein Tracker hat zwei Einsatzbereiche: Für die Racer, welche aus 25 mW ein möglichst gutes Bild herausholen wollen, damit sie die Gates möglichst früh und möglichst klar sehen, und für die Long-Range Fanatiker, damit sie die optimale Antennenausrichtung und damit eine gute Reichweite haben.

      Für einfachere Ansprüche reicht die Konstruktion von Antti Vainik vollkommen aus. Mein Plan ist es, auf einer Servo-angetriebenen Plattform zwei Diversity Empfänger anzubringen. Der eine Empfänger - ein 5.8 GHz Quanum Diversity - steuert die Bewegung der Plattform. Der zweite Empfänger - ein Boscam FR632 48 Channel Diversity - empfängt mit einer weiteren Super Cannon (Gain = 15.5 dBi), welche genau in die Mitte der beiden Messantennen des Quanum zielt und mit einer zusätzlichen SPW Omni Antenne für den Nahbereich. Der Quanum Empfänger hat eine lausige Diversity, aber das ist vorliegend ziemlich egal, weil uns primär das RSSI Signal interessiert und der FR632 hat bekanntermassen eine gute Empfangsempfindlichkeit und eine gute Diversity-Umschaltung. Man kann auch dort das RSSI Signal abgreifen, muss aber die Steuerkomponenten ausserhalb des Gehäuses anordnen, weil innen nicht genügend Platz ist. Grundsätzlich liesse sich so auch Pan & Tilt gleichzeitig realisieren.

      Beide Empfänger liefern ihr Signal an eine EagleEyes Box in der Mitte der Plattform, welche über zwei Eingänge und nochmals über eine Diversity Funktion verfügt, die aber aufgrund einer Analyse der Bildqualität umschaltet und nicht aufgrund der Signalstärke. Am Ende sieht man das beste Bild von 4 Empfängern.




      Zum Aufbau der zusätzlichen Elektronik im Quanum Empfänger: Man verwendet einen Arduino Leonardo Pro Micro mit dem ATmega 32U4 Prozessor. Das hat seine Gründe. Erstens ist er wirklich klein und flach. Zweitens verfügt er über einen USB Anschluss, damit man ihn auch im eingebauten Zustand leicht umprogrammieren kann und drittens hat er einen Hardwaretreiber für das USB, weshalb man softwaremässig feststellen kann, ob er gerade an einem Computer hängt, Damit kann man die Debugging Informationen automatisch ein- und ausschalten. Zudem hat der Pro Micro mehr Speicher als der Nano und SDA/SCL Ausgänge (für ein LCD Display) sowie SCLK/MISO/MOSI.

      Der Quanum Empfänger hängt an einem 3S LiPo, wobei der doofe Klinkenstecker mit einem externen Anschluss via XT60 umgangen wird. Von dort nimmt man die Spannung für einen regulierbaren Step-down Wandler, der auf 7.4V eingestellt wird. Mit den 7.4V wird einerseits der Arduino am RAW Eingang versorgt und anderseits ein HV Servo angetrieben. Der Wandler liefert ohne besondere Kühlung 1A und kurzfristig bis zu 3A, wenn das Servo gerade besonders durstig ist. Mein Servo ist ein Jx Ecoboost CLS6322HV mit Alugehäuse, Coreless Motor und Metallgetriebe. Es liefert eine Stellkraft von 21 kg.cm und ist stark genug, um die ganze Plattform stabil zu tragen. (An sich - und für long range völlig ausreichend - könnte man die Empfangsstation auch mit zwei Diversity Empfängern, 4 Antennen und ganz ohne Tracking aufbauen. Das deckt einen Sektor von 90° bis 100° ab).

      Im Quanum Empfänger wird die zusätzliche Elektronik auf der Rückseite der Platine mit Spiegeltape angeklebt. Für den Zugang zum USB Anschluss des Arduino und zum Stecker für das Servo macht man passende Ausschnitte im Plastikgehäuse. Das sieht dann so aus:



      Unten ist noch ein CATALEX MicroSD Card Adapter eingeklebt, aber noch nicht angeschlossen. Geplant ist, ein Daten-Logging einzurichten, sobald alles andere läuft.

      Das RSSI Signal wird direkt von den beiden Empfangsmoduln abgegriffen. RSSI gibt es am 4-ten Pin von rechts nach links gezählt. Der blaue Draht vom Modul links auf der Rückseite (= rechte Antenne) geht zum Pin A1 des Arduino. Der grüne Draht kommt vom anderen Modul auf der Vorderseite des Empfängers (= linke Antenne) und geht zum Pin A0. Das PWM Signal für das Servo (gelber Draht) kommt vom digital Pin 5 des Arduino.

      Auf dem Bild noch nicht zu sehen, weil erst später angelötet, ist ein Druckschalter (Push Button) zwischen Pin 8 und GND. Damit kann man dem Arduino Signale eingeben. Die Verdrahtung ist relativ einfach und schnell gemacht.

      Zur Firmware:

      Die Programmierung ist eigentlich der Trick an der ganzen Sache. Antti Vainik hat seine Software bei Github publiziert. Das habe ich als Ausgangspunkt genommen. Dann ging die Hackerei los. Zuerst habe ich zur Glättung der Messdaten die ResponsiveAnalogRead Library von Damien Clark hinzugefügt und in den Code eingebunden. Dann bin ich daran, die SIGMOID Funktion zur Steuerung der Korrekturen durch einen echten PID-Controller zu ersetzen. Die Arduino-PID-Library gibt es ebenfalls auf Github von Brett Beauregard. Das läuft noch nicht richtig, ist aber eine Einstellungssache. Neu geschrieben habe ich eine Scan Funktion, die mit dem Push Button aktiviert wird. Der Tracker sucht dann den ganzen 180° Sektor nach dem Sender ab und richtet sich darauf aus. Zudem werden alle Daten in ASCII-Grafik auf der seriellen Konsole der Arduino IDE dargestellt. Das hilft ungemein bei der Einstellung. Ein Beispiel:



      Bei der Position 85° des Servos schneiden sich die Kurven der rechten Antenne (o-Symbol) und der linken Antenne (*-Symbol). Genau dort liegt die Mitte zwischen den beiden Antennen.

      Es existiert ein Versuchsaufbau, mit dem ich rumspielen und meine Ideen testen kann.




      Das Servo steckt in einer Zigarrenschachtel (Partagas, echte Kubaner aus Havanna - alles andere geht nicht) :P Der Empfänger ist provisorisch auf den Servoarm geklebt. Das Erstaunliche an diesem provisorischen Aufbau: Er funktioniert prächtig und sehr präzise. Jetzt mache ich mich langsam an einen mechanisch stabilen Aufbau. Eines der zu lösenden Probleme ist das Servo: es ist zu schnell im Sinne von "es geht nach dem Einschalten mit einer Geschwindigkeit von 0.07 Sekunden pro 60° in die Ausgangsposition". Das mögen die langen Antennen nicht besonders. Dafür muss ich noch eine Lösung finden, wobei das Hauptproblem darin besteht, dass die Software nach dem Boot-up nicht wissen kann, wohin das Servo zeigt.


      Was noch geplant ist: Das von der Empfangsstation gelieferte Bild wird mit einem 2.4 GHz Sender und kleiner Leistung wieder abgestrahlt. Dann kann man im Umkreis von ca. 100 Metern bequem im Schatten sitzen und sich das Bild anschauen, entweder auf einem Bildschirm oder per Kabel mit der Brille. Den Quanum Diversity gibt es auch für 2.4 GHz.


      Alles weitere folgt später. Die Software werde ich gerne veröffentlichen, aber erst, wenn sie gründlich getestet und einigermassen narrensicher ist.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Sehr cool! Hammer Arbeit. :thumbsup:

      Bezüglich der Erkennung, wo der Servo beim starten steht... Bau doch einen Endschalter ein und "null" den Servo immer. Dann weißt du im Code wo er ist und kannst von dort beginnen den Servo zu steuern.

      Ich hab das gleiche mal gemacht, als ich eine automatische Ausrichtung einer Satanlage über GPS gebaut habe. Wenn Du den Code magst, kann ich Dir diesen gerne geben. Aber ich denke das wird für Dich das kleinste Problem einen Endschalter zu integrieren und den Code dazu zu schrieben :D
      YouTube Channel: Leines FPV - Über Follows und Likes freu ich mich natürlich :)


    • Herzlichen Dank an @Jonny_Menkakow und @LeinesFPV für die aufmunternden Worte und die guten Ratschläge.

      Ich denke, dass ich mit einer operationellen Massnahme eine Lösung gefunden habe, um dem Servo Manieren beizubringen. Der Push Button ist jetzt dank der OneButton Library multifunktional. Einmal kurz drücken löst einen Scan zum Kalibrieren und für die Suche nach dem Ziel aus. Ein Doppelklick rebootet den Arduino und einmal lang drücken fährt das Servo in die Grundposition und stellt das Tracking ab. Wenn man letzteres vor dem Ausschalten macht, dann hat das Servo beim nächsten Einschalten bereits die definierte Grundstellung und bewegt sich nur noch softwaregesteuert in kleinen Schritten.

      Dann habe ich etwas wunderbares entdeckt. Der ATmega32U4 Prozessor hat eine interne und per Software anwählbare Referenzspannung von 2.56V für die Analog Eingänge. Damit bekomme ich eine viel bessere Auflösung für das RSSI Signal.

      Noch eine Bemerkung zum geplanten PID Controller. Ich bin mir nicht mehr sicher, ob das wirklich eine gute Idee ist. Die Differenz zwischen dem RSSI der beiden Antennen/Empfangsmodule kann nämlich auf dem Weg zum gesuchten Nullpunkt zu- und wieder abnehmen. Der PID Controller mag so etwas gar nicht, haut dann i unnötig rauf und hat am Ende Mühe mit dem Abbremsen. Kurz gesagt: er erwartet einen klaren Zusammenhang zwischen dem errechneten Steuersignal und der Wirkung. Das fehlt hier, ausser kurz vor dem Nullpunkt. Allenfalls schmeisse ich den PID Controller wieder raus.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Die Firmware für den Tracker ist zwar noch nicht fertig, aber falls sich jemand dafür interessiert oder damit rumspielen möchte - hier ist sie:

      vodoo-tracker-1.2.4.zip

      Den Filenamen habe ich umbenannt, damit keine Verwechslungsgefahr mit dem Original von Antti Vainik besteht. Den Kommentaren im Quellcode kann man entnehmen, welche Libraries installiert werden müssen. Ab jetzt werde ich mich Schritt für Schritt der Hardware widmen. Irgendwann kommen noch weitere Teile mit der Post (zum Bsp. Dreibeinstativ), damit ich dann Feldversuche starten kann.

      Die Tests in der Wohnung sind aus verschiedenen Gründen problematisch. Man hat nicht genug Abstand zum Sender. Mit den langen Helix Antennen ist das Signal an der Sättigungsgrenze des Empfangsmoduls, auch bei einem 25 mW Sender und schwächere habe ich nicht. Zudem hat es Reflexionen ohne Ende und von allen Seiten. Erstaunlicherweise funktioniert der Tracker trotzdem. Spannend wird es vermutlich bei grossen Distanzen (> 10 km, LOL).
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Weil es mir mit dem Servo einfacher erscheint, und so ein Servo genügend Stellkraft hat, um den ganzen beweglichen Aufbau zu tragen. Beim Servo kann ich dank dem Poti direkt eine bestimmte Position anfahren. Beim Stepper Motor bräuchte ich noch einen Encoder für die Position.

      Ich muss allerdings zugeben, dass ich mich mit Steppermotoren auch zu wenig auskenne. Das letzte Mal, dass ich einen verwendet habe, war für die Nachführung eines Teleskops, und das ist sehr lange her. Dort ging es eigentlich nur um eine sehr genau einstellbare Geschwindigkeit. Für die Positionierung des Teleskops konnte man einfach die Kupplung lösen und von Hand schwenken ...
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Mit den Tests bin ich inzwischen etwas weiter gekommen. Weil ich nur wenig Lust auf Feldversuche draussen bei -2°C habe, habe ich einen 30 dB Abschwächer zwischen den Sender und die Sendeantenne geschraubt. Die Sendestärke ist immer noch 25 mW, aber minus die 30 dB des Abschwächers. Das entspricht einem 0.025 mW Sender. Die Distanz beträgt 13 Meter. Der Quanum VRx zeigt noch ein RSSI von 70%, das heisst, ich bin nicht mehr an der Sättigungsgrenze, habe aber immer noch ein starkes Signal.

      Die erste Erkenntnis aus den Scan-Messungen mit dieser Versuchsanordnung ist folgende: Ein Öffnungswinkel von 20° zwischen den beiden Antennen reicht zum sicheren Nachführen aus. Jede Antenne hat bei halber Empfangsstärke einen Empfangswinkel von 26° (HPBW), Das heisst, ich verliere beim Peilen nur etwa 2 dB, weil sich der Sender zwischen den beiden Antennen befindet.

      Weitere interessante Erkenntnis: Wenn ich den Testsender zwei Zimmer weiter weg hinstelle, dann habe ich eine Anzeige von 30% auf dem Quanum und immer noch ein recht gutes Bild, mit Beginn von buntem Flimmern. Unklar ist mir, wie die Prozentwerte des VRx zu interpretieren sind. Das Peilen funktioniert dann nicht mehr, weil kein Sichtkontakt besteht. Der Peiler regelt immer noch, aber er zeigt nicht in die korrekte Richtung, weil er nur noch reflektierte Signale sieht.

      Auf den ersten Blick wäre es naheliegend anzunehmen, dass 30% auf der Anzeige den 30 dB des Abschwächers entsprechen. Das kann aber nicht stimmen, weil die extrapolierte Reichweite ohne Abschwächer und mit einer zusätzlichen Reserve von nochmals 30 dB dann 16 km wäre. Das ist nicht realistisch für 25 mW Sendeleistung. Natürlich käme bei "echter" Distanz noch die atmosphärische Abschwächung hinzu. Insgesamt sieht die Geschichte aber nicht schlecht aus. Eine weitere Reserve von 15 dBm kann man noch aus dem Unify Sender mit den Leistungseinstellungen herauskitzeln. Die "sicheren" 45 dB entsprechen extrapolierten 2.5 km. Hinzu kommt alles, was der Empfänger unterhalb von 70% noch hergibt, minus das, was die Atmosphäre schluckt. Das sollten aber nur ca. 0.05 dB/km sein.

      Echte Prognosen sind somit verfrüht, denn die extrapolierten Reichweiten widersprechen der allgemeinen Lebenserfahrung. Auf YT zeigt User 'mlk' mit der Super Cannon Antenne einen Flug bis zu 30 km, wobei das Bild ab 12 km Störungen hat und bis 25 km einigermassen fliegbar war.
      Ich mag Rechtschreibfehler - besonders in Tattoos.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von vodoo ()

    • Benny schrieb:

      Vielleicht beträgt der Pegel ja nicht genau 0 V wenn kein Signal anliegt.
      Das ist genau so. Der Quanum Empfänger zeigt ohne Antenne und ohne aktiven Sender eine Empfangsstärke von 7% rechts und links etwas weniger, meist 6%.

      Der Arduino misst mit der internen Referanzspannung von 2.56V beim Hintergrundrauschen am rechten Empfangsmodul einen RSSI Wert von 239 (= 0.5975V = 32%) und bei maximalem Empfang einen RSSI Wert von 745 (= 1.8625V = 100%). Ich muss somit herausfinden, bis zu welchem vom Arduino gemessenen RSSI Wert noch ein marginal brauchbares Bild vorhanden ist. Das geht wohl nur im Feldversuch und dann hat man direkt die Reichweite und muss nicht mehr rechnen.

      Es gibt noch einen anderen Grund, weshalb man aus Teilmessungen keine Prognose über die Reichweite machen kann. Es ist nämlich nicht bekannt ist, ob die vom Empfangsmodul gelieferte Spannung als Mass für RSSI sauber logarithmisch oder sonst was ist. Gänzlich unbekannt ist im übrigen, wie der Quanum Empfänger seine Prozentangaben berechnet.

      Spannend ist noch folgender Punkt: Das Tracking funktioniert, solange von jeder der beiden Antennen ein RSSI-Maximum feststellbar ist, das eindeutig über dem Grundrauschen liegt. Es ist gut möglich, dass dann das Bild schon lange weg ist. Der Tracker soll seine aktuelle Position beibehalten, wenn ein korrektes Tracking nicht mehr sichergestellt ist. Das wird noch eine interessante Aufgabe bei der Weiterentwicklung der Firmware.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Benny schrieb:

      Eine die konstant den gesamten Horizont scannt und dann wird geschaut wo das Maximum liegt.
      Die zweite ist für den eigentlichen Empfang und dreht sich dann zum Maximum.
      Hmm, das gibt es schon.



      So etwas habe ich bei der Planung meines Projekts einmal in Betracht gezogen, dann aber wieder verworfen. Dies aus verschiedenen Gründen:

      1. Peilen mit einer Antenne geht im Prinzip nicht, weil keine Information vorliegt, in welche Richtung man korrigieren muss. Man muss deshalb permanent scannen.

      2. Beim Scannen ist die Positionsbestimmung sehr ungenau, wenn man es mit dem Maximum der Empfangskeule macht. Schau Dir das Bild im ersten Beitrag an, wie breit die Maxima sind, und das ist immerhin eine Helix mit 16 Windungen, also schon mit einer recht engen Empfangskeule. Man muss somit die äusseren Flanken der Keule bestimmen und dann die Mitte davon berechnen. Das hat schlimme Konsequenzen. Es bedeutet, dass ich zuerst über einen Bereich von (in meinem Fall) mindestens 30° scannen muss, bevor ich die Position beider Flanken und damit die Mitte berechnen kann. Das braucht Zeit und wäre für Racing nicht wirklich zu gebrauchen. Beim Video von BMSWEB sieht man, dass er 9 Sekunden braucht, um einmal links und wieder rechts zu scannen.

      3. Die Ergebnisse der Messung muss ich an eine zweite Steuerung übermitteln, welche dann die eigentliche Antenne nachführt. Der Hardwareaufwand wird viel grösser.

      4. Das Signal der Messantenne kann ich nicht für das Bild verwenden.

      Demgegenüber ist das Peilen mit zwei Messantennen in V-Form viel präziser (ca. auf 1°) und vor allem viel schneller. Bei der Methode von Antti Vainik wird die Position 20x pro Sekunde bestimmt und sofort nachgeregelt. Das ist mit Scannen nicht möglich.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Alternativ gäbs noch die Variante mit GPS Koordianten über den Telemetrie Downlink oder ähnliches, das haben auch viele recht gut implementiert. Hat aber einen Nachteil: Man muss Telemetrie oder eine andere Möglichkeit haben (Sim Karte?) Daten zu empfangen
      Je weniger du selber machst, desto weniger machst du auch falsch :P

      blackcatframes.racecopter.at/product/sica-5-6/
    • freestylinus schrieb:

      Wozu brauchst du so einen Tracker beim Racen?
      Ich gar nicht, weil ich eh kein Gate treffe. Werde das primär für den Nano Talon verwenden. Und zum auf die Berge rauf zu fliegen und wieder runter. Beim Racen hat es Vorteile, wenn man ein besseres Bild hat und die Tore früher sieht. Nur zum Freestylen geht der Tracker schlecht - es sei denn, man fügt noch eine zweite vertikale Peilung hinzu.

      bind.ing schrieb:

      Alternativ gäbs noch die Variante mit GPS Koordinaten
      Ja, das ist die Lösung bei fast allen kommerziellen Produkten. Das funktioniert meist auch gut. Der grosse Vorteil ist, dass man damit 3D-Peilung hat. Was mir dabei nicht gefällt sind drei Dinge:

      1. Jedes Modell braucht ein GPS und eine Telemetrie für die Koordinaten. Nebst dem GPS braucht es noch einen Encoder. Das funktioniert nicht für meine Sub-250g Kopter und auch nicht für alle anderen, die kein GPS haben - also fast alle.

      2. Die Bodenstation wird viel aufwändiger. Man muss die GPS-Daten aus der Übertragung des RC-Kanals oder aus dem Audiokanal des Videos rausfischen und dann die Peilrichtung rechnen. Die Bodenstation braucht auch ein GPS und einen Kompass, der kalibriert sein muss.

      3. Das taugt nicht wirklich für long range. Crossfire geht schon bald einmal in den langsamen Modus und hat dann keine Telemetrie mehr. Wie lange die Daten über den Videokanal heil ankommen ist eine grosse Unbekannte. Wenn 50% des Bildes nur noch Zufallspixel sind, kann man das noch gut zum Fliegen verwenden, aber die Datenübertragung wird schwierig.

      Bei den Wettersonden hatten wir mit der RSSI-Peilung Reichweiten von bis zu 250 km. Allerdings war die Antenne wesentlich grösser, tonnenschwer und arbeitete mit 403 MHz. Jetzt will ich's halt mal für unsere 5.8G Bildübertragung versuchen. Ich halte Euch auf dem Laufenden.

      Ich will übrigens niemandem davon abraten, einen GPS-basierten 3D-Tracker zu bauen. Das wäre Gegenstand meiner ehrfürchtigsten Hochachtung, aber mir wäre das zu kompliziert.
      Ich mag Rechtschreibfehler - besonders in Tattoos.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von vodoo ()

    • Zurück zum RSSI Tracker.

      Weil ich noch auf etwas Hardware warte, habe ich mich unterdessen um das geplante Logging der Daten auf einer SDCard gekümmert. Dabei kam die Idee auf, dass dafür die aktuelle Zeit ganz nützlich wäre. Die kriegt man üblicherweise von einem Real Time Clock Modul (RTC) wie zum Beispiel dem (spottbilligen) DS3231 von BG. Leider laufen diese billigen RTC Module nicht sonderlich genau und auch nur so lange, wie aus der Knopfzelle Strom kommt.

      Deshalb kam mir die Idee, das Datum und die Zeit von einem GPS zu nehmen. Ein Beitian BS-880 lag gerade noch rum, und das kann man ohnehin nicht zum Fliegen verwenden. Also habe ich TXO mit dem Rx des GPS verbunden und RXI mit dem Tx. Zusätzlich noch GND und VCC. Das ist schnell gemacht.



      Auf dem Bild sieht man noch das unbenutzte RTC Modul DS3231. Dann habe ich die Adafruit_GPS Library installiert und das Beispielprogramm leo_parsing geflasht. Neu booten - und es läuft. Einfach so.



      Trotzdem war die Aktion kein Erfolg. Das GPS braucht für sich allein 44% des Programmspeichers und 41% des SRAM. Vielleicht weiss jemand der Arduino-Experten von einer deutlich sparsameren Library, sonst wird es nichts mit der GPS-Zeit. Ich schreib die Erfahrung trotzdem hier rein. Vermutlich kann das jemand in anderem Zusammenhang gebrauchen.

      Eine letzte Bemerkung noch: Das BS-880 ist nicht bekannt dafür, seine Position sonderlich schnell zu finden, schon gar nicht bei einem Kaltstart. Datum und Zeit kommen aber schon nach wenigen Sekunden. Das wird aus dem erstbesten Satelliten-Signal genommen, ohne dass es dafür einen gültigen Fix bräuchte. Als Uhr taugt ein veraltetes GPS bestens.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Es geht weiter mit dem Tracker - und der nächste Zwischenbericht ist fällig

      Das mit dem GPS hat mir keine Ruhe gelassen, und deshalb habe ich meinen eigenen GPS-Parser geschrieben. Der ist minimalistisch und belegt deswegen auch viel weniger Speicherplatz. Aber er tut, was er soll: holt sich Datum und Uhrzeit aus dem GPS-Signal. Falls jemand damit spielen oder es als Basis für ein weiteres Projekt benutzen will, hier ist der Arduino Sketch:

      vodooGPS-1.0.3.zip

      Dann ging es weiter zu den Versuchen mit dem Abspeichern von Logfiles auf einem SDcard Modul. Dazu habe ich einen fliegenden Aufbau erstellt, damit ich die Entwicklung und die Tests nicht mit den bereits im Quanum eingebauten Teilen machen muss.



      Der SDcard Adapter kommt an den SPI Anschluss auf den Pins 14 (MISO), 16 (MOSI) und 15 (SCLK). Für CS (Chip Select) nimmt man den digitalen Pin 4 des Pro Mini. Das GPS ist an Serial1 Pins 0 und 1. Der Push-Button liegt an Pin 8 und GND. Die Anschlüsse sieht man auf dem nächsten Bild, wo der Servo an Pin 5 fehlt, weil ich den für die weitere Softwareentwicklung nicht gebraucht habe.



      Zuerst habe ich den GPS Code in den Sketch für den Tracker eingebaut. Für den Betrieb des SDcard Moduls habe ich mich nach längerer Suche für die SdFat Library von Bill Greiman entschieden. Das läuft dann mit der oben beschriebenen Verdrahtung, ohne dass man in der Library selbst etwas hacken müsste. Alle SD Libraries sind sehr platzhungrig, was unter anderem daran liegt, dass eine SD Karte in Blöcken von 512 Bytes beschrieben werden muss, was einen entsprechend grossen Buffer erfordert.

      Zur Erinnerung: Der Arduino Pro Micro hat ziemlich genau gleich viel Programmspeicher und RAM wie der Bordcomputer der Apollo Mondlandevehikel. Nur ist der ATmega32U4 sehr viel schneller. Meine Hochachtung vor der Leistung der Programmierer in den '60er Jahren ist während der Arbeit enorm gestiegen.

      Das Ergebnis ist jetzt wie folgt: Der Arduino Pro Micro hat das Datum und die Uhrzeit auf Sekunden genau. Das Datum wird nur zu Anfang bei der Initialisierung abgefragt, weil es sich dann nicht mehr ändert. Wer über Mitternacht UTC, bei uns also zwischen Ein- und Zwei Uhr fliegt, ist selbst schuld. Das Datum bleibt das gleiche wie zu Beginn des Logs. Zur Behandlung solcher Raffinessen war mir schlicht der Speicherplatz zu schade. Der Zeitzähler wird zu Beginn der Aufzeichnung mit der GPS-Zeit synchronisiert und dann in der Folge mit Hilfe der internen Uhr des Arduino weitergezählt. Er kann also gegenüber der effektiven Zeit absolut gesehen um bis zu eine Sekunde falsch sein, aber das ist mir egal, weil es keine praktischen Auswirkungen hat. Intern werden die Tausendstel-Sekunden gezählt. Es gibt für jede Messung einen Zeitstempel im Logfile und jedes Logfile kriegt eine korrekte "Creation time" und bei Beendigung des Logs noch die aktuelle "Modification time".

      Die geschriebenen Logfiles kann man über die USB-Verbindung zum Computer auslesen, damit man die Speicherkarte nicht jedes Mal aus dem Quanum rausnehmen muss. Wer hat schon Lust, ständig einen FPV-Empfänger aufzuschrauben? Auf der 8 GB Speicherkarte ist Platz für 100 Logfiles, wobei das eine Limite meiner Software ist. Die Karte kriegt man nie voll, denn für eine Stunde Flug braucht das Log ca. 2.8 MB.

      Trotz intensiver Sparübungen wurde es am Ende ein knappes Rennen mit dem Speicherplatz auf dem Arduino. An Programmspeicher brauche ich 28134 Bytes von 28672 Bytes (98%) und vom SRAM 2127 Bytes von total 2560 Bytes für die globalen Variablen. Es bleiben somit gerade noch 433 Bytes für den Stack und die lokalen Variablen in den Funktionen. Aber es läuft und für den echten Einsatz wird dann ohne die Debug-Option kompiliert, was noch etwas mehr Platz freilässt.

      Hier ist die Tracker Software in der Version 1.3.4:
      vodooTracker-1.3.4.zip

      Der Code ist ziemlich üppig kommentiert für diejenigen, welche das Projekt nachbauen möchten. In den Bemerkungen zum Code wird auch beschrieben, wo man die benötigten Libraries auf Github findet. Im Konfigurationsteil kann man bestimmen, ob man die Module GPS und/oder Logfile haben möchte. Das Tracken geht auch ohne diese Zusatzfunktionen. Gesteuert wird alles mit dem einzelnen Push-Button, der auf Einzelklick, Doppelklick und langen Klick hört. Wenn dann die Trackerhardware aufgebaut ist, werde ich weitere Tests und den Feinschliff an der Software machen.

      Inzwischen ist auch der Einbau im Quanum VRx vollständig verdrahtet. Das wird etwas eng, aber es geht. Verwendet wurden silikonisolierte Drähte 30 AWG. Nur die Spannungszufuhr und die RSSI Signalleitungen sind 28 AWG.



      Im Gehäuse des Quanum ist auch kaum noch Platz frei, weshalb ich das als definitiv betrachte. Eine UTC Clock hätte übrigens keinen Platz gehabt, weil sie mit der Knopfzelle zu dick ist.

      Letzte Anmerkung: Am Anfang des Threads habe ich über die schlechte Diversity Umschaltung des Quanum geschimpft. Zu Unrecht! Bei hohen Empfangsstärken wird nicht umgeschaltet, weil das Bild dann auch von der schwächeren Antenne noch gut ist. Wie ich inzwischen herausgefunden habe, wird aber bei schwächeren Empfangsstärken, also wenn das Flugmodell weiter weg ist, ganz flott zwischen den beiden Empfängern umgeschaltet, wobei man im Bild nichts davon sieht.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Jetzt bin ich voll ins offene Messer gelaufen -- aber alles schön der Reihe nach.

      Über die Feiertage habe ich ziemlich intensiv an der Software gearbeitet und zum Testen den Sketch unzählige Male auf die Arduinos geflasht. Es sind zwei: einer ist im Gehäuse des Quanum VRx verbaut, der andere (#2) ist ein fliegender Aufbau mit GPS / SDcard Adapter und dient für verschiedene Tests, zum Beispiel, wenn ich einfach an die SDcard rankommen muss.

      Dann hat der Windows7 Heim-PC in unheiliger geheimer Absprache mit dem Arduino im Quanum beschlossen, dass sich kein Sketch mehr uploaden lässt. Ich habe natürlich fast alle gängigen Tricks angewendet, aber nichts half. Compilieren lief sauber durch, aber beim Upload verkündete die Fehlermeldung, dass keine Verbindung zum Port hergestellt werden könne.

      Also habe ich es mit Arduino #2 versucht und siehe da: der blieb mit dem genau gleichen Fehler hängen, obschon auch der zuvor immer tat, was er sollte. Also musste es am PC und seinem crappy Betriebssystem und/oder den Treibern liegen. Das dachte ich jedenfalls. Es folgten die üblichen Flüche und Neuinstallationen von Treibern - ohne Erfolg.

      Eine längere Internet-Suche förderte einiges zutage, aber nichts wirklich hilfreiches. Man kann den Pro Micro 32U4 von aussen per Software booten. Aber das hilft hier wenig, denn zum Upload muss er mit dem IDE verbunden sein. Dann fand ich auf der offiziellen Arduino Seite, dass die Geschichte mit dem Upload offenbar nicht immer zuverlässig funktioniert. Und die angebotene Lösung war:

      www.arduino.cc/en/Guide/ArduinoLeonardoMicro schrieb:

      These differences affect the way you use the physical reset button to perform an upload if the auto-reset isn't working. Press and hold the reset button on the Leonardo or Micro, then hit the upload button in the Arduino software. Only release the reset button after you see the message "Uploading..." appear in the software's status bar. When you do so, the bootloader will start, creating a new virtual (CDC) serial port on the computer. The software will see that port appear and perform the upload using it. Again, this is only necessary if the normal upload process (i.e. just pressing the uploading button) doesn't work.

      In normalem Deutsch: Wenn's nicht geht, dann soll man den Reset-Knopf gedrückt halten, den Upload starten und sobald die Meldung "Uploading" erscheint, den Reset-Knopf wieder loslassen.

      Der Pro Micro 32U4 hat gar keinen Reset Knopf, also ist Löten angesagt. Immerhin ist RST zu den Lötaugen rausgeführt. Was soll ich sagen? Das hat funktioniert. Und das beste daran ist: Seither geht Upload auch wieder normal, ohne Reset. Also gleich den Arduino #2 anhängen, und dieser wollte auch zuerst die Reset Prozedur, bevor er wieder normal wurde. Heisst das, es lag nicht am Windows, sondern am Arduino? Vermutlich an beiden.

      Die Lehre aus dieser Geschichte: Gleich von allem Anfang an den Reset vorsehen und aus dem Quanum-Gehäuse rausführen. Sonst muss man später unnötigerweise aufschrauben und zwischen den zahlreichen bereits verlegten Drähten löten.


      Zu den Funktionstests: Im Inneren eines Gebäudes lässt sich der Tracker nicht sinnvoll testen. Da gibt es zu viele Reflexionen. Mit einem 30 dB Abschwächer am 25 mW Sender geht es aber einigermassen. Ich kann hier teilweise zeigen, wie das dann aussieht:

      Left low RSSI: 366
      Right low RSSI: 343
      Left(*) - Right(o):


      64 469 554 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*----------------o
      65 462 558 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*------------------o
      66 453 562 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*---------------------o
      67 440 566 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*------------------------o
      68 432 570 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*---------------------------o
      69 426 573 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*----------------------------o
      70 426 577 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-----------------------------o
      71 426 579 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-----------------------------o
      72 428 581 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*------------------------------o
      73 448 583 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*--------------------------o
      74 454 584 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-------------------------o
      75 458 585 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-------------------------o
      76 478 587 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*---------------------o
      77 502 588 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*----------------o
      78 515 588 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-------------o
      79 526 587>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-----------o
      80 531 587 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*----------o
      81 540 587 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*--------o
      82 550 586 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*------o
      83 557 585 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*-----o
      84 562 584 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*---o
      85 567 582 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*--o
      86 576 580 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*o
      87 580 578 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o*
      88 583 575>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o*
      89 587 572 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o--*
      90 592 568 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o----*
      91 595 566 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o-----*
      92 598 561 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o------*
      93 601 558 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o--------*
      94 603 555 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o--------*
      95 607 551 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o----------*
      96 609 547 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o-----------*
      97 611 544 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o-------------*
      98 613 543 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o-------------*
      99 614 541 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o-------------*
      100 616 538 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o---------------*


      Cal. fail 1000
      Rmax deg: 78 RSSI: 588
      Lmax deg: 109 RSSI: 624
      Center deg: 88 RSSI: 585
      BW-L: 27 BW-R: 19
      V: 31
      Vbest: 22
      V too wide
      Neutral


      Das Log ist massiv gekürzt, weil mir hier pro Beitrag nur 10'000 Zeichen zur Verfügung stehen, aber das vollständige Log dieses Scans findet Ihr im Anhang. Die erste Zahl ist der Winkel in Grad, ordentlich ausgerichtet mit Leerschlägen links, aber das Forum frisst die Leerschläge weg - sorry. Die zweite Zahl ist das RSSI der linken Antenne und die dritte Zahl das RSSI der rechten Antenne. Die gemessenen Empfangsstärken werden dann nach rechts graphisch dargestellt. Man sieht, dass es Nebenkeulen gibt und sich die Kurven mehrfach überschneiden. Die Aufzeichnung erfolgte mit der Scan Funktion der Firmware und CoolTerm. Die Arduino IDE kann leider keine Datenströme aufzeichnen. Die Empfangskeule der linken Antenne ist viel breiter als die der rechten Antenne, aber das ändert sich je nach Position von Sender und Tracker. Das Tracking funktioniert jedoch trotzdem.

      Cal. fail 1000 bedeutet, dass der Scan resp. die Positionsfindung scheiterte. 1000 ist als Binärzahl zu lesen. Das vierte Bit (von rechts nach links) ist gesetzt, also lag es daran, dass die Breite der Empfangskeule der rechten Antenne (19 Grad gemessen) die in der Konfiguration gesetzte Minimalbreite von 20 Grad nicht erreichte. Solche Feinheiten werden in den Kommentaren der Software erklärt.

      Aktuell bin ich jetzt bei Version 1.4.4 der Tracker Software. Der Programmspeicher ist fast voll, es wird also nichts grossartiges mehr hinzukommen. GPS und das Daten-logging laufen zu meiner Zufriedenheit. Mit Hilfe von CoolTerm können auch Logfiles von der eingebauten SDcard zum PC hochgeladen werden.

      scan-sample.zip
      vodooTracker-1.4.4.zip
      Ich mag Rechtschreibfehler - besonders in Tattoos.