Arduino steuert Sender

Manchmal entsteht der Bedarf, einen ganz normalen Proportionalkanal im Sender nicht manuell über einen Steuerknüppel, Schieber oder Drehpoti zu steuern, sondern dies mit einem Mikroprozessor zu automatisieren. Man möchte vielleicht einen Ablauf automatisieren, wie zum Beispiel bei einem Door-Sequencer für das geordnete Öffnen von Fahrwerksklappen und dem Ausfahren eines Einziehfahrwerkes usw.  Oder man möchte alternative Eingabegeräte verwenden wie Sprachsteuerung, Bewegungs- und Beschleunigungssensoren, Ultraschallsensoren usw., die dann das Servo am Empfänger entsprechend porportional ansteuern.

 

Die beiden folgenden Videos veranschaulichen Beides. Im Demo1 sendet der Arduino einfach eine willkürlich programmierte Abfolge von Steuerbefehlen an den Eingangskanal des Senders. Ein testweise am Empfänger angeschlossenes Servo folgt diesen Befehlen.

Im zweiten Demo ermittelt der Arduino über einen Ultraschallsensor die Entfernung zum nächsten Hindernis und stellt den Eingangskanal des Senders proportional zu diesem Wert ein.

Funktionsprinzip

Die Umsetzung ist im Grunde ganz simpel. Man ersetzt einfach den klassischen Geber (Poti, Steuerknüppel...) durch einen Digital-Analog-Converter (DAC), der vom Arduino angesteuert werden kann. In meinen Beispielen hier verwende ich einen MCP4725 auf einem kleinen Breakout Board.

 

Der Arduino kommuniziert mit diesem DAC über die I²C Schnittstelle, die lediglich aus zwei physikalischen Leitungen besteht. Die Betriebsspannung für den DAC kann 2,7 bis 5,5 Volt betragen und kommt direkt vom Anschlussport des Senders.

 

Voraussetzungen hierfür ist natürlich, dass die Potis im Sender mit einer Spannung in diesem Bereich betrieben werden. Zumindest bei Computersendern dürfte das stets der Fall sein, da die Prozessoren in der Regel mit 3,3 oder 5 Volt laufen. Auf dem Ausgang des DAC wird eine Spannung ausgegeben, die sich gesteuert vom Arduino von 0 Volt bis zur vollen Betriebsspannung linear einstellen lässt. Das entspricht genau dem Schleifer des linearen Potis.

 

Beim MCP4725 handelt es sich um einen 12 Bit DAC. Das bedeutet, der DAC kann die Ausgangsspannung mit einer Auflösung von 4096 Schritten einstellen. Für unsere Zwecke ist dies mehr als genug.

 

Verkabelung

 

Auf nebenstehendem Bild wird schematisch die Verkabelung des DAC-Moduls gezeigt.

 

Die I²C Leitungen laufen von SCL zu Port A5 und von SDA zu Port A4.

 

OUT, GND und VCC werden wie zuvor geschildert direkt im Sender angeschlossen. Dazu ist es natürlich erforderlich, zuvor mit einem Messgerät den Steckplatz im Sender durchzumessen, um die Betriebsspannung und die Belegung der PINs zu ermitteln.

Programmierung

Für die Nutzung des DACs aus einem Arduino heraus benötigt man zunächst eine geeignete Library. Ich habe hier die Library "MyMCP4725" von Retian aus Österreich verwendet, die man auf seiner sehr guten Homepage hier herunterladen kann. Wer mehr über den DAC und dessen Nutzung wissen möchte, findet auf dieser Seite eine ausgezeichnete und sehr verständlich geschriebene Anleitung.

 

Im Sketch muss man zunächst die richtige I²C Adresse des DAC angeben, damit mit diesem kommuniziert werden kann. Die verwendete Adresse hängt vom Modul ab. Meine Module verwenden die Adresse 0x60, die bei Bedarf durch eine Lötbrücke auf 0x61 geändert werden kann.

 

Da die Kommunikation über den I²C-Bus einen Zeitverlust bedeutet, sollte man die Geschwindigkeit des Busses so schnell wie möglich einstellen (hier 400 KHz).

 

Auf weitere Details zum DAC wie der Beschreibung des EEPROMs zur Änderung des Defaultwertes (im Auslieferungszustand 50%) wird an dieser Stelle nicht weiter eingegangen.

 

Für das Setzen des Ausgabewertes empfiehlt sich die Nutzung des map-Kommandos, mit dessen Hilfe sehr leicht jeder Wertebereich auf die 12 Bit Auflösung des DAC abgebildet werden kann.

 

Im Downloadbereich unten können die beiden in den Videos laufenden Demoprogramme heruntergeladen werden, die gerne als Ausgangsbasis für eigene Projekte genutzt werden dürfen.

Download Demoprogramme

Download
MCP4725-Demos.zip
Komprimiertes Archiv im ZIP Format 2.4 KB