Diversity & Antennentracking < 100€

Status
Nicht offen für weitere Antworten.

astmonster

Erfahrener Benutzer
gibt es eigentlich auch günstige empfänger / module die im 5.8GHz band arbeiten aber die frequenzen abdecken wie z.B. die fatshark oder die immersion sender ? die airwave empfänger haben bei jeder frequenz ne 5 hinten , die empfangen mein video nicht ^^
 
Dann bin ich mal auf deine Konstruktion gespannt :)
Bei meinem Sketch habe ich das calibrieren weg gelassen und fixe Werte für die airwave Module gamappt, das musst du dann vllt für dich anpassen.
 

BlueMahib

Erfahrener Benutzer
Ich benutze einen anderen Code, der die Spannung A0 und A1 vergleicht und dann das Servo in die andere Richtung bewegt.
Jedoch schlägt das Servo in einer Richtung an den Anschlag an und brummt; kann man in Arduino den Servoweg irgendwie begrenzen? (z.B 10-170 Grad)
 
Klar, warum sollte das nicht gehen mit dem begrenzen, du setzt ja den Wert aufs Servo, sieh einfach zu das du nie über oder unter die Limits kommst.

Code muss ich eh anpassen, bzw hab mir schon was zusammengeklaut und umgebaut. Bin nur immer an anderen Lösungen interessiert.

Meine Konstruktion wird möglichst klein werden, evtl gibts heute abend ein paar Bilder.
 

BlueMahib

Erfahrener Benutzer
Danke, hat geklappt.

Ich werde vielleicht heute Abend auch ein paar Bilder einstellen. Bei meiner Konstruktion steht das Servo auf dem Kopf, die U-Form kann also sich beliebig um die eigene horizontale Achse drehen.
 

BlueMahib

Erfahrener Benutzer
Ja, damit kann der Tracker nun endlos drehen.

Das vertikale Servo kann dagegen nicht endlos drehen, die Servokabel vom horizontalen Tracker fixiere ich auf der Tilt Gabel (Rückseite).

Zusätzlich verwende ich noch einen Rangevideo Micro Diversity, das fertige Videosignal wird mit einem 5,8 Ghz Sender an die Videobrille gesendet, somit alles kabellos.
 

nils1982ks

Erfahrener Benutzer
Ich versuch ja wie immer die Billig Lösung, 2 billige PCB Patches fürs RSSI und nur eine Helix in der Mitte.
Die Idee finde ich super, aber die Boards sollen ja maximal 6 dBi haben, oder interpretiere ich nun die Datasheets falsch? Damit das RSSI Signal noch aussagekräftig bleibt muss die Differenz schon ordentlich messbar bleiben, oder willst du das noch vorverstärken, oder gleich ein Differenzsignal mit den OPamps erstellen?
 
Ja, wird sich zeigen ob die 6dbi zum tracken ausreichen, ich gehe mal davon aus das selbst wenn das Bild eigentlich zu schlecht/schwach zum fliegen der RSSI Wert trotzdem noch weiter aussagekräftig bleibt. Wird sich zeigen ob und wie gut das geht.
 
Wie versprochen:

Code:
#include <LiquidCrystal.h>
#include <Servo.h>




//SETUP
int wartezeit = 100;
int schwellwert = 70;
int Vert_mitte = 90;
int Hori_mitte = 90;
int schrittweitehori = 2;
int calibrate1 = 0;
int calibrate2 = 0;
int calibrate3 = 0;
int horizontalwert=0;
int hori=0;
int vert=-30;
int merke=0;
int stufe=0;
int mitte_alt=0;




Servo myservo1; // create servo object to control a servo
Servo myservo2; // create servo object to control a servo


int rssilinks = A2;
int rssirechts = A1;
int backLight = 13;

#define SPKR 9




int links = 0;
int mitte = 0;
int rechts = 0;
int rssiDiv = 0;
int i=0;
int y=0;

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup()
{
  lcd.begin(16, 2);
  pinMode (backLight, OUTPUT);
    digitalWrite (backLight,HIGH);
myservo1.attach(11); // attaches the servo on pin 10 to the servo object
myservo1.write(Hori_mitte);
myservo2.attach(10); // attaches the servo on pin 11 to the servo object
myservo2.write(Vert_mitte);
y=Hori_mitte;

Serial.begin(9600);

for(i=0;i<10;i++) 
{
calibrate1=calibrate1+analogRead(rssilinks);
delay(25);
}
calibrate1=calibrate1/10;


for(i=0;i<10;i++) 
{
calibrate3=calibrate3+analogRead(rssirechts);
delay(25);
}
calibrate3=calibrate3/10;

pinMode(SPKR, OUTPUT); //set the speaker as output
digitalWrite(SPKR, HIGH);
delay(500);
digitalWrite(SPKR, LOW);
delay(2500);
}


void loop()
{

// Map values to defined range
//links = map(analogRead(rssilinks), 0, calibrate1, 0, 1000);
//mitte = map(analogRead(rssimitte), 0, calibrate2, 0, 1000);
//rechts = map(analogRead(rssirechts), 0, calibrate3, 0, 1000);

links = map(analogRead(rssilinks), 480, 70, 0, 100);
rechts = map(analogRead(rssirechts), 480, 70, 0, 100);

if (links>100)
    {
      links = 100;
    }
    if (rechts>100)
    {
      rechts = 100;
    }

Serial.println(links);
    Serial.println(rechts);
    Serial.println(" ");
    
//Display rssi values
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(links);
    lcd.setCursor(0, 1);
    lcd.print(rechts);
rssiDiv = (links - rechts);
if (rssiDiv >= 20 || rssiDiv <= -20)
{
  schrittweitehori = 15;
}
else
{
  schrittweitehori = 4;
}
if (links > rechts)
{
horizontalwert = horizontalwert + schrittweitehori; 
Serial.println("nacch links");
}
if (rechts > links)
{
horizontalwert = horizontalwert - schrittweitehori;
Serial.println("nacch rechts");
}


hori = horizontalwert + Hori_mitte;
if (hori>179)
{
horizontalwert=0;
Serial.println("zurück");
}
if (hori<=0)
{
horizontalwert=0;
Serial.println("zurück");
}
myservo1.write(hori);
myservo2.write(Vert_mitte);
delay(wartezeit);
{
if (rechts = links)
{
mitte_alt=0;
for(merke=1; merke < 5; merke++)
{
mitte = map((analogRead(rssirechts)+analogRead(rssilinks))/2, 0, calibrate2, 0, 100);
if (mitte_alt > mitte)
{
vert = vert+1; 
} 
if (mitte_alt < mitte)
{
vert = vert-1;

delay(wartezeit);
}
myservo2.write(Vert_mitte + vert);
delay(wartezeit);
mitte_alt=mitte;
}

delay(wartezeit);
}
}


}
 

BlueMahib

Erfahrener Benutzer
Wie hast du das denn bewerkstelligt, dass sich ein normaler Servo beliebig drehen kann?
Wie bereits der-Frickler sagte:

Ich habe aus dem Servo das Potentiometer, dass sich normalerweise bei der Drehung mitläuft (daher weiß das Servo, wo es steht), ausgebaut. Zusätzlich habe ich vom Zahnrad des Servo den mechanischen Anschlag entfernt (schleifen).

Nun weiß das Servo zwar nicht mehr, wo es ist, aber:

1) Ich nehme als Mittelposition den Servoweg 90 im Arduino
2) Ich schreibe einen Sketch, der das Servo um 90 dreht, das Servo wird nun endlos in eine Richtung weiterdrehen
3) Ich feinjustiere das Potentiometer dabei, sodass irgendwann das Servo bei 90 Grad Ausschlag im Arduino still steht.
4) Dann muss das Servo nur noch nach links oder rechts gedreht werden (PWM>1,5 bzw. <1,5 ms)

Gruß Tim
 
Danke für den Code, ähnlich schauts bei mir auch aus. Gestern durfte der 1. Prototyp schon ma etwas test-tracken auf dem Schreibtisch, momentan aber noch mit normalem 120° Servo, das 360er ist noch unterwegs:













Funktioniert soweit scheinbar ganz gut, ist im Zimmer halt schwer zu sagen wie er draußen in der Realität gehen wird. In die Mitte kommt dann später die Helix mit die ner SPW am Micro-Diversity hängt. Arduino und Display kommen noch in/auf den Antennenhalter.
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten