Moin,
für meinen MST Scaler habe ich mir eine Lichtsteuerung gebaut, die ich hier im Detail vorstellen will.
Hintergrund dazu war, dass bei mir zum einen keine andere Steuerung so richtig funktioniert hat, mir zum anderen aber auch so einige Funktionen gefehlt haben. Und der Basteltrieb war natürlich auch ausschlaggebend
Hier ist das ganze zusammengefasst im Video, danach gehe ich auf die Details ein.
Funktionen
Vorraussetzungen
(Diese Anforderungen sind das, was man benötigt, um das 1:1 nachzubauen, weniger Funktionen gehen natürlich immer)
Im Moment sind drei Komponenten verbaut, zwei Arduino Nanos (für Karo und Chassis) sowie ein Gyro (im Chassis). Diese drei werden über den I2C-Bus verbunden um Daten auszutauschen. Man muss also zu jeder Komponente nur 4 Kabel führen, die zwei Bus-Leitungen sowie Strom und Masse.
Der Nano im Chassis ist dabei der Master- er übernimmt den Sensorteil: Gyro auslesen, Akkustand prüfen, RC-Kanäle einlesen. Einzige "Ausgabe" sind die beiden Status-LEDs, da diese in der Stoßstange verbaut sind.
Der Nano in der Karo ist der Slave_1 - er empfängt die Werte vom Master und setzt entsprechend die Beleuchtung um.
Der Name deutet es bereits an, man kann dieses System mit mehreren Nanos erweitern, z.B. für einen Anhänger. Das wäre dann Slave_2.
Der Gyro sollte dicht am Chassis-Nano verbaut werden, da er von diesem auch die 3,3V bezieht. Da der Gyro "fest" am Chassis verbaut werden muss, sollte er mit dem Nano zusammen auf einer Platine sitzen, das erleichtert auch die Verkabelung.
Anschlüsse
Der I2C-Bus benötigt zwingend die Pins A4 und A5 auf dem Nano, diese sind also reserviert. Alle anderen Pins können frei belegt werden, auch für die Eingänge vom RC-Empfänger.
Eine Besonderheit sind die PWM-Pins. Auf diesen Pins können LEDs gedimmt, also in ihrer Helligkeit beeinflusst werden. Pins ohne PWM können nur (5V) an oder aus.
Die PWM-Pins auf einem Nano sind 3, 5, 6, 9, 10 und11.
Da die Ausgänge vom Arduino nicht wirklich belastet werden können (mehr als eine LED wird schon kritisch) sollte man grundsätzlich alle Ausgänge nur als Schaltsignal benutzen und dieses dann verstärken.
Ich habe bei mir noch ULN2803-Transistor-Relays gefunden, man kann aber auch einfach einen Transistor pro Ausgang nehmen.
Welche Ausgänge das Programm unterstützt, wird in den Sketches erläutert.
Programmierung
Die beiden Sketches für Master und Slave_1 unterteilen sich zur besseren Übersicht jeweils in mehrere Dateien, die auch genau so in den Sketch-Ordner gehören.
Die einzigen Änderungen, die man machen "muss" sind alle in der Datei 0_PinConnections.ino, dort wird die Pin-Belegung der einzelnen Ein- und Ausgänge festgelegt.
Optionale Änderungen, zum Beispiel Blink- und Dimmzeiten, Helligkeiten oder Verzögerungen (bis etwas leuchtet) sind alle in der Datei 1_UserConfig.ino konfiguriert.
In allen anderen Dateien muss eigentlich nichts geändert werden, wenn man nicht Änderungen im Programm-Ablauf vornehmen will.
Theoretisch kann auch alles wieder in einem Sketch und von einem einzelnen Nano gesteuert werden, da die Variablen für die Datenübertragung in beiden Teilen identisch sind. Man muss also nur die relevanten Teile kopieren, dann sollte es auch funktionieren.
Ich habe mich bemüht, vernünftig zu dokumentieren und den Code auch halbwegs aufzuräumen, will aber nicht ausschließen, dass ich manche Sachen überkompliziert gelöst habe.
Noch ein paar Bilder vom Einbau:
Das ist der Nano für die Karo mit zwei ULN-ICs. Von diesem gehen nur vier Kabel über einen Stecker Richtung Chassis, man kann die Karo also mit einem Handgriff abnehmen.
Der Testaufbau mit einem Breadboard ist übrigens mehr als empfehlenswert:
Bevor die erste LED verlötet wird, kann man so wirklich alle Funktionen durchtesten. Erst wenn auf dem Brett alles funktioniert, lötet man die LEDs zusammen. Dann ist das Schlimmste überstanden und der Rest ist nur noch Fleißarbeit.
Details zum Auswerten des RC-Empfängers
Wie bereits erwähnt war der Grund für das alles ja, dass andere Steuerungen bei mir nicht richtig funktionierten.
Das lag vorallem an einer Funktion "pulseIn" - diese kann ein PWM-Signal einlesen, allerdings "blockiert" sie damit den Arduino, bis sie fertig ist. Wenn man mehrere Kanäle gleichzeitig einlesen will, führt das schnell zu Fehlern. Bei mir kam z.B. gar nichts mehr an, sobald zwei Kanäle abgefragt wurden.
Die Lösung dafür ist eine Abfrage über Interrupts statt pulseIn. Das ist im ersten Moment sehr viel komplizierter, aber dafür eben auch sehr viel schneller und vorallem zuverlässiger. Der gesamte Teil dazu ist in der Datei 4_PWMRead.ino untergebracht. Alles was man davon braucht ist das Array RC_in, den Rest muss man also garnicht verstehen
Quellen
Ich habe mir das natürlich nicht alles allein ausgedacht.
Gerade das PWM-Zeug für den RC-Empfänger ist schon ne Hausnummer. Das habe ich daher nahezu unverändert von Kelvin Nelson übernommen:
Desweiteren habe ich noch folgende Quellen als Ideengeber und Anlaufstelle genutzt:
und natürlich auch Rockracers Steuerung:
Ausblick
"Fertig" ist natürlich kein Wort für einen Modellbauer. Nächster Punkt für meine Steuerung ist die Integration von einem kleinen OLED-Display, um die Akkuspannungen und die Temperatur vom Gyro-Sensor auszugeben.
Das funktioniert hier auf meinem Breadboard schon problemlos, das Display wird ja auch über den I2C-Bus angesteuert. Das Problem ist eher, dass mir der Innenraum noch fehlt, da muss also erst noch gebaut werden.
Danach könnte man über eine Hupe oder einen Ton-Generator/Lautsprecher nachdenken, auch wenn ich da zumindest im Moment noch kein Freund von bin. Aber ein kleines Piepsen für die Unterspannungswarnung wäre ganz sinnvoll.
für meinen MST Scaler habe ich mir eine Lichtsteuerung gebaut, die ich hier im Detail vorstellen will.
Hintergrund dazu war, dass bei mir zum einen keine andere Steuerung so richtig funktioniert hat, mir zum anderen aber auch so einige Funktionen gefehlt haben. Und der Basteltrieb war natürlich auch ausschlaggebend
Hier ist das ganze zusammengefasst im Video, danach gehe ich auf die Details ein.
Funktionen
- Steuerung über Gas/Lenkung und Schaltkanal vom RC-Empfänger
- automatisch:
- Bremslicht
- Rückfahrlicht (beim zweiten "Bremsen" an der Funke)
- Blinker im Stand und bei Lenkeinschlag an, werden bei Geradeausfahrt wieder ausgeschaltet
- verzögerte Innenraumbeleuchtung bei Stillstand
- Xenon-Einschaltsequenz für Haupt- und Zusatzscheinwerfer
- Bestätigung über Schalteingaben und Fahrzeugzustand über RGB Status-LEDs
- manuell über Schaltkanal (Mehrfachklicks):
- 1x: Scheinwerfer/Rücklicht, Positionslicht an oder aus ("Abblendlicht")
- 2x: Zusatzlicht, Nebelscheinwerfer an oder aus, Scheinwerfer auf volle Leistung ("Fernlicht")
- "Fernlicht an" (2x drücken) schaltet auch Scheinwerfer ein (alles an), "Abblendlicht aus" (1x drücken) schaltet alles alles aus
- 3x: Blinksystem an/aus
- 4x: Warnblinkanlage
- 5x: Modus-Umschalter für die Status-LEDs
- Aus oder Nebelscheinwerfer
- Standardlicht (z.B. Lila) oder Nebelscheinwerfer
- Neigungssensor (leuchtet von Grün nach Rot je nach Neigung, ab Schwellwert wird Kippalarm ausgegeben (Längs- und Querachse)
Vorraussetzungen
(Diese Anforderungen sind das, was man benötigt, um das 1:1 nachzubauen, weniger Funktionen gehen natürlich immer)
- 2x Arduino Nano
- 1x Gyro MPU 6050
- 1x ausreichend dimensioniertes BEC
- viele bunte LEDs, 2 RGB-LEDs
- passende Widerstände für die LEDs
- passende Widerstände für die Akkuspannung (z.B. 9x 10k)
- Verstärkungsschaltung oder -IC für die LEDs (Transistoren oder ein ULN2803)
- 10-20m Litze/Kabel
Im Moment sind drei Komponenten verbaut, zwei Arduino Nanos (für Karo und Chassis) sowie ein Gyro (im Chassis). Diese drei werden über den I2C-Bus verbunden um Daten auszutauschen. Man muss also zu jeder Komponente nur 4 Kabel führen, die zwei Bus-Leitungen sowie Strom und Masse.
Der Nano im Chassis ist dabei der Master- er übernimmt den Sensorteil: Gyro auslesen, Akkustand prüfen, RC-Kanäle einlesen. Einzige "Ausgabe" sind die beiden Status-LEDs, da diese in der Stoßstange verbaut sind.
Der Nano in der Karo ist der Slave_1 - er empfängt die Werte vom Master und setzt entsprechend die Beleuchtung um.
Der Name deutet es bereits an, man kann dieses System mit mehreren Nanos erweitern, z.B. für einen Anhänger. Das wäre dann Slave_2.
Der Gyro sollte dicht am Chassis-Nano verbaut werden, da er von diesem auch die 3,3V bezieht. Da der Gyro "fest" am Chassis verbaut werden muss, sollte er mit dem Nano zusammen auf einer Platine sitzen, das erleichtert auch die Verkabelung.
Anschlüsse
Der I2C-Bus benötigt zwingend die Pins A4 und A5 auf dem Nano, diese sind also reserviert. Alle anderen Pins können frei belegt werden, auch für die Eingänge vom RC-Empfänger.
Eine Besonderheit sind die PWM-Pins. Auf diesen Pins können LEDs gedimmt, also in ihrer Helligkeit beeinflusst werden. Pins ohne PWM können nur (5V) an oder aus.
Die PWM-Pins auf einem Nano sind 3, 5, 6, 9, 10 und11.
Da die Ausgänge vom Arduino nicht wirklich belastet werden können (mehr als eine LED wird schon kritisch) sollte man grundsätzlich alle Ausgänge nur als Schaltsignal benutzen und dieses dann verstärken.
Ich habe bei mir noch ULN2803-Transistor-Relays gefunden, man kann aber auch einfach einen Transistor pro Ausgang nehmen.
Welche Ausgänge das Programm unterstützt, wird in den Sketches erläutert.
Programmierung
Die beiden Sketches für Master und Slave_1 unterteilen sich zur besseren Übersicht jeweils in mehrere Dateien, die auch genau so in den Sketch-Ordner gehören.
Die einzigen Änderungen, die man machen "muss" sind alle in der Datei 0_PinConnections.ino, dort wird die Pin-Belegung der einzelnen Ein- und Ausgänge festgelegt.
Optionale Änderungen, zum Beispiel Blink- und Dimmzeiten, Helligkeiten oder Verzögerungen (bis etwas leuchtet) sind alle in der Datei 1_UserConfig.ino konfiguriert.
In allen anderen Dateien muss eigentlich nichts geändert werden, wenn man nicht Änderungen im Programm-Ablauf vornehmen will.
Theoretisch kann auch alles wieder in einem Sketch und von einem einzelnen Nano gesteuert werden, da die Variablen für die Datenübertragung in beiden Teilen identisch sind. Man muss also nur die relevanten Teile kopieren, dann sollte es auch funktionieren.
Ich habe mich bemüht, vernünftig zu dokumentieren und den Code auch halbwegs aufzuräumen, will aber nicht ausschließen, dass ich manche Sachen überkompliziert gelöst habe.
Noch ein paar Bilder vom Einbau:
Das ist der Nano für die Karo mit zwei ULN-ICs. Von diesem gehen nur vier Kabel über einen Stecker Richtung Chassis, man kann die Karo also mit einem Handgriff abnehmen.
Der Testaufbau mit einem Breadboard ist übrigens mehr als empfehlenswert:
Bevor die erste LED verlötet wird, kann man so wirklich alle Funktionen durchtesten. Erst wenn auf dem Brett alles funktioniert, lötet man die LEDs zusammen. Dann ist das Schlimmste überstanden und der Rest ist nur noch Fleißarbeit.
Details zum Auswerten des RC-Empfängers
Wie bereits erwähnt war der Grund für das alles ja, dass andere Steuerungen bei mir nicht richtig funktionierten.
Das lag vorallem an einer Funktion "pulseIn" - diese kann ein PWM-Signal einlesen, allerdings "blockiert" sie damit den Arduino, bis sie fertig ist. Wenn man mehrere Kanäle gleichzeitig einlesen will, führt das schnell zu Fehlern. Bei mir kam z.B. gar nichts mehr an, sobald zwei Kanäle abgefragt wurden.
Die Lösung dafür ist eine Abfrage über Interrupts statt pulseIn. Das ist im ersten Moment sehr viel komplizierter, aber dafür eben auch sehr viel schneller und vorallem zuverlässiger. Der gesamte Teil dazu ist in der Datei 4_PWMRead.ino untergebracht. Alles was man davon braucht ist das Array RC_in, den Rest muss man also garnicht verstehen
Quellen
Ich habe mir das natürlich nicht alles allein ausgedacht.
Gerade das PWM-Zeug für den RC-Empfänger ist schon ne Hausnummer. Das habe ich daher nahezu unverändert von Kelvin Nelson übernommen:
Read PWM, Decode RC Receiver Input, and Apply Fail-Safe
Easy to use code to measure PWM signals (<2.5Khz) plus a dedicated function to calibrate the input from an RC receiver, including fail-safe. By kelvineyeone.
create.arduino.cc
Desweiteren habe ich noch folgende Quellen als Ideengeber und Anlaufstelle genutzt:
Lichtsteuerung & mehr mit Arduino - Rockcrawler.de
Hallo Zusammen Auf Vorschlag des Users donaldsneffe eröffne ich diesen Thread um über Lichtsteuerungen auf Arduino-Basis zu berichten, welche ich nun in 2 Projekten genutzt habe. Dabei wird nicht nur das Licht gesteuert, sondern auch viele andere Dinge…
www.rockcrawler.de
Open Source Lights - Arduino based RC Light Controller - RC Groups
New Product Open Source Lights - Arduino based RC Light Controller DIY Electronics
www.rcgroups.com
und natürlich auch Rockracers Steuerung:
Anleitung - Komplexe Lichtsteuerung für unter 5 EUR (Arduino)
Arduino Lichtsteuerung für RC-Modelle für wenig Geld selber bauen. Licht, Blinker, Hupe und Sound, alles ist möglich. Wie es geht, wird in diesem Beitrag an einem fertigen Beispiel gezeigt.
www.rc-modellbau-portal.de
Ausblick
"Fertig" ist natürlich kein Wort für einen Modellbauer. Nächster Punkt für meine Steuerung ist die Integration von einem kleinen OLED-Display, um die Akkuspannungen und die Temperatur vom Gyro-Sensor auszugeben.
Das funktioniert hier auf meinem Breadboard schon problemlos, das Display wird ja auch über den I2C-Bus angesteuert. Das Problem ist eher, dass mir der Innenraum noch fehlt, da muss also erst noch gebaut werden.
Danach könnte man über eine Hupe oder einen Ton-Generator/Lautsprecher nachdenken, auch wenn ich da zumindest im Moment noch kein Freund von bin. Aber ein kleines Piepsen für die Unterspannungswarnung wäre ganz sinnvoll.
Anhänge
-
38,6 KB Aufrufe: 69