Rockracer
Mitglied
Ich bin in jüngster Zeit in die Welt der Scaler vorgedrungen (SCX10 mit Sawback-Karo) und wenn man ein Modell realistischer machen möchte, ist eine möglichst naturgetreue Beleuchtung natürlich ein wichtiges Thema. Wie man sich eine Beleuchtung aus LEDs selbst zusammenlötet, ist schon in anderen Berichten hier im Forum geschildert, deswegen schreibe ich jetzt nichts dazu. In diesem Bericht geht es um die Steuerung der LEDs.
Edit BAX:
Wichtiger Hinweis! Dieses Projekt ist nicht für Personen geeignet, die eine schnelle Lösung suchen, bei der sie nur einfach Stecker anstöpseln brauchen. Dafür muß man in den suaren Apfel beißen und fertige Lösungen kaufen, die dann natürlich etwas teurer sind.
Um diese Beleuchtungssteuerung zu bauen ist es empfehlenswert, auch ein paar Werkzeuge und Kleinmaterial zur Hand zu haben. Anzuraten wäre ein Lötkolben, Kabel (Servokabel, Y-Servokabel, einpolige Kabel aus dem Arduinozubehör), Pfostenleisten und wenn möglich, ein einfaches Multimeter, um auch mal Spannungen messen zu können. Natürlich braucht man auch handwerkliches Geschick und die Bereitschaft, sich einfache elektrotechnische und Programmierkenntnisse anzueignen.
Wenn man aber bereit ist, etwas Eigenleistung zu erbringen, wird man mit einer sehr flexiblen und ausbaufähigen Beleuchtungssteuerung belohnt.
Hier noch ein paar Ablegerthemen, die hier herausgelöst bzw. gesondert behandelt wurden:
Mein Ziel für das laufende Projekt ist folgende Steuerung
Hardware
Den Arduino gibt es in unterschiedlichen Versionen (uno, nano, etc.). Im Original sind die Teile jetzt auch nicht richtig günstig, es gibt aber Klone, die es schon für sehr kleines Geld gibt. Ich habe für mein Projekt den Arduino Nano gewählt. Der ist recht klein und den gibt’s als Klon in der Bucht schon für unter 5 EUR. Kleiner Tipp: bei den günstigsten Angeboten sind oft die Pin-Leisten noch nicht verlötet. In Anbetracht meiner bescheidenen Löt-Fähigkeiten habe ich direkt ein Modell mit verlöteten Leisten gewählt
Einen Überblick gibt folgendes Schaltbild:
Dazu noch ein paar kurze Erläuterungen:
Die Stromversorgung des Arduino kann im laufenden Betrieb entweder über den +5V-Pin erfolgen oder mit 7 – 12 Volt über den VIN-Pin. Wenn man den +5V-Pin nutzt, sollten dort auch konstant 5 Volt anliegen (z.B. über ein 5-Volt-BEC). Ich habe mich für den VIN-Pin entschieden und versorge den Arduino aus dem 2S-Fahrakku. Dazu habe ich eine „Versorgungsleitung“ an den Akkustecker des Fahrtreglers angelötet, die mit dem Arduino verbunden wird.
Hinweis: der Arduino kann auch über den USB-Anschluss (USB-Mini-B am Board) mit Strom versorgt werden (5 Volt). Wenn man den Arduino programmiert und danach testen will, braucht man also keine zusätzliche externe Stromversorgung, sondern kann einfach das USB-Kabel angesteckt lassen und der Arduino startet das übertragene Programm und führt es aus.
Beim Anschluss von Verbrauchern an den Arduino muss man beachten, dass die einzelnen Pins nicht überlastet werden. Empfohlen sind pro Pin 20mA, Maximum sind 40mA. Auf LEDs übertragen entspricht das einer LED pro Pin. Natürlich gibt es auch diverse Lösungen, um diese Beschränkung zu umgehen, aber für meine Zwecke kann ich gut mit 1 LED pro Pin leben.
Um die In- und Outputs mit dem Arduino zu verbinden, kann man sehr gut die „Weibchen“ von JR-Steckern („Servo-Stecker“) benutzen, die passen genau auf die Pins. Bei der Verbindung der Inputs (Gas, Schalter) ist zu beachten, dass es nicht ausreicht nur die Impulssignale abzugreifen, sondern man muss auch die Masse vom Empfänger mit dem Masse-Anschluss vom Arduino verbinden, sonst bekommt man kein vernünftiges Signal ausgelesen.
Und damit sind wir auch schon beim nächsten Thema, denn der nano hat nur zwei Masse-Pins (GND). Das ist natürlich zu wenig, denn ich benötige schon allein für die LEDs 8 mal Masse. Eine einfache Lösung besteht darin, alle Masse-Kabel zusammen zu löten und dann an einen GND-Pin anzuschließen. Das ist für meinen Geschmack aber nicht flexibel genug. Eine andere Lösung besteht in einem sogenannten BreadBoard mit Masse Bus. Das ist ein Steckbrett, auf das der Nano aufgesteckt wird und das schon zu jedem Pin einen Masse-Anschluss zur Verfügung stellt. Auch das habe ich verworfen, weil die Boards mehr kosten als der nano selbst und weil ich auch nicht so viel Platz unter der Karo habe.
Ich habe stattdessen eine 20er-Pin-Leiste mit 2,54 mm Raster (gibt’s für kleines Geld in der Bucht) auf 15 Pins gekürzt und die Pins zusammen gelötet. Um das Löten zu vereinfachen, habe ich eine Leiste genommen, bei der die Pins am unteren Ende um 90 Grad abgewinkelt sind.
Die Pin-Leiste habe ich dann mit Sekundenkleber von außen an die Pin-Leisten des nano geklebt. Zwei der oben schon erwähnten JR-Stecker verbinden nun die beiden GND-Pins mit den Masse Bussen, so dass ich jetzt direkt neben jedem Pin auch einen Masse-Pin habe:
Ja, ich weiß, mit dem Lötergebnis gewinne ich keinen Schönheitspreis, aber ich habe immerhin einen funktionierenden Masse-Bus
Ich habe Stecker mit 3 Anschlüssen genommen, weil ich die noch da hatte. Ich habe später gesehen, dass es solche Stecker auch mit 2 Anschlüssen gibt. Die werde ich dann für das nächste Projekt verwenden
Es war zwar ein wenig Arbeit, alle In- und Outputs mit den Steckern zu versehen, aber nun kann ich alle Verbindungen einfach aufstecken und auch leicht wieder ändern.
Nun musste ich noch über die finale Verkabelung nachdenken. Da ich sowohl eine Verbindung zum Chassis (Akku, Empfänger) als auch zur Karo (LEDs) benötige, musste leider eine Steckerlösung her, damit ich Karo und Chassis komplett trennen kann. Ich habe mich für die Befestigung des nano an der Karo entschieden, da dort mehr Anschlüsse notwendig sind (8 LEDs und 1 Hupe, jeweils Plus und Minus --> 18 Verbindungen). Vom Chassis aus sind es deutlich weniger (Strom, Gas, Licht, Hupe). Ich habe lange nach einem Stecker mit 8 Pins gesucht, der sicher schließt und leicht wieder zu öffnen ist. Im Bereich der PC-Stromversorgung bin ich fündig geworden:
Das Gesamtergebnis sieht dann so aus:
Ist zwar immer noch nicht super-übersichtlich, aber ich musste ja auch einige Verbindungen unterbringen ...
Programmierung (Sketches)
Nachdem die Verkabelung stand, habe ich mich um das Programm gekümmert (welches beim Arduino übrigens Sketch genannt wird, warum auch immer ...) Die Entwicklungsumgebung für die Programmierung kann man auf der Arduino-Homepage kostenlos runterladen. Ich habe unter Windows 10 gearbeitet. Dort muss man noch nicht mal einen Treiber installieren, einfach den nano per USB-Kabel mit dem PC verbinden und schon wird er erkannt und man kann loslegen, zumindest, dachte ich das, bei mir hat es natürlich so erst mal nicht funktioniert
Ich habe einiges ohne Erfolg ausprobiert und mich dann an den ebay-Verkäufer gewendet. Der kam zu dem Schluss, dass der nano wohl defekt sei und hat mir direkt einen anderen zugesendet. Und siehe da! Dieser funktionierte auf Anhieb
Ein bisschen blöd ist, dass man beim Arduino nicht debuggen kann, also das Programm schrittweise ausführen, um Fehler zu finden. Die Fehlersuche wird aber immerhin durch einen seriellen Monitor unterstützt, auf dem man die Werte der Variablen ausgeben kann.
Für das Steuerungsprogramm gibt es diverse Vorlagen in den einschlägigen Foren. Ich habe eines der Programme kopiert (ich weiß leider nicht mehr genau wo, deswegen kann ich den Urheber nicht lobend erwähnen) und es für meine Zwecke angepasst.
Bevor ich Euch den Programmcode gebe, noch ein paar Hinweise:
Natürlich kann man noch viel mehr realisieren. Sehr einfach umzusetzen sind z.B. automatische Blinker abhängig vom Servokanal. Es gibt auch Kollegen, die autonomes Fahren ausprobieren. Das ist gar nicht so weit hergeholt, denn es gibt für ein paar Euro alle möglichen Zusatzmodule (Infrarot-, Ultraschall-, Temperatur-, Helligkeitssensoren), der Fantasie sind also keine Grenzen gesetzt
Ich werde auf jeden Fall noch etwas in Richtung Hupe ausprobieren, aber dazu später mehr. Ich denke, dass es dann auch noch ein kurzes Video geben wird, ist ja sonst doch etwas trocken das Thema
Edit BAXL:
Es gibt in den Ressourcen noch einen weiteren Sketch, dessen Anwendung hier aber nicht beschrieben wurde, mit den Kommentaren im Sketch ist die Verkabelung aber quasi selbsterklärend.
Autolichtsteuerung für Arduino Sketch
Edit BAX:
Wichtiger Hinweis! Dieses Projekt ist nicht für Personen geeignet, die eine schnelle Lösung suchen, bei der sie nur einfach Stecker anstöpseln brauchen. Dafür muß man in den suaren Apfel beißen und fertige Lösungen kaufen, die dann natürlich etwas teurer sind.
Um diese Beleuchtungssteuerung zu bauen ist es empfehlenswert, auch ein paar Werkzeuge und Kleinmaterial zur Hand zu haben. Anzuraten wäre ein Lötkolben, Kabel (Servokabel, Y-Servokabel, einpolige Kabel aus dem Arduinozubehör), Pfostenleisten und wenn möglich, ein einfaches Multimeter, um auch mal Spannungen messen zu können. Natürlich braucht man auch handwerkliches Geschick und die Bereitschaft, sich einfache elektrotechnische und Programmierkenntnisse anzueignen.
Wenn man aber bereit ist, etwas Eigenleistung zu erbringen, wird man mit einer sehr flexiblen und ausbaufähigen Beleuchtungssteuerung belohnt.
Hier noch ein paar Ablegerthemen, die hier herausgelöst bzw. gesondert behandelt wurden:
- Fertiges/gekauftes Lichtset an Arduino Lichtsteuerung anschließen
- Lichtsteuerung für Arduino - Nachbauthema
- LEDs mit dem Arduino über Transistoren ansteuern
- Arduino - Lichsteuerung für RC Flugzeug
- Lichsteuerung über RC-Empfänger mit (Arduino) Nano - Experimentierthema
- Grundlagen zum Anschluß von LEDs
Mein Ziel für das laufende Projekt ist folgende Steuerung
- Ein-/Ausschalten der gesamten Lichtanlage über einen Schalter an der Fernsteuerung
- Front- und Rücklicht über Schaltkanal
- Bremslicht bei Stillstand
- Warnblinker nach x Sekunden Stillstand
- Hupe (später)
Hardware
Den Arduino gibt es in unterschiedlichen Versionen (uno, nano, etc.). Im Original sind die Teile jetzt auch nicht richtig günstig, es gibt aber Klone, die es schon für sehr kleines Geld gibt. Ich habe für mein Projekt den Arduino Nano gewählt. Der ist recht klein und den gibt’s als Klon in der Bucht schon für unter 5 EUR. Kleiner Tipp: bei den günstigsten Angeboten sind oft die Pin-Leisten noch nicht verlötet. In Anbetracht meiner bescheidenen Löt-Fähigkeiten habe ich direkt ein Modell mit verlöteten Leisten gewählt
Einen Überblick gibt folgendes Schaltbild:
Dazu noch ein paar kurze Erläuterungen:
- (1) – (30) --> Die Ziffern in Klammern von 1 – 30 dienen nur der technischen Nummerierung der Pins, sie spielen bei der Programmierung keine Rolle und können ignoriert werden.
- D0 - D13 --> digitale Pins, Nutzung als Input oder Output, liefern als Output 5 Volt, empfohlene Stromstärke 20mA (max. 40mA), werden im Programm nur mit Ihrer Nummer angesprochen (z.B. digitalWrite(2, 0) für Pin D2).
- A0 – A7 --> analoge Pins, Nutzung als Input oder Output, liefern als Output 5 Volt, empfohlene Stromstärke 20mA (max. 40mA), werden im Programm mit A und der entprechenden Nummer angesprochen (z.B. analogWrite(A2, 0) für A2).
- GND --> Masse (GrouND)
- VIN --> Stromversorgung Input (VoltageINput), empfohlen 7 – 12 Volt, maximal 6 – 20 Volt
- +5V --> Stromversorgung mit konstant 5V (Input oder Output)
- 3V3 --> Stromversorgung für Verbraucher mit konstant 3,3 Volt (Output)
Die Stromversorgung des Arduino kann im laufenden Betrieb entweder über den +5V-Pin erfolgen oder mit 7 – 12 Volt über den VIN-Pin. Wenn man den +5V-Pin nutzt, sollten dort auch konstant 5 Volt anliegen (z.B. über ein 5-Volt-BEC). Ich habe mich für den VIN-Pin entschieden und versorge den Arduino aus dem 2S-Fahrakku. Dazu habe ich eine „Versorgungsleitung“ an den Akkustecker des Fahrtreglers angelötet, die mit dem Arduino verbunden wird.
Hinweis: der Arduino kann auch über den USB-Anschluss (USB-Mini-B am Board) mit Strom versorgt werden (5 Volt). Wenn man den Arduino programmiert und danach testen will, braucht man also keine zusätzliche externe Stromversorgung, sondern kann einfach das USB-Kabel angesteckt lassen und der Arduino startet das übertragene Programm und führt es aus.
Beim Anschluss von Verbrauchern an den Arduino muss man beachten, dass die einzelnen Pins nicht überlastet werden. Empfohlen sind pro Pin 20mA, Maximum sind 40mA. Auf LEDs übertragen entspricht das einer LED pro Pin. Natürlich gibt es auch diverse Lösungen, um diese Beschränkung zu umgehen, aber für meine Zwecke kann ich gut mit 1 LED pro Pin leben.
Um die In- und Outputs mit dem Arduino zu verbinden, kann man sehr gut die „Weibchen“ von JR-Steckern („Servo-Stecker“) benutzen, die passen genau auf die Pins. Bei der Verbindung der Inputs (Gas, Schalter) ist zu beachten, dass es nicht ausreicht nur die Impulssignale abzugreifen, sondern man muss auch die Masse vom Empfänger mit dem Masse-Anschluss vom Arduino verbinden, sonst bekommt man kein vernünftiges Signal ausgelesen.
Und damit sind wir auch schon beim nächsten Thema, denn der nano hat nur zwei Masse-Pins (GND). Das ist natürlich zu wenig, denn ich benötige schon allein für die LEDs 8 mal Masse. Eine einfache Lösung besteht darin, alle Masse-Kabel zusammen zu löten und dann an einen GND-Pin anzuschließen. Das ist für meinen Geschmack aber nicht flexibel genug. Eine andere Lösung besteht in einem sogenannten BreadBoard mit Masse Bus. Das ist ein Steckbrett, auf das der Nano aufgesteckt wird und das schon zu jedem Pin einen Masse-Anschluss zur Verfügung stellt. Auch das habe ich verworfen, weil die Boards mehr kosten als der nano selbst und weil ich auch nicht so viel Platz unter der Karo habe.
Ich habe stattdessen eine 20er-Pin-Leiste mit 2,54 mm Raster (gibt’s für kleines Geld in der Bucht) auf 15 Pins gekürzt und die Pins zusammen gelötet. Um das Löten zu vereinfachen, habe ich eine Leiste genommen, bei der die Pins am unteren Ende um 90 Grad abgewinkelt sind.
Die Pin-Leiste habe ich dann mit Sekundenkleber von außen an die Pin-Leisten des nano geklebt. Zwei der oben schon erwähnten JR-Stecker verbinden nun die beiden GND-Pins mit den Masse Bussen, so dass ich jetzt direkt neben jedem Pin auch einen Masse-Pin habe:
Ja, ich weiß, mit dem Lötergebnis gewinne ich keinen Schönheitspreis, aber ich habe immerhin einen funktionierenden Masse-Bus
Ich habe Stecker mit 3 Anschlüssen genommen, weil ich die noch da hatte. Ich habe später gesehen, dass es solche Stecker auch mit 2 Anschlüssen gibt. Die werde ich dann für das nächste Projekt verwenden
Es war zwar ein wenig Arbeit, alle In- und Outputs mit den Steckern zu versehen, aber nun kann ich alle Verbindungen einfach aufstecken und auch leicht wieder ändern.
Nun musste ich noch über die finale Verkabelung nachdenken. Da ich sowohl eine Verbindung zum Chassis (Akku, Empfänger) als auch zur Karo (LEDs) benötige, musste leider eine Steckerlösung her, damit ich Karo und Chassis komplett trennen kann. Ich habe mich für die Befestigung des nano an der Karo entschieden, da dort mehr Anschlüsse notwendig sind (8 LEDs und 1 Hupe, jeweils Plus und Minus --> 18 Verbindungen). Vom Chassis aus sind es deutlich weniger (Strom, Gas, Licht, Hupe). Ich habe lange nach einem Stecker mit 8 Pins gesucht, der sicher schließt und leicht wieder zu öffnen ist. Im Bereich der PC-Stromversorgung bin ich fündig geworden:
Das Gesamtergebnis sieht dann so aus:
Ist zwar immer noch nicht super-übersichtlich, aber ich musste ja auch einige Verbindungen unterbringen ...
Programmierung (Sketches)
Nachdem die Verkabelung stand, habe ich mich um das Programm gekümmert (welches beim Arduino übrigens Sketch genannt wird, warum auch immer ...) Die Entwicklungsumgebung für die Programmierung kann man auf der Arduino-Homepage kostenlos runterladen. Ich habe unter Windows 10 gearbeitet. Dort muss man noch nicht mal einen Treiber installieren, einfach den nano per USB-Kabel mit dem PC verbinden und schon wird er erkannt und man kann loslegen, zumindest, dachte ich das, bei mir hat es natürlich so erst mal nicht funktioniert
Ich habe einiges ohne Erfolg ausprobiert und mich dann an den ebay-Verkäufer gewendet. Der kam zu dem Schluss, dass der nano wohl defekt sei und hat mir direkt einen anderen zugesendet. Und siehe da! Dieser funktionierte auf Anhieb
Ein bisschen blöd ist, dass man beim Arduino nicht debuggen kann, also das Programm schrittweise ausführen, um Fehler zu finden. Die Fehlersuche wird aber immerhin durch einen seriellen Monitor unterstützt, auf dem man die Werte der Variablen ausgeben kann.
Für das Steuerungsprogramm gibt es diverse Vorlagen in den einschlägigen Foren. Ich habe eines der Programme kopiert (ich weiß leider nicht mehr genau wo, deswegen kann ich den Urheber nicht lobend erwähnen) und es für meine Zwecke angepasst.
Bevor ich Euch den Programmcode gebe, noch ein paar Hinweise:
- Für eine LED gibt es nur „an“ oder „aus“, d.h. man kann sie nicht im klassischen Sinne dimmen. Da das menschliche Auge träge ist, gibt es aber trotzdem eine Möglichkeit. Wenn eine LED schnell genug hintereinander an- und ausgeschaltet wird, dann erkennt das menschliche Auge die einzelnen Schaltvorgänge nicht und nimmt die LED als gedimmt wahr. Dieses Verfahren nennt man Pulsweitenmodulation (PWM). Der Arduino beherrscht PWM, allerdings nur an den PINs 3,5,6,9,10,11. Ich habe diese PINs für Frontlicht und Rücklicht benutzt. So kann ich eine LED gleichzeitig als Rücklicht (gedimmt) und Bremslicht (nicht gedimmt) nutzen. Man kann so auch Fern- und Abblendlicht über eine LED realisieren, das habe ich aber nicht umgesetzt.
- Wenn man den Gaskanal des Empfängers über pulseIn() ausliest bekommt man typischerweise Werte zwischen ca. 1000 und ca. 2000 zurück, wobei 1000 = Vollgas rückwärts, 2000 = Vollgas vorwärts und 1500 = kein Gas ist. Auf einem 2-Positions-Schalter bekommt man dann typischerweise 1000 für „aus“ und 2000 für „ein“. Das sind aber nur grobe Richtwerte. Man sollte über den seriellen Monitor die tatsächlichen Werte prüfen.
- Während der Entwicklung wurde zwischenzeitlich wurde beim Hochladen des Sketches die folgende Fehlermeldung angezeigt:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Ich habe dank Internet die Ursache gefunden. Pin 0 darf nicht mit einem Kabel belegt sein, wenn man den Arduino an den PC angeschlossen hat, weil dieser Pin für die USB-Kommunikation genutzt wird. Wenn man Pin 0 nutzen möchte (so wie ich), dann muss man einfach das Kabel entfernen, während man mit dem PC arbeitet.
- Das Programm enthält einige Hilfen zur Fehlersuche. Diese kann man nutzen, indem man die passenden Variablen in der Deklaration ändert.
- Die Ansätze, die sich zur Hupe im Code finden, sind noch nicht ausgereift. Derzeit würde die Programmausführung angehalten, solange die Hupe an ist. Ich muss die Code-Stellen dazu später noch weiter oben integrieren (analog zur Steuerung der Warnblinker).
Natürlich kann man noch viel mehr realisieren. Sehr einfach umzusetzen sind z.B. automatische Blinker abhängig vom Servokanal. Es gibt auch Kollegen, die autonomes Fahren ausprobieren. Das ist gar nicht so weit hergeholt, denn es gibt für ein paar Euro alle möglichen Zusatzmodule (Infrarot-, Ultraschall-, Temperatur-, Helligkeitssensoren), der Fantasie sind also keine Grenzen gesetzt
Ich werde auf jeden Fall noch etwas in Richtung Hupe ausprobieren, aber dazu später mehr. Ich denke, dass es dann auch noch ein kurzes Video geben wird, ist ja sonst doch etwas trocken das Thema
Edit BAXL:
Es gibt in den Ressourcen noch einen weiteren Sketch, dessen Anwendung hier aber nicht beschrieben wurde, mit den Kommentaren im Sketch ist die Verkabelung aber quasi selbsterklärend.
Autolichtsteuerung für Arduino Sketch
Zuletzt von einem Moderator bearbeitet: