RC-Flugzeug Positionslichter mit Arduino

Scale position Lights mit Arduino,

Nun ist es soweit und ich kann endlich mal eine Kleinigkeit veröffentlichen. 
Die Idee war es eine alte Robbe Charter wieder zum Leben zu erwecken. (darüber werde ich später berichten) 
Da das Modell es mehr als Verdient hat wollte ich es ein wenig „Scale“ aufbauen und da dürfen natürlich Positions Lichter auch nicht fehlen.

Klar kann man kaufen einbauen fertig! Aber warum?! Selbst gemacht ist doch immer besser. 

Mögliche Funktionen
  • Steuern von 5 LED´s (erweiterung möglich)
  • Auslesen eines SBUS Signals des Empfängers zur Steuerung von bis zu 9 unterschiedlichen Modis.
  • Einlesen von verschiedenen Kombinationen aus Schaltern.
    2wege, 3wege, 2x2wege, 2x3wege, 1×2&1x3wege.
  • Scale Modus, Blink Modus und Lauflicht sind vorbereitet.
Benötigtes Material
  • Arduino Nano/Uno (mini wäre auch möglich)
  • LED´s (ACHTUNG maximal Ausgangsleistung des Arduinos beachten) Ich verwende superhelle mit 20mA 
  • Vorwiderstände (in meinem Fall 150ohm)
  • Kleinmaterial (Leitungen, Schrumpfschlauch usw.)
Der Aufbau

Ich werde hier keine fertig verlötete Steuerung zeigen sondern lediglich meinen Aufbau auf dem Bredboard, da ich zum jetzigen Zeitpunkt noch nicht genau weiß wie es hinter im Flieger verbaut wird.

Der elektrische aufbau gestaltet sich denkbar einfach und sollte von jedem easy durchgeführt werden können. 

Arduino Positions Lichter für RC Flugzeuge

Die LED´s werden an die PWM fähigen digitalen I/O´s über einen Widerstand angeschlossen. 

Sollte man für die Steuerung eine andere Spannungsversorgung benutzen als für den Empfänger, dann ist es zwingend erforderlich die Masse bzw. minus der beiden miteinander zu verbinden. In meinem Bild kommt die Spannungsversorgung direkt vom Empfänger, was bei meinen Tests keine Probleme bereitet hat.
DIE BESSERE WEG IST DIE STEUERUNG GETRENNT VOM EMPFÄNGER ZU VERSORGEN UND NUR DIE MASSE ZU VERBINDEN. DANN KANN ES BEI EINEM EVENTUELLEN KURZSCHLUSS NICHT ZUM ABSCHALTEN DES EMPFÄNGERS KOMMEN.

Wie sieht es dann aus?

Wenn ihr das alles gemacht habt und den Code hoch ladet, dann sollte es ca so wie in dem Video aussehen. Das Video stammt von einer der ersten Versionen von mir die sich aber um einiges erweitert hat mittlerweile.

DAS GEHIRN DES GANZEN

Vorab sei gesagt ich habe mir das Programmieren durch lesen, Videos und ausprobieren selber beigebracht. Einige Codeabschnitte sind mit Sicherheit deutlich besser zu schreiben und vor allem kürzer zu halten.
ICH FREUE MICH ÜBER JEDEN TIPP IN DEN KOMMENTAREN

Nun aber zum eigentlichen Programm.
Ich habe versucht das gesamte Programm so übersichtlich und einfach wie möglich zu halten, das jedermann es nachvollziehen kann und nach seinen Vorstellungen erweitern darf.  Viele Dinge sind im Code Kommentiert so das ihr wisst wo ihr was ändern könnt und auf was es Einfluss hat.

Wie oben erwähnt, gibt es fünf verschiedene Möglichkeiten was die Schalter-Kombinationen betrifft.

//SBUS SWITCH MODES         //WHAT TYPE OF SWITCHES DO YOU USE AT THE SBUS CHANNELS?
#define SBUSswitchMode 2    // 1 = BOTH 2 WAY SWITCHES (HIGH LOW)
                            // 2 = BOTH 3 WAY SWITCHES (HIG MID LOW)
                            // 3 = FIRST 2 WAY SECOND 3 WAY (HIGH MID & HIGH MID LOW)
                            // 4 = ONE 2 WAY SWITCH (HIGH LOW)
                            // 5 = ONE 3 WAY SWITCH (HIGH MID LOW)

Solltet ihr euch für Modus 3 entscheiden dann ist es wichtig das der Erste Kanal der 2 Wege Schalter ist. 

Welchen Kanal Ihr einlesen wollt könnt ihr mit den beiden Werten verändern

//SBUS CHANNEL NUMBER
#define SBUSchannel_1 5 //CHANGE IT TO YOUR RC CHANNEL
#define SBUSchannel_2 9 //CHANGE IT TO YOUR RC CHANNEL

Der Bereich Kind of Modes ist dafür da die Programmieretn Funktionen (Modis) auf eine andere Schalterkombination zu legen und die Funktionen ggf. umzubenennen. Ich habe Sie für den Anfang erstmal mode_1() usw. genannt. 

//KIND OF MODES
#define MODE1 mode_1();
#define MODE2 mode_2();
#define MODE3 mode_3();
#define MODE4 mode_4();
#define MODE5 mode_5();
#define MODE6 mode_6();
#define MODE7 mode_7();
#define MODE8 mode_8();
#define MODE9 mode_9();

Solltest du hier den Funktionsnamen ändern sprich, mode_1(); in Blinken(); umbenennen, dann musst du die Funktion (weiter unten im Code) natürlich mit umbenennen.

Eine Tabelle welche Schalterkombination für welchen Modus ist findest du hier.

Download Links

Ich möchte in diesem Beitrag nicht die Dateien zur Verfügung stellen sondern auf meine Repository verweisen. Dort findet Ihr immer die letzte Version als „master-branch“
https://github.com/Peschi90/ScalePlaneLights
Für die kommunikation mit SBUS ist außerdem eine Libary von nöten. Diese Findest du hier.
https://github.com/fdivitto/sbus

Ich habe den Code soweit Kommentiert, das man sich gut zurecht finden sollte.

Bei Fragen stehe ich gerne zur Verfügung und mache ggf. nochmal einen Erklärungsbeitrag, der sich auf den Code bezieht.