DiY Antennentracker <60&#8364;

QuadMax

Erfahrener Benutzer
#1
Hallo alle Zusammen,

als Schüler stecke ich noch mitten in den Osterferien und hab genug Zeit für solche Ideen ;)

Also von Anfang an: Neulich habe ich auf banggood ein gps modul für 10 Euro gefunden, nämlich das hier.
Im Moment habe ich Spass daran gefunden mit dem Arduino rumzuspielen und da ich mit nem Kumpel schon jahrelang mit Websprachen programmiere war die Idee da: Ich will ein Antennentracker und zwar DiY.
Da ich ganz am Anfang stehe und auch noch nicht weiß was ich alles brauche kann es natürlich sein das der Tracker teurer wird, aber mir zumindest geht es darum so was selbst zu machen. Das Ziel ist es dann den Tracker mit dem Diversity zu verbinden. Aber das ist Zukunftsmusik und dann bleibt man natürlich nicht unter den 30 Euro.
Aber für den reinen Tracker sollte das machbar sein.

Nun zu der Idee:
Auf dem Modell sitzt das Gps zusammen mit nem Arduino und sendet via Audiokanal das Signal zum Boden, dort empfängt ein weiterer Arduino das Signal und steuert die Servos an.

Softwaretechnisch ist das ganze kein Problem.
Allerdings bin ich auf der Hardwareseite nicht so fit (hab gleich mal vier von den Arduinos bestellt, falls mir einer abraucht :D ).
Elektronikkentnisse sind aber vorhanden und neben mir steht auch ein Oszi (doppelt so alt wie ich :D ).

Villeicht findet sich ja der ein oder andere der auch davon begeistert ist und kann helfen so einen Tracker zu entwerfen. :eek:
In einer Woche fängt der Stress nämlich wieder an und dann habe ich nur noch am Wochende Zeit fürs Hobby.

Ps:
Die 30 Euro sind natürlich nicht vom Himmel gefallen:
Gps: 10,98€
Arduino: 2x 2,90€
-----------------
16,69€ mit Versand (ist kostenlos).
Dann braucht man sicherlich noch ein paar Bauteile wie zb Klinkenbuchse für Audio, ein Magnetfeldsensor, etc.
Fänd ich richtig cool wenn daraus eine Open Source Ground Station entstehen würde ;).
 

Helium

Erfahrener Benutzer
#3
Hi,

hab ich schon mal 'rumprobiert' dran. Am Ende bin ich davon abgekommen und nutze ein 433MHz modul zum senden des GPS signals. Der Arduino wertet das Signal aus und setzt die Servos. Fertig :)
Relativ einfache Geschichte. Bin heute mit dem Tracker 520 m geflogen ( ... ja mit 25 mW) und keinerlei Stoerungen. Da geht bestimmt noch was.

Aber 30 Euro ? Das ist sportlich fuer einen guten Tracker . Viel Erfolg !
 

QuadMax

Erfahrener Benutzer
#4
Kann ein Arduino den Audio Ausgeben und auswerten, dachte dafür gibt es ein Extra Bauteil
Audio ausgeben kann er auf jeden fall.
Mein gedanke war der: Der Sender verändert an sich ja nichts am audio, daher kann ich ihn einfach zwischen die beiden Arduinos schalten.

Welche Probleme gab es den Helium, wäre nett wenn du die kurz schildern könntest.
ein 433mhz Modul hatte ich zu allererst auch im Sinn aber ich wüde es gerne so leicht wie nur möglich bekommen.
 

Nimrod

Erfahrener Benutzer
#6
Der Butcher ausm Forum hatte da mal ein ähnliches Projekt und ich weiß das dieses immer noch kurz vor der vollendung steht wenn nur ein bisschen mehr zeit übrig wäre. hierbei bleibt es zwar nicht unter 30€ aber das system bietet einige erweiterungsöglichkeiten. er nutzt ein selbst gebautes GraupnerGPS, welches die daten über den Telemetriekanal zur FUnke sendet, wo diese von einem arduino ausgewertet und über BT an einen weiteren Arduino gesendet werden, welcher widerung die zwei servos ansteuert. der downlink zum boden steht schon und auch die Übertragung der GPS daten zum Tracker ist schon realisiert. hier fehlt nur noch die Devodierung der Graupner eigenen GPS Daten (wenn ich alles richtig verstanden habe )sowie zwei servos für den Tracker. vielleicht kann dir Butcher also ein paar tipps geben wenn du mal nicht weiter weißt
 

QuadMax

Erfahrener Benutzer
#7
Danke für eure schnellen Antworten ;)

Jetzt heißt es aber erstmal warten bis das gps und die zwei arduinos ankommen, für den Preis kann man nur gewinnen(wenn es auch nur die Erfahrung ist, das es nicht geht).

In der Zwischenzeit überlege ich mir schonmal ein wenig den code für die Ausrichtung und lese mich mal tiefer in die Sendematerie ein.
 

Helium

Erfahrener Benutzer
#8
Audio ausgeben kann er auf jeden fall.
Mein gedanke war der: Der Sender verändert an sich ja nichts am audio, daher kann ich ihn einfach zwischen die beiden Arduinos schalten.

Welche Probleme gab es den Helium, wäre nett wenn du die kurz schildern könntest.
ein 433mhz Modul hatte ich zu allererst auch im Sinn aber ich wüde es gerne so leicht wie nur möglich bekommen.
Entschuldige bitte die spaete Antwort.

Das Problem mit Audio ist wie schon angesprochen die Dekodierung. Es gibt verschiedene Libs mit denen man bis 4800 Baud ( ...wenn ich micht nicht taeusche) uebertragen kann. 4800 ist allerdings nicht sehr viel, und kann je nach Protokoll auch schon mal zu wenig sein.
-aber lass dich nicht entmutigen, versuch macht kluch ;)

Ich verwende das Hobbyking 433MHz FPV telemetry kit . Den Empfaenger habe ich zu meinen gunsten umgebastelt. Die Serielle Schnittstelle des Empfaengers geht zuerst auf einen Logik-konverter ( 3.3V -> 5V) und dann auf den Ardu. Funktioniert einwandfrei. Das Sende-Modul habe ich mit einem Servokabel versehen. Dadurch wird es direkt vom Bord oder Empfaenger versorgt und ist mobil Nutzbar. Nur die Mechanik die ich gebastelt habe laesst zu wuenschen uebrig. Ich denke da muss ich nochmal etwas Zeit invenstieren. :)
 

QuadMax

Erfahrener Benutzer
#9
So, das Päckchen ist zwar noch nicht da aber ich habe schonmal ein bisschen am code rumgebastelt.
Theoretisch müsste der code stimmen um die Antenne auszurichten, theoretisch... ;).
Fehlt "nur" noch das einlesen der Daten vom Audiokanal, also das wesentliche.
Hier habe ich aber leider noch keine wirklichen Fortschritte erzielt, da ich noch am rumprobieren bin, wie die Daten überhaupt verschickt werden.
Auch ist noch ein Kompass nicht implementiert. Dass könnte man aber sogar noch leicht umgehen, indem man die Trackingstation nach Norden ausrichtet. (Soll natürlich nicht das Ziel sein)

Zum auslesen vom Gps benutzte ich im Moment die TinyGps++ Library. Den code vom Arduino auf dem Modell habe ich auch schon teilweise geschrieben, aber der ist noch zu minderwertig um hier zu veröffentlichen.

Hier Versuch 0.0.1 vom Code des groundarduinos:
Code:
//-----------------------------------------------------------------------------------------------
//
//Discussion (German) http://fpv-community.de/showthread.php?45966-DiY-Antennentracker-lt-30%80
//This code is Open Source
//
//Thanks to fpv-community.de
//-----------------------------------------------------------------------------------------------

/*
customize 
*/

//servo pins:
const int panpin = 4;
const int tiltpin = 5;

//pin for setting ground station position
const int buttonPin = 6;

//led for showing status
const int checkled = 7;
const int errorled = 8;


/*
normaly you shouldn´t touch what´s under this line 
----------------------------------------------------------------------------------------------*/

#include <Servo.h>
Servo panservo;
Servo tiltservo;

int groundposlong, groundposlat, groundposalt;
int airposlong, airposlat, airposalt;
int pangrad, tiltgrad;


int buttonState = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  pinMode(checkled, OUTPUT);
  pinMode(errorled, OUTPUT);
  panservo.attach(panpin);
  tiltservo.attach(tiltpin);
}

void loop()
{
  buttonState = digitalRead(buttonPin);
  digitalWrite(errorled, HIGH);
  
  if (buttonState == HIGH) {        
    groundposlong = airposlong;
    groundposlat = airposlat;
    groundposalt = airposalt;
    
    digitalWrite(errorled, LOW);
    digitalWrite(checkled, HIGH);  
  }
  
  //Bestimmen der Grad zum drehen
  pangrad = atan((groundposlat-airposlat)/(groundposlong-airposlong));
  tiltgrad = atan((airposalt-groundposalt)/(sqrt((groundposlat-airposlat)*(groundposlat-airposlat)+(groundposlong-airposlong)*(groundposlong-airposlong))));
 
  // Winkelkorrektion
  //gegen den uhrzeigersinn negative winkel, mit, positiv 
  if ((airposlat < groundposlat) && (airposlong < groundposlong)) 
  {
    pangrad = (pangrad + 90);
  }
  if ((airposlat > groundposlat) && (airposlong < groundposlong)) 
  {
    pangrad = 90 - (pangrad *(-1));
  }
  if ((airposlat > groundposlat) && (airposlong > groundposlong)) 
  {
    pangrad = (90 - pangrad) *(-1);
  }
  if ((airposlat < groundposlat) && (airposlong > groundposlong)) 
  {
    pangrad = (pangrad*(-1) + 90)*(-1);
  }
  
  //servos ansteuern
  panservo.write(pangrad);
  tiltservo.write(tiltgrad);
  delay(15);
}
Danke für jede Kritik & Hilfe ;)
 

Helium

Erfahrener Benutzer
#10
Hi,

ich hab es mir etwas einfacher gemacht. Meine Antenne wird nach Norden gerichtet (0grad). Damit kannstd du die CourseTo funktion nutzen ( 10 grad entspricht dann 10 servo grad :) ).
Der nachteil liegt allerdings auf der hand. Ich benuzte 180 Grad Servos und die Mechanik macht noetigen Falls einen vertikalen Schwenk, somit spare ich mir 360 Grad servos und kann trotzdem 360 Grad tracken. Beim schwenk geht allerdings ca 1 Sek. das bild weg ( klar, die antenne ist kurz aus dem ziel).

Weisst du was ich meine ? Ich mach mal ein Video sobald der verdammte regen hier aufhoert.
:(
 

QuadMax

Erfahrener Benutzer
#11
Ne, ich weiß gerade nicht was du meinst ;).
Das mit dem Servo kann man relativ leicht umgehen. Ich habe immer den Poti ausgetauscht und die mechanische Sperre enfernt.

Wegen der Übertragung bin ich immer noch am Rätseln.
Villeicht würde es gehen die Positionen in Binärcode umzuwandeln und dann zu senden?
Bis zur Zahl 999.999.999 bräuchte ich 30 Nullen und Einsen und das für drei Positionen. Dann könnte ich bei einem Intervall von 1ms in einer Sekunde 10 mal die Position übermitteln. In wie fern das überhaupt realisierbar ist, muss ich noch testen.
Wie groß darf denn die Amplitute(?) maximal für den Sender sein? Größer würde ja beim Mikrofon lauter bedeuten, oder?

Hier Version 0.0.2, sie enthält eine Anpassung für die Servos, falls man den Tracker nicht direkt "drangeflanscht" hat.
Code:
//-----------------------------------------------------------------------------------------------
//
//Discussion (German) http://fpv-community.de/showthread.php?45966-DiY-Antennentracker-lt-30%80
//This code is Open Source
//
//Thanks to fpv-community.de
//-----------------------------------------------------------------------------------------------

/*
customize 
*/

//servo pins:
const int panpin = 4;
const int tiltpin = 5;

//pin for setting ground station position
const int buttonPin = 6;

//led for showing status
const int checkled = 7;
const int errorled = 8;

//factor for pan and tilt; factor of 0.5 means the tracker will turn only half way, leaf this at 1 if your servos are connectet directly
const int panfactor = 1;
const int tiltfactor = 1;


/*
normally you shouldn´t touch what´s under this line 
----------------------------------------------------------------------------------------------*/

#include <Servo.h>
Servo panservo;
Servo tiltservo;

int groundposlong, groundposlat, groundposalt;
int airposlong, airposlat, airposalt;
int pangrad, tiltgrad;


int buttonState = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  pinMode(checkled, OUTPUT);
  pinMode(errorled, OUTPUT);
  panservo.attach(panpin);
  tiltservo.attach(tiltpin);
}

void loop()
{
  buttonState = digitalRead(buttonPin);
  digitalWrite(errorled, HIGH);
  
  if (buttonState == HIGH) {        
    groundposlong = airposlong;
    groundposlat = airposlat;
    groundposalt = airposalt;
    
    digitalWrite(errorled, LOW);
    digitalWrite(checkled, HIGH);  
  }
  
  //Bestimmen der Grad zum drehen
  pangrad = atan((groundposlat-airposlat)/(groundposlong-airposlong));
  tiltgrad = atan((airposalt-groundposalt)/(sqrt((groundposlat-airposlat)*(groundposlat-airposlat)+(groundposlong-airposlong)*(groundposlong-airposlong))));
 
  // Winkelkorrektion
  //gegen den uhrzeigersinn negative winkel, mit, positiv 
  if ((airposlat < groundposlat) && (airposlong < groundposlong)) 
  {
    pangrad = (pangrad + 90);
  }
  if ((airposlat > groundposlat) && (airposlong < groundposlong)) 
  {
    pangrad = 90 - (pangrad *(-1));
  }
  if ((airposlat > groundposlat) && (airposlong > groundposlong)) 
  {
    pangrad = (90 - pangrad) *(-1);
  }
  if ((airposlat < groundposlat) && (airposlong > groundposlong)) 
  {
    pangrad = (pangrad*(-1) + 90)*(-1);
  }
  
  //servos ansteuern
  panservo.write(pangrad * panfactor);
  tiltservo.write(tiltgrad * tiltfactor);
  delay(15);
}
Grüße QuadMax

Die gps Koordinaten sind natürlich nicht vom typ int, das ist ein Relikt aus Tests.
Ups wenn der pan und tiltfaktor nur ints sind, dann ist die Korrektur aber nicht so genau... ;)
 
Zuletzt bearbeitet:

JayPi01

Neuer Benutzer
#12
Letzte Woche ist mein Tracker fertig geworden. Benutze auch zwei Arduinos und greife das GPS Signal von mein Storm OSD ab. Zur Datenübertragung hatte ich am Anfang den 'Sende'arduino mit dem Audiokanal des Videosenders verbunden. Dazu gibt es hier: http://www.rcgroups.com/forums/showthread.php?t=1651310 einen Thread der das gut beschreibt. Leider war die Datenübertragung nicht sehr stabil und es kam vor das sich der 'Empfangs'arduino aufgehaengt hat. Vor kurzem hab ich dann die Sende- und Empfangsseite mit diesem Baustein http://www.aeroquadstore.com/FPV_Modem_p/mdm-001.htm aufgeruestet. Das Ergebnis ist bis jetzt sehr vielversprechend. Leider sind die Modembausteine nicht ganz billig - man kann sich aber auch die ICs einzeln besorgen und die Schaltung drumherum frei verdrahten.
Hier: http://www.rcgroups.com/forums/showthread.php?t=1651310&page=44 kann man meinen Tracker anschauen. Bitte keinen Kommentar zur Verkabelung ;)

Joerg
 
Zuletzt bearbeitet:
#14
Das oben verlinkte Modem verwendet den schon lange nicht mehr produzierten Tcm3105. Gibt es teilweise fuer 5euro das Stueck bei grossen Online Auktionshaeusern. Bei Bedarf kann ich gerne den Schaltplan einstellen!

Ich hatte mir auch schon mal Gedanken bezueglich eines Trackers gemacht. Erst hatte ich ueberlegt die reinen lat/lon Koordinaten zu uebertragen.
Kodiert man die lat/lon als float waeren das insgesamt 8bytes fuer beide Koordinaten.

Hinzu kaeme eventuell noch ein Framing um Uebetragunsfehler festzustellen wie eine CRC Summe und eventuell ein Start byte.

Vorteil waere das bei einem Ausfall man die letzte Position wuesste.
Da ich aber einen Rekorder verwende koennte ich mir das auch aus der letzten OSD Aufzeichnung raussuchen.

Also bin ich die Sache mal anders angegangen. Wenn das Flugzeug die Position der Bodenstation kennt, kann es die Position zu dieser in Grad Winkel umrechnen.

Das wuerde man ja sonst am Boden machen um die Servos zu verstellen.

Unter 0° Hoehe fliege ich nicht, die Bodenstation stuende sonst auf einem Berg oder der Flieger ist laengst in den Boden eingeschlagen.

Das heisst man braeuchte fuer die Hoehe 0-180° und einmal 0-360° fuer die Position zur Bodenstation.
Mehr brauche ich ja auch nicht um die beiden Servos fuer die Antenne zu verstellen und max 180 und 360 kann man sehr gut in drei bytes packen.
Gehen wir mal von 1200baud aus. Mit Start und Stop byte bleiben dann 120 Zeichen die Sekunde ueber...
Ich finde die Loesung mit dem TCM3105 sehr interessant, probiere aber im Moment das Ganze mit der Softmodem library zum Laufen zu bekommen.
 

QuadMax

Erfahrener Benutzer
#15
Herzlich Willkommen in der Community ;)


Villeicht baue ich den Tracker als Endlostracker:
[video=youtube;_J7Uj16oEhI]http://www.youtube.com/watch?v=_J7Uj16oEhI&feature=youtu.be[/video]

Da muss ich aber dann noch mal den track algorythmus überdenken :D und ja die beiden Arme sind ein wenig desyncronisiert.

Sag Bescheid wenn du die Übertragung hinbekommen hast, da bin ich im Moment am verzweifeln.

Am liebsten würde ich die Koordinaten runterschicken, um beim Signalverlust die letzte bekannte Position anzuzeigen.
 

QuadMax

Erfahrener Benutzer
#16
So, nachdem ich den Abend vorm Zeichnprogramm gesessen habe möchte ich euch das Ergebnis nicht vorenthalten.
Mich hat der Endlostracker total fasziniert.

Vorteile:
- endloses tracken möglich (Das Antennenkabel wird höchstens um 90° gebogen)
- kein Umbau von Servos notwendig, Standart 180° Servos werden benutzt

Nachteile:
- es können nur Antennen genutzt werden bei denen es nicht passieren kann das die Polarisierung?? senkrecht zueinander steht, also keine Patchantennen, nur Helixe

Wenn noch jemand Lust hat zu helfen meldet euch bitte, egal ob Programmierer oder CAD´ler ;).
Im Moment habe ich leider nicht so die Zeit um mich in dem Maße das Projekt zu kümmern, wie ich das gerne würde.
 

Anhänge

QuadMax

Erfahrener Benutzer
#17
Das oben verlinkte Modem verwendet den schon lange nicht mehr produzierten Tcm3105. Gibt es teilweise fuer 5euro das Stueck bei grossen Online Auktionshaeusern. Bei Bedarf kann ich gerne den Schaltplan einstellen!

...
Ich finde die Loesung mit dem TCM3105 sehr interessant, probiere aber im Moment das Ganze mit der Softmodem library zum Laufen zu bekommen.
Wenn du den Schaltplan einstellen könntest wäre ich dir sehr dankbar, daran bin ich gerade am scheitern. Hier fehlen mir einfach zu viele Hintergrundinforamtionen.
Ich schaue mir gerade die Lösung mit dem IC an.
Wenn du deinen Tracker mit der Softmodem Lib zum laufen gebracht hast, kannst du sie ja mal Posten. Die Realisierung würde mich mal interessieren.

Ich glaube ich lass mal von nem Mod die Beschreibung in <60€ ändern, das ist realistischer. Besonders weil ich gerne noch ein Display hätte und enventuell dann doch qualitativ hochwertige Servos ;).

Was sagt ihr zum Design, könnte das klappen, oder glaubt ihr das es nicht funktionieren wird?
Ich hätte nie gedacht das es so hart wird auf der Hardwareebene zu programmieren.
 

JayPi01

Neuer Benutzer
#18
Dein Design finde ich sehr interessant. Wenn man den Videoempfaenger am oberen Teil anbringt wird das Antennenkabel nicht belastet. Dafuer muss man dann die Stromversorgung und das Videosignal nach unten fuehren. Wenn man dafuer flexible Kabel nimmt und die Kabel nah oder durch den Drehpunkt fuehrt sollte das kein Problem sein. Werde mal ein Modell aus Lego bauen und schauen ob es funktioniert.
 

QuadMax

Erfahrener Benutzer
#19
Danke an den Mod ;)

Hier habe ich mal eine Beta Variante des Trackers. Noch ist kein Akkufach vorhanden und mit den Drehachsen bin ich noch nicht so zufrieden. Aber schauts euch selbst an (ist eine Sketchup Datei) ;).
 

Anhänge

Helium

Erfahrener Benutzer
#20
Moin Quadmax,

.... genau das hab ich im Post der vorrigen Seite gesagt.
180 Grad, dann ueberschlag. Allerdings ist meine Mechanik wesentlich wackliger als deine :)
Ich benutze 2 x L und der Empfaenger ist an allem auch noch befestigt.

Um rechnerei zu sparen richte ich meine Station bei 0 Grad servo ausschlag nach Norden aus.
Der Tracker wartet bis er das erste GPS signal vom Quad bekommt und verbucht das als seine Heimat Position.
Ist das Objekt weiter als 10m vom der Heimatposition entfernt faengt er an zu tracken.
wieso 10m ? die GPS genauigkeit betraegt 3m, um unnoetige heftige ausschlaege zu vermeiden trackt er nur ab 10m.

Der Winkel zum Objekt wird mit ATAN berechnet. Die entfernung von der TinyGPS++ lib, der Kurs ebenfalls.

Dabei ist der kurs immer : Heimposition -> objektposition = kurs = servo winkel.
Also Kurs = 90 Grad zur Heimatpos entspricht 90 Grad servo.
Werden nun 180 Grad ueberschritten setzt der Vertikale Servo um 180 Grad um. Dabei geht wir bereits erwaehnt das Signal um ca eine Sekunde verloren (oder vllt etwa weniger).

Um mit Kabel und Muehe zu sparen benuzt ich 433 Mhz. Dabei habe ich ein Modul gebaut was ich nur an den Controller oder Empfaenger anschliessen muss und daher unabhaengig von jeglichen Sendern oder FCs ist.

Ich stelle spaeter mein ein Bild ein. Heute mittag ist ein Flug geplant, ich werde mal versuchen ein Video zu machen.

Sorry, mein deutsch hat glauche ich etwas gelitten hier im Ausland :( ... ich hab mir Muehe gegeben ;) lass mich Wissen wenn ich mich nicht klar ausgedrueckt habe.

Gruss
Andi

p.s. Ich finde deine Mechanik super ! Wie bewegt du die Horizontale Platte ?
 
FPV1

Banggood

Oben Unten