Diversity & Antennentracking < 100€

Status
Nicht offen für weitere Antworten.

BlueMahib

Erfahrener Benutzer
Ich habe mir mal deinen Code angeschaut und folgenden Code auf den Arduino geladen:

-------------------------------------------------------------------------------------------------------------------------------------
#include <Servo.h>
#define analogPin0 0 //RSSI Wert von Empfänger 1 an Eingang 0
#define analogPin1 1 //RSSI Wert von Empfänger 2 an Eingang 1
#define analogPin2 2 //RSSI Wert von Empfänger 3 an Eingang 2
#define analogPin3 3 //RSSI Wert von Empfänger 4 an Eingang 3

Servo Servohorizontal; //Servo für horizontales Schwenken wird deklariert
Servo Servovertikal; //Servo für vertikales Schwenken wird deklariert
int analogWert1; //RSSI Wert 1
int analogWert2; //RSSI Wert 2
int analogWert3; //RSSI Wert 3
int analogWert4; //RSSI Wert 4
int Oben_high=0;
int Oben_low=0;
int Unten_high=0;
int Unten_low=0;
int Rechts_high=0;
int Rechts_low=0;
int Links_high=0;
int Links_low=0;
int calibrated=0;

int mittelPosition = 93; //Servo horizontal (modifiziert sollte hier stehen bleiben)
int mittelPosition2 = 90; //Servo vertikal (unmodifiziert, steht hier in der Mitte)

void calibrate ()
{


for ( int x = 1 ; x<10; x++)
{
delay(1000);
}
Oben_low = analogRead(analogWert3);
Unten_low = analogRead(analogWert4);
delay (300);

Rechts_low = analogRead(analogWert1);
Links_low = analogRead(analogWert2);

for ( int x = 1 ; x<20; x++)
{
delay(1000);
}

//----------------------------------------------------------
Oben_high = analogRead(analogWert3);
Unten_high = analogRead(analogWert4);
Rechts_high = analogRead(analogWert1);
Links_high = analogRead(analogWert2);
calibrated = 1;
}











int Horizontal ()
{
int Antenne1= analogRead (analogWert1);
int Antenne2= analogRead (analogWert2);

int prozent1 = map(Antenne1,Rechts_low,Rechts_high,1,100);
int prozent2 = map(Antenne2,Links_low,Links_high,1,100);

int Berechnung1 = prozent1-prozent2;
return Berechnung1;
}

int Vertikal ()
{
int Antenne3= analogRead (analogWert3);
int Antenne4= analogRead (analogWert4);

int prozent3 = map(Antenne3,Oben_low,Oben_high,1,100);
int prozent4 = map(Antenne4,Unten_low,Unten_high,1,100);

int Berechnung2= prozent3-prozent4;
return Berechnung2;
}




void setup ()
{
Servohorizontal.attach(9); //Servo 1 wird an Pin 9 angeschlossen
Servovertikal.attach(10); //Servo 2 wird an Pin 10 angeschlossen

}




void loop ()
{
if ( calibrated != 1)
{
calibrate();
}
else
{






int dHori= Horizontal();
Servohorizontal.write(mittelPosition+dHori);

int dVert= Vertikal();
Servovertikal.write(mittelPosition2+dVert);

delay (100);
}





}

---------------------------------------------------------------------------------------------------------------------------------------

Der Tracker bildet nun min und max-Werte (10 Sekunden bzw. 30), doch dann macht er nichts mehr.
Er sucht nicht mehr. Ich glaube, ich habe etwas falsch übernommen im Programmcode. Ich habe das Gefühl, dass er die Map-Funktion nicht richtig ausführt.

Werde noch mal deinen Code als Referenz anschauen, falls das auch nichts hilft, werde ich mal mit Serial.print die Werte auf das Laptop übertragen.

Danke für deine Hilfe!

Gruß
Tim
 
Zuletzt bearbeitet:

Helium

Erfahrener Benutzer
Hi,

ehm ... du ziehst eine prozent zahl von der anderen ab und bewegst mit der differenz den Servo ? Hab ich das richig gelesen ?

Hast du ein Bild mit Beschreibung deiner Station ( also wo welche antenne ist ) ? Der Code kann so nicht funktionieren ;) Die map funktion scheint ok zu sein.
Lass mich mal ueberlegen .....

- antennen calibrieren ist ok

soweit ich das sehe ist deine auswertung nicht richtig. sollte eher so sein dass die antenne sich immer in Richtung der hoechsten Prozent zahl bewegt oder ?

Gruesse
Andi
 

BlueMahib

Erfahrener Benutzer
Das mit der Differenz ist richtig so....


Der Ablauf war so gedacht, dass:
RSSI links>rechts ---> tracke nach links
RSSI links<rechts ---> tracke nach rechts
RSSI oben>unten --->tracke nach oben
RSSI oben<unten --->tracke nach unten
 

BlueMahib

Erfahrener Benutzer
Ich nutze vier Antennen anstatt zwei oder in deiner zweiten Version drei. Im Prinzip ist es aber das selbe.
Es berechnet die Position über die Differenzbildung der Antennen-RSSI-Werte.

Den Code habe ich halt selber geschrieben, da ich ja ein Servo umgebaut habe, damit es als DC-Motor horizontal drehen kann.
 

Helium

Erfahrener Benutzer
fehler 2 gefunden :


void calibrate ()
{


for ( int x = 1 ; x<10; x++)
{
delay(1000);
}
int Oben_low = analogRead(analogWert3);
int Unten_low = analogRead(analogWert4);
delay (300);

int Rechts_low = analogRead(analogWert1);
int Links_low = analogRead(analogWert2);

for ( int x = 1 ; x<20; x++)
{
delay(1000);
}

//----------------------------------------------------------
int Oben_high = analogRead(analogWert3);
int Unten_high = analogRead(analogWert4);
int Rechts_high = analogRead(analogWert1);
int Links_high = analogRead(analogWert2);
int calibrated = 1;
}



- mit " int calibrated = 1" initierst du die variable calibrated nur fuer das scope der calibrate () routine.

Mach das "int" wech, dann gehts :D
du hast ja schon weiter obend die variable initiert. Ich wuerde sie noch auf int calibrated = 0 setzen ( am prog anfang ).

Gruessle
Andi
 

BlueMahib

Erfahrener Benutzer
Ja, das ist es. Deshalb hat sich der Tracker in einer Endlosschleife befunden und immer wieder die calibrate Funktion aufgerufen. Werde es mal umändern und dann noch einmal testen.
 

Jörn

Erfahrener Benutzer
Heute habe ich den Tracker (3 * Helix, 1 * SPW) zum ersten Mail Live mit dem Kopter testen können. Ich bin mit der Funktion schon sehr zufrieden. Das vertikale Tracking muss ich noch mal überprüfen. Da hüpft er noch zu sehr. Auf jeden Fall geht es in freier Wildbahn schon viel besser als in der Wohnung. Das Problem was ich zur Zeit noch sehe, ist das "verhaken" auf einer ungültigen Position. Z.B. wenn ich mit dem Kopter doch zu nach am Tracker geflogen bin oder mal ein paar Meter hinter mir. Ich werde dafür wohl noch einen Taster mit ausreichend langen Kabel oder einen Funkschalter einbauen, der den Tracker dann wieder in den Suchmodus schickt.
Den Code werde ich auch bald zur Verfügung stellen. Ich muss nur noch etwas aufräumen und besser dokumentieren.
 

Jörn

Erfahrener Benutzer
3 * Helix und 1* SPW ? Da kommste aber mit 100 Euro nicht mehr hin oder ?
Lohnt sich das preislich noch im Verglich zum MyFlyDream o.æ. ?
Da ich alle Antennen selber baue, muss ich nur die Zeit dafür rechnen. Und das ist bei einem Hobby ja bekannter Weise verboten ;-) Eine Helix kostet 2,50€ in der Herstellung ohne Arbeitszeit.
 

Helium

Erfahrener Benutzer
Ich meinte nicht die Helixe sonder die Empfaenger. Selbst wenn du die selber baust kosten diese pro modul um die 20 Dollar. Ohne die anderen bauteile ( arduino usw ) gerechnet.
 

Jörn

Erfahrener Benutzer
Ich meinte nicht die Helixe sonder die Empfaenger. Selbst wenn du die selber baust kosten diese pro modul um die 20 Dollar. Ohne die anderen bauteile ( arduino usw ) gerechnet.
Jo das stimmt schon. Aber ich baue die Sachen einfach gerne selber. Man lernt dabei sehr viel und es macht ja auch Spass wenn es dann funktioniert.
 

chichi

Erfahrener Benutzer
Ich finde es auch klasse, leider habe ich nicht die zeit und bleibe bei meiner diversity mit 2 Empfängern und einer Helix 4.5-Turn nach dieser Bauanleitung. Ich habe noch den BlueAngel-Mod, damit bleibt das Bild ohne Flackern. Weiter ....
 

Manfet

Erfahrener Benutzer
3 * Helix und 1* SPW ? Da kommste aber mit 100 Euro nicht mehr hin oder ?
Lohnt sich das preislich noch im Verglich zum MyFlyDream o.æ. ?
Spätestens wenn man 2 Fluggeräte hat wirds mit den GPS Trackern teuer. Ausserdem hat es imho immer noch den Nachteil das man nicht super günstige Mini Flieger bauen kann weil man immer GPS.. an Bord haben muss wenn man tracken will.

Edit: Weiterer Nachteil ist das man auf ein System gebunden ist. Gerade die Leute die Kopter und Fläche per FPV fliegen haben da dann echt Probleme.
 

BlueMahib

Erfahrener Benutzer
So, da der Tracker mit dem verbessertem Code noch nicht das tut, was er soll, habe ich über Serial.print mal die Differenzen der einzelenen Antennenpaare (Rechts-Links, Oben-Unten) ausgeben lassen.

Die Werte dabei haben mich sehr überrascht (siehe Anhang).

Ich habe die Werte 90 und 93 (da steht das Servo still)+-10 erwartet.
 

Anhänge

Zuletzt bearbeitet:

Helium

Erfahrener Benutzer
Werte ueber 100 ??? wie das denn ? hast du den map befehlt benutzt oder ist das dein Code ohne calib / map ?

Du solltest einen Summer o.æ. einbauen, damit du weisst wann du an schalten musst bisher ist es ja so dass du nach 10sek deine erste messung hast ( low ) dann 20 sek pause und dann die 2. messung.

lass dir mal die antennen werte ausgeben ( in prozent ).
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten