Hallo zusammen,
nachdem ich heute mal Spasseshalber einen Servo an den Arduino Uno gehangen habe, (und sich der dann auch tatsächlich drehte), fing mein Elektronik-und-Modellbau-Hirn an zu spinnen.
Folgendes "Projekt" fiel mir da ein, da ich an meinem Modellbau-Empfänger irgendwie IMMER zu wenige Ausgänge habe.....
Also.....
Ich habe an meinem Sender links zwei vertikal-Hebel und rechts einen Kreuz-Knüppel... sagen wir mal "Kanal 1 bis 3".
Diese steuern im Normalfall zweimal Gas (zwei Motoren), und der Kreuzknüppel horizontal die Lenkung.
Rechts ist Vertikal ohne Funktion .
Nun war meine Idee, meine Yacht mit zwei Querstrahlrudern auszustatten.
Hierfür möchte ich aber nur einen Digital-Kanal (Kanal 4) verwenden.
Programm soll theoretisch so aussehen.
Wenn Kanal 4 = 0, dann Kanal 1und2 auf die Antriebs Motoren. (z.B. PWM-Ausgang an Pin 2 und 3)
Wenn Kanal 4 = 1, dann Kanal 1und2 auf die Querstrahl-Motoren (z.B. PWM-Ausgang Pin 4 und 5)
Somit hätte ich jetzt schon einen Kanal gespart....
Die Frage ist hier nun, ob ich das PWM-Signal von Empfänger irgendwie in den Arduino REIN bekomme.
Raus aus dem Arduino für Ansteuern von Servo oder Fahrtregler geht ja recht einfach.
Eine kurze Info ob das schonmal jemand gemacht hat wäre super, ggf mit kurzem Progrämmchen....
Gruß
Alexander
P.S. Servo-Test stammt aus dem Buch "Arduino-Workshop" direkt am Anfang von Kapitel 12
Kommt ein bischen darauf an wie schnell das PWM Signal ist und wie schnell es sich ändert. Mein erster Versuch wäre ein simpler RC Tiefpass und das sich ergebende (Analog)Signal dann einfach messen (analogread). Je höher die Frequenz des PWM Signals und je langsamer sicher der "Duty-Cycle" ändert, desto besser funktioniert die Methode.
Soo, seit heute Abend bin ich nun ein gutes Stück weiter.
Bin dann vorhin beim Suchen auf das hier gestossen: Modellbau: RC
Wenn ich das richtig sehe, ist zwar die Übertragung vom Sender zum Empfänger in PPM, das Ausgangssignal am Empfänger (zum Servo oder Fahrtregler) ist PWM.
Alle 20ms kommt ein Puls, dessen Länge zwischen 1ms und 2ms variiert.
Gut, damit weiter....
ich hab dann einfach mal einen Ausgang vom Empfänger an Pin 3 (als PWM Eingang) getackert und an Pin 2 (Servo-Ausgang) eben jenen Modellbau-Servo.
Folgendes Programm:
#include <Servo.h> // Lade Bibliothek SERVO.H
Servo myservo; // Definiere "myservo" als Servo
byte PWM_PIN = 3; // Byte PWM-Signal an Pin 3
int pwm_value = 0;
int steuersignal = 90;
void setup()
{
Serial.begin(9600);
pinMode(PWM_PIN, INPUT);
myservo.attach(2); // "myservo" angeschlossen an Port 2
}
steuersignal = map(pwm_value, 1000, 2000, 180, 90); // Wandle das PWM-Signal (1000-2000) in Steuersignal (180-0) um
myservo.write(steuersignal); // Gebe das Signal "Steuersignal" an den Servo
Serial.print("Servo-Signal: ");
Serial.println(steuersignal);