Magraina
New member
- Registriert
- 17.03.2010
- Beiträge
- 237
Hey,
Ich weiß nicht ob das schonmal jemand gemacht hat aber da ich die Möglichkeit nutze will ich sie euch zeigen.
In diesem kleinen Beispiel zeige ich wie man das Signal vom Empfänger zum Multiswitch-Decoder auswertet und mit einem Microcontroller(Arduino) nutzen kann.
Da ich in meinem LKW sowieso einen Microcontroller(Arduino) nutzen will für diverse Funktionien welche sowieso die meisten von den Multiswitchschaltern kommen und ich nicht sonderlich Platz habe kam ich auf diese Idee.
Außerdem sind die Multiswitch decoder teuer wenn man sie in jedem Fahrzeug nutzt.
Um das nachzumachen benötigt man etwas Erfahrung mit Microcontrollern(bzw. Arduino und C-Programmierung) und Elektrotechnik.
Ich nutze eine Futaba F14 und als Empfänger einen Futaba FP-R118F
Am Empfänger wo der Decoder angeschlossen wird liegt ein PPM Signal an.
Das Signal Besteht aus einem Startimpuls und 8 Impulsen.
Der Startimpuls(Sync) hat immer die selbe länge und dadurch kann man festellen wo der Anfang ist um die Reihenfolge beizubehalten.
Die anderen 8 Impulse(S1-S8) Stellen die Schalter des Multiswitch dar sie varieren mit der Länge je nach Schalterstellung.
Mann kann das Signal mit einem Oziloskop darstellen bzw. es mit einem Microcontroller beobachten.
Hier mal eine kleine Skizze um das zu verdeutlichen:
Also habe ich folgendes gemacht:
Ich habe meinen Arduino mit der Spannungsversorgung des Empängers verbunden und das PPM Signal auf einen Eingang gelegt.
Ich habe ein Programm auf den Arduino geladen womit ich die Impulslängen der einzelnen Impulse auf einem Seriellen Monitor sehe.
Programm:
Damit bekamm ich fortlaufend Werte die etwa so aussahen:
915
1600
1600
1024
1600
1900
1900
1900
1900
Diese Zahlen sind die Zeit in Microsecunden die die Impulse auf High waren.
915 stellt denn Startimpuls dar und die restlichen die 8 Schaltkanäle.
Der 3. Schalter ist in diesem Beispiel geschaltet deshalb ist die Zeit für diesen geringer.
Bei allen Schaltern habe ich im geschalteten zustand einen Zeit wert von 1024 Microsekunden bekommen.
Ansonsten war der Wert zwischen 1600 und 1900.
Daraus habe ich dann folgendes Programm gemacht:
Das Programm bleibt in der while-schleife bis der Startimpuls kommt da dieser als einziger kleiner als 1000 Microsekunden ist.
Dannach werden die Werte der 8 Impulse in den array "value" geschrieben.
Im Beispiel schalte ich den Ausgang 4 wenn der Schalter geschalten ist.
Sollte die Verbindung zur Ferbedienung unterbrechen geht der Wert von "value" nach einer bestimmten zeit auf 0 da kein Signal mehr kommt.
Man könnte mit der funktion pulseIn() auch einen Timeout bestimmen.
Sollte man einen Multiswitch mit proportionalen Funktionen haben wird vermutlich die zeit zwischen 1024 -2000 Microsekunden variieren je nach Stellung.
Das kann ich nicht testen da ich so ein Modul nicht besitze.
Hier noch ein Video zum veranschaulichen(Leider waren ein par sehr helle LEDs dabei).
Ich hoffe der eine oder andere kann damit was anfangen.
Über Fragen oder Kritik würde ich mich freuen.
Für die Rechtschreibfehler kann ich nichts die sind angeboren
Links für Interisierte:
Eine erklärung zu PPM: http://www.rconline.net/magazin-2001/pcm-ppm/pcm-ppm.shtml
Bild zu PPM: http://www.rconline.net/magazin-2001/pcm-ppm/frame_ppm.gif
Arduino pulseIn() Reference: http://arduino.cc/de/pmwiki.php?n=Reference/PulseIn
MFG MetazeR
Ich weiß nicht ob das schonmal jemand gemacht hat aber da ich die Möglichkeit nutze will ich sie euch zeigen.
In diesem kleinen Beispiel zeige ich wie man das Signal vom Empfänger zum Multiswitch-Decoder auswertet und mit einem Microcontroller(Arduino) nutzen kann.
Da ich in meinem LKW sowieso einen Microcontroller(Arduino) nutzen will für diverse Funktionien welche sowieso die meisten von den Multiswitchschaltern kommen und ich nicht sonderlich Platz habe kam ich auf diese Idee.
Außerdem sind die Multiswitch decoder teuer wenn man sie in jedem Fahrzeug nutzt.
Um das nachzumachen benötigt man etwas Erfahrung mit Microcontrollern(bzw. Arduino und C-Programmierung) und Elektrotechnik.
Ich nutze eine Futaba F14 und als Empfänger einen Futaba FP-R118F
Am Empfänger wo der Decoder angeschlossen wird liegt ein PPM Signal an.
Das Signal Besteht aus einem Startimpuls und 8 Impulsen.
Der Startimpuls(Sync) hat immer die selbe länge und dadurch kann man festellen wo der Anfang ist um die Reihenfolge beizubehalten.
Die anderen 8 Impulse(S1-S8) Stellen die Schalter des Multiswitch dar sie varieren mit der Länge je nach Schalterstellung.
Mann kann das Signal mit einem Oziloskop darstellen bzw. es mit einem Microcontroller beobachten.
Hier mal eine kleine Skizze um das zu verdeutlichen:
Also habe ich folgendes gemacht:
Ich habe meinen Arduino mit der Spannungsversorgung des Empängers verbunden und das PPM Signal auf einen Eingang gelegt.
Ich habe ein Programm auf den Arduino geladen womit ich die Impulslängen der einzelnen Impulse auf einem Seriellen Monitor sehe.
Programm:
Code:
void setup() {
Serial.begin(57600);
pinMode(3, INPUT); //Pin an dem das Signal anliegt.
}
void loop() {
Serial.println(pulseIn(3, HIGH));
}
Damit bekamm ich fortlaufend Werte die etwa so aussahen:
915
1600
1600
1024
1600
1900
1900
1900
1900
Diese Zahlen sind die Zeit in Microsecunden die die Impulse auf High waren.
915 stellt denn Startimpuls dar und die restlichen die 8 Schaltkanäle.
Der 3. Schalter ist in diesem Beispiel geschaltet deshalb ist die Zeit für diesen geringer.
Bei allen Schaltern habe ich im geschalteten zustand einen Zeit wert von 1024 Microsekunden bekommen.
Ansonsten war der Wert zwischen 1600 und 1900.
Daraus habe ich dann folgendes Programm gemacht:
Code:
#define schalter 8 //Anzahl der Schalter bzw. Impulse
int value[schalter];
void setup()
{
pinMode(3, INPUT); //Pin 3 als input
pinMode(4, OUTPUT);
}
void loop()
{
while(pulseIn(3, HIGH) > 1000){} //Wait for the beginning of the frame
for(int x=0; x<=schalter-1; x++)//Loop to store all the channel position
{
value[x]=pulseIn(3, HIGH);
}
if ((value[0] < 1100) && (value[0] > 1000)) {
digitalWrite(4, HIGH);
} else {
digitalWrite(4, LOW);
}
}
Das Programm bleibt in der while-schleife bis der Startimpuls kommt da dieser als einziger kleiner als 1000 Microsekunden ist.
Dannach werden die Werte der 8 Impulse in den array "value" geschrieben.
Im Beispiel schalte ich den Ausgang 4 wenn der Schalter geschalten ist.
Sollte die Verbindung zur Ferbedienung unterbrechen geht der Wert von "value" nach einer bestimmten zeit auf 0 da kein Signal mehr kommt.
Man könnte mit der funktion pulseIn() auch einen Timeout bestimmen.
Sollte man einen Multiswitch mit proportionalen Funktionen haben wird vermutlich die zeit zwischen 1024 -2000 Microsekunden variieren je nach Stellung.
Das kann ich nicht testen da ich so ein Modul nicht besitze.
Hier noch ein Video zum veranschaulichen(Leider waren ein par sehr helle LEDs dabei).
Ich hoffe der eine oder andere kann damit was anfangen.
Über Fragen oder Kritik würde ich mich freuen.
Für die Rechtschreibfehler kann ich nichts die sind angeboren
Links für Interisierte:
Eine erklärung zu PPM: http://www.rconline.net/magazin-2001/pcm-ppm/pcm-ppm.shtml
Bild zu PPM: http://www.rconline.net/magazin-2001/pcm-ppm/frame_ppm.gif
Arduino pulseIn() Reference: http://arduino.cc/de/pmwiki.php?n=Reference/PulseIn
MFG MetazeR