Fatshark Headtracker + Lehrer/Schüler an MC 20 Hott, 2 Schülersignale gleichzeitig

Atomfried

Neuer Benutzer
#1
Hallo werte FPV-Community,

um in Deutschland legal FPV betreiben zu können muss ja ein Spotter mittels Lehrer/Schüler Anlage beim Fliegen involviert werden.
In meinem Fall wäre bei der Graupner MC 20 Hott (Lehrer) und einer alten MC 10 (Schüler) die DSC-Buchse der MC 20 belegt.
Jetzt will ich aber noch den Headtracker der Fatshark Attitude V2 verwenden. Dieser liefert ebenfalls ppm-Signale, welche mit einem Spezialkabel von GF ebenfalls als Schülersignal in das System eingespeist werden müsste.

Aber wie?:confused:

Ich habe mir auch schon überlegt das ppm-Signal mit einem Pic oder Atmega in ein Analogsignal zu wandeln. Leider gibt es aber laut Graupner keine freien Prop-Eingänge bei der MC 20 (obwohl auf einer Platine 2 freie 5-Pol Ports frei sind, sie Abbildung)
P618.020.PNG

Habt Ihr da eine fixe Lösung für das Problem?


Viele Grüße aus Süden!
 

Atomfried

Neuer Benutzer
#2
So, es gibt Neuigkeiten:
An den beiden 5-Pol Ports kann man laut einem Hersteller für Knüppelschalter mit Poti sehr wohl Analoggeber (Poti) anschließen, diese sollten dann im Menü erscheinen. Werde mir zuerst mal 4K7 Ohm Potis besorgen und versuchen ob das funtioniert.
 

Atomfried

Neuer Benutzer
#3
Die Lösung des Problems

Es ist vollbracht...
Hier die einzelnen Schritte.
Die PPM Signale des Attitude V2 Headtrackers sind auf Kanal 5 und 6 (Werkseinstellung) des 8-Kanal-Streams.
Dieser wird an einem Arduino Due eingelesen und direkt an den beiden DACs des Arduinos als Spannungssignal ausgegeben. Leider nur in einer Range von 0,5V - 2,7V (0 - 3,3V wären später Vollausschlag an den Servos, brauche ich aber nicht). Wer den ganzen Spannungsbereich braucht muss mit einem RC-Glied und PWM-Ausgängen des Arduinos vorlieb nehmen. Dann kann übrigens auch ein kleinerer Arduino verwendet werden.

CIMG0497.jpg

Hier der Code, nochmals vielen Dank an den im Code erwähnten Macher des Basiscodes:



/*
Arduino PPM to Analog Decoder for Arduino Due

This sketch decodes a PPM stream from a source and converts it to an analog signal.
This sketch is for a Fatshark Attitude V2 with headtracker. The relevant signals are on channel 5 and 6.
Outputs are scaled from 0,5-2,7V on the both DACs.
Outputs are scaled to 1-99 and then printed to the Serial Monitor.

The basic sketch was from the site below, thanks for the effort.
http://projectsfromtech.blogspot.com/2013/11/arduino-ppm-decoder-decoding-rc.html
*/


const int NumberOfChannels = 8; // number of channels of the headtracker
const byte InputPin = A0; // Pin connected with the headtracker
const int FrameSpace = 3000; // 3 ms (normal ppm goes from 1 to 2 ms)

volatile long Current_Time;
volatile long Last_Spike;

volatile byte Current_Channel = 0;
volatile int Spike_Length[NumberOfChannels + 1];
volatile int Spike_Lengthbkp[NumberOfChannels + 1];
volatile int LastChannelFlag = false;

int output0 = 0;
int output1 = 0;

void setup()
{
pinMode(DAC0, OUTPUT);
pinMode(DAC1, OUTPUT);
delay(100);
attachInterrupt(InputPin, Spike, RISING);
Last_Spike = micros();
Serial.begin(57600); // only for visualisation
Serial.println("Setup"); // only for visualisation
}


void loop()
{

if (LastChannelFlag == true) // If we are on the last Spike
{
LastChannel(); // Get the last pulse value
// Display(); // only for visualisation, display all channels on the Serial Monitor (does not work proper when "Spike_Lengthbkp[Current_Channel] = Spike_Length[Current_Channel];" is set)
Output();
}

} //end loop()


//Stores the length of the spike in Spike_Length. Framespace length in stored in SpikeLength[0]
void Spike()
{
Spike_Lengthbkp[Current_Channel] = Spike_Length[Current_Channel]; // stores the old signal length
Current_Time = micros();
Spike_Length[Current_Channel] = Current_Time - Last_Spike;

if (Spike_Length[Current_Channel] > FrameSpace) Current_Channel = 0; // oops, you were actually in the frame space --- need to add correction

if (Spike_Length[1] < 1200)
{
Spike_Length[Current_Channel] = Spike_Lengthbkp[Current_Channel]; // correction
}

Last_Spike = Current_Time; // Set the current time as the previous time to the next one.
Current_Channel = Current_Channel + 1; // Reading the next channel now

if (Current_Channel == NumberOfChannels) // Special case. Must wait for it to fall manually.
{
LastChannelFlag = true;
}
} // end Spike()


void LastChannel()
{
while (digitalRead(InputPin) == HIGH);
Current_Time = micros(); // Now it has fallen
Spike_Length[Current_Channel] = Current_Time - Last_Spike;
Current_Channel = 0;
Last_Spike = Current_Time;
LastChannelFlag = false;
}


// Prints values to Serial Monitor
void Display()
{
for (byte x = 1; x <= 8; x++)
{
Serial.print("Ch. ");
Serial.print(x);
Serial.print(": ");
Serial.print(map(Spike_Length[x], 1000, 2010, 0, 99)); // Mapping values may need to be changed depending on receiver
Serial.print(" ");
}
Serial.println();
}


void Output()
{
for (byte x = 1; x <= 8; x++)
{
if (x == 5)
{
output0 = 819 / 202 * Spike_Length[x] - 409500 / 101; // straight through points (1000/0) and (2010/4095), spikelength between 1000ms and 2000ms, output from 0 to 4095
}

if (x == 6)
{
output1 = 819 / 202 * Spike_Length[x] - 409500 / 101; // straight through points (1000/0) and (2010/4095), spikelength between 1000ms and 2000ms, output from 0 to 4095
}
}

analogWriteResolution(12); // By setting the write resolution to 12, you can use analogWrite() with values between 0 and 4095 to exploit the full DAC resolution
analogWrite(DAC0, output0);
analogWrite(DAC1, output1);
}


Das Analogsignal des Arduinos wird an zwei freien Eingängen (in vorigen Posts beschrieben) in der MC20 eingelesen. Um den Arduino trennbar von der MC20 zu machen habe ich an der Unterseite der MC20 einen "Binder Serie 770 NCC" Stecker verbaut. Vorteile dieses Steckers sind die kompakten Maße, die sehr hohen Steckzyklen (>5000) und vorallem der Umstand dass der Stecker auch in ungestecktem Zustand IP67 hat (NCC -> not connected closed).

CIMG0494.jpg CIMG0489.jpg

Im Menü "Gebereinstellungen" der MC 20 erscheinen die beiden Eingänge als UG1 und UG2.

Die MC20 kann nun wie gewohnt mit der Lehrerfernsteuerung verbunden werden.

Den Arduino werde ich in eine kleine Box packen und mit einem 2S Lipo versorgen. Später soll noch ein Antennentracker mit dem Arduino realisiert werden. Ein- und Ausgänge sind mehr als genug vorhanden.

:cool:
 
FPV1

Banggood

Oben Unten