Go Down

Topic: Servo / PWM Signal einer Taranis (RC Sender) am Arduino einlesen und auswerten (Read 208 times) previous topic - next topic

cappy0815

Hallo zusammen,

ich möchte gerne die Beleuchtung eines RC-Flugzeugs per Arduino steuern.
Dazu wird ein Programm die LEDs ansteuern, klar ...

Per Schalter am Sender möchte ich aber nun verschiedene Programme, bzw Beleuchtungs-Modi abrufen.
AUS - Modus1 - Modus2 soll über einen Schalter mit 3 Schaltstellungen geschaltet werden.

Dieser Schalter ist eigentlich für Servo-Positionen gedacht und gibt scheinbar werte von -100, 0, 100 aus.
Das müsste aber, nach meinen Recherchen ein PWM-Signal sein.

Wie werte ich dieses Signal nun am Arduino aus.
Auch zur Vorschaltung (falls nötig) benötige ich bitte Hilfe.

Bin nicht ganz sicher, wie ich da ran gehen soll.
Habe zwar schon etwas gegoogelt und erste Hinweise gefunden, kann die aber noch nicht so ganz einsortieren.

Könnt ihr mich mal in die richtige Richtung schubsen?

Vielen Dank
Cappy

zwieblum


cappy0815

Hi,

danke für die schnelle Antwort.

Allerdings verstehe ich die Library nicht, oder Du hast mich missverstanden.

Ich möchte NICHT einen Servo steuern, sondern ein Signal aus dem RC-Empfänger (das eigentlich zu einem Servo gehen soll) entgegen nehmen und verarbeiten.

Cappy

michael_x

Servo-Signale sind nicht wirklich PWM.
Es kommt nicht auf das Verhältnis Puls/Pause an, sondern auf die Dauer des Pulses ( 1 .. 2 ms )
Die Pause bzw. Zyklusdauer (ca. 20 ms) ist nicht so relevant.

Wenn dir Blockaden in dieser Größenordnung (20 ms) nichts ausmachen, ist pulseIn das Einfachste.


servo.read() liefert nur zurück, was das letzte servo.write() gesetzt hat. Ist also nicht deine Lösung. Richtig erkannt.

cappy0815

Hi nochmal,

okay. Über pulseln bin ich schon irgendwo gestolpert.
Das sehe ich mir mal an.

Mit den Blockaden bin ich nicht ganz sicher.
Meinst Du, dass das Programm dann 20 ms lang steht?
Wann genau würde es das tun?

Der Plan wäre so:

Schalter Pos 1: alles aus
Schalter Pos 2: mehrere LEDs an + blitzende LEDs (millis)
Schalter Pos 3: mehrere LEDs an + blitzende LEDs (millis) + weitere LEDs an

Bin nicht sicher, ob ich das richtig beschrieben habe.

Cappy

michael_x

Quote
Wann genau würde es das tun?
Wenn du pulseIn (pin, HIGH) aufrufst, geht der Sketch erst weiter, wenn das RC-Signal danach von HIGH zu LOW wechselt. Und sagt dir, wie lang der HIGH-Puls war. Das kann also 20 ms dauern. Ist aber OK wenn du nichts schnelleres als eine blitzende LED brauchst

cappy0815

Hi nochmal,

ok ... da komme ich, glaube ich, mit.

Das heißt also das Signal sagt nur "es gibt ne Änderung" steht aber nicht die ganze Zeit auf HIGH bis ich den Schalter wieder umlege?

Ich glaube ich muss mal ne Schaltung aufbauen und ein wenig rumprobieren.
Ist ja alles sehr theoretisch so lange.

Bisher sind nämlich nur die LEDs im Flieger.

Noch eine Frage nebenbei, die hier sicherlich nicht 100%ig richtig ist.

Wenn ich die LEDs ansteuern will, geht das direkt per Vorwiderstand ... bisher jedenfalls.
Würdet Ihr mir empfehlen lieber nen Transistor zwischenzuschalten?

Cappy

michael_x

Quote
Wenn ich die LEDs ansteuern will, geht das direkt per Vorwiderstand ... bisher jedenfalls.
Würdet Ihr mir empfehlen lieber nen Transistor zwischenzuschalten?
Wenn es mehrere LED sind, die hintereinander mehr als 5V oder parallel mehr als 20 mA brauchen,  geht das nicht direkt an einem Arduino-Pin.

michael_x

Quote
ein Signal aus dem RC-Empfänger (das eigentlich zu einem Servo gehen soll) 
Quote
Das heißt also das Signal sagt nur "es gibt ne Änderung" steht aber nicht die ganze Zeit auf HIGH bis ich den Schalter wieder umlege?
Wenn du mit einer Fernsteuerung einen Servo ansteuerst, kriegt der regelmäßig (alle 20 ms) seine 1..2 ms Pulse abhängig von der Hebelstellung an der Fernbedienung.

cappy0815

Ui ... ich sehe schon, da muss ich echt mal ne Runde üben.

Der Servo bekomme alle 20ms Pulse, ok.
Die werden dann länger oder kürzer, je nach Hebelstellung, ja?

Cappy

agmue

Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

ElEspanol

PPM hat nur bedingt was damit zu tun. PPM sind aneinandergereihte Servosignale der verschiedenen Kanäle.

Ich nehme an, du willst folgendes:
Ein Kanal der Funke steuert einen Empfängerausgang
Der Empfängerausgang geht auf den Arduino
Entsprechend des gesendeten Wertes (-100 bis +100) soll der Arduino verschiedene Lichtsettimgs abspielen

Korrekt?

cappy0815

Genau so ist das, ja!

Habe die ersten Zeilen auch schon gecodet.
Poste ich Morgen mal.

Cappy

ElEspanol

meine Empfehlung:
Kein pulseIn verwenden, sondern eine ISR verwenden. Es gibt auch fertige Bibliotheken dafür.
Falls dein Empfänger irgendein summensignal aller Kanäle wie Ibus, Sbus, PPM oder so liefert, würde ich sogar das nehmen, dann ist es leichter, später einen zweiten Kanal einzubinden.

Im Arduino bekommst du dann Werte für den Kanal, z.B. in Mikrosekunden, zwischen 500 und 2500.
1000 entspricht dann -100 am Sender, 1500 ist 0, und 2000 ist +100. Du kannst an der Taranis aber auch auf +/-150 gehen, wenn du z.B. einen 10-Positionen-analog-Drehschalter verwendest

Da fragst du dann einfach auf den Wert ab, allerdings nicht mit
wert==1500, sondern mit wert>1450 && wert < 1550
Weil die gelieferten Werte immer etwas zappeln.

Evtl. wäre für dich auch eine Schaltkanalerweiterung (früher „Nauticmodul") interessant, ist wahrscheinlich aber Overkill.

cappy0815

Mahlzeit,

ich habe nun mit pulseIn angefangen und kann den zwei-stufigen Schalter abhören.
Daher werde ich das Projekt jetzt auch erstmal damit fertig stellen.

Beim nächsten könnte ich mir dann mal diese ISR Sache ansehen.
Was spricht für Dich denn gegen pulsIn? "Nur" die Sache mit den Kanälen?

Was ich ehrlich gesagt noch nicht so ganz blicke sind diese ms-Werte!?
Welche Zeit ist das? Die Zeit wie lange ein HIGH je Zyklus am Kanal steht?

Es war etwas schwierig, die Zeiten auf die besagten -100 bis +100 umzustricken.
Jetzt habe ich's aber :-)

Cappy


Go Up