Das Miniatur-Wunderland in Hamburg hat mich wirklich fasziniert. Natürlich sind die ganzen Züge und Gleise schon genial, aber der wahre Zauber ist der Detailgrad und nicht zuletzt die Beleuchtung und die Effekte, die verbaut sind. Und natürlich wollte ich so etwas mit Arduino nachbauen und euch zur Verfügung stellen. Ich habe dabei besonderen Wert auf Anpassbarkeit und einfaches Nachbauen gelegt. Das System habe ich RailFX getauft, da ich es in Zukunft immer mehr erweitern möchte.
Das System RailFX
Ich habe das RailFX-System so geplant, dass es aus Einzelkomponenten besteht, die über ein zentrales Element, das Control-Modul, eine gemeinsame Uhrzeit erhalten, denn wie auch beim Miniatur-Wunderland soll es bei RailFX nach einer einstellbaren Zeit Tag und Nacht werden. Diese Funktion übernimmt ein kostengünstiges Arduino Nano, das in einstellbarem Intervall eine Zahl von 0 bis 23 an alle Module des Systems sendet. Diese Module nutzen ebenfalls das Arduino Nano als Plattform. Je nach Projekt (z. B. Jahrmarkt, Baustelle, Siedlung, etc.) sind weitere Komponenten integriert. Auch hier habe ich auf Einfachheit und geringe Kosten geachtet, wobei beides bitte in Relation gesehen werden muss. Auch wenn ich versucht habe, die Anwendung so einfach wie möglich zu gestalten, handelt es sich doch um ein Projekt für Menschen mit etwas Erfahrung im Umgang mit Arduino. Dazu empfehle ich mein E-Book »Arduino für Anfänger und Anfängerinnen«. Darin gibt es alle Grundlagen, die man für den Start benötigt.
Control-Modul-Schaltplan
Das Control-Modul besteht aus einem Arduino Nano dessen Pin D18 (A4) mit allen anderen Modulen am Pin D18 verbunden ist. Darüber hinaus gibt es ein zentrales Netzteil, dass alle Module miteinander verbindet (5V+ und GND). Das Netzteil und der Kabelquerschnitt zwischen den Modulen muss groß genug dimensioniert werden. Das Modul verfügt über eine Segmentanzeige, die die Modellbauuhrzeit anzeigt, sowie zwei Taster, mit denen man die Zeit vor- und zurückschalten kann. Diese sind an den Pins D4 und D5 angeschlossen.
Control-Modul-Bauteile
- Segmentanzeige
- Taster
- Netzteil (5V, 10A)
Control-Modul-Code
Das Control-Modul verwendet die TM1637Display-Bibliothek. Diese muss erst installiert werden. Gehe dafür im Arduino-Menü auf Sketch>Bibliothek einbinden>Bibliothek verwalten … und suche im Suchfeld nach TM1637. Installiere die aktuelle Version der TM1637 Bibliothek von Avishay Orpaz.
Dieses Programm muss auf das Control-Modul geladen werden. Dazu muss zuerst im Menü der Arduino-Software unter Werkzeuge>Board das Arduino Nano ausgewählt werden. Dann muss man unter Werkzeuge>Prozessor »ATmega328P (Old Bootloader)« und zuletzt unter Werkzeuge>Port den Port auswählen, an dem das Arduino-Nano angeschlossen ist.
/* Code des railFX Control Moduls von StartHardware.org */ #include <TM1637Display.h> /* ***** ***** Einstellungen ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** */ long theTimeout = 6; // so viele reale Sekunden sind eine Modellbau-Stunde (Minimum ca. 6) /* ***** ***** Ab hier beginnt der Programmcode, der nicht angepasst werden muss ***** ***** ***** ***** */ int sendPin = 18; long theTimer = 0; int hours = 19; int minutes = 50; int button1Pin = 4; int button2Pin = 5; int button1State = 0; int button1LastState = 0; int button2State = 0; int button2LastState = 0; /* ***** ***** Segment-Anzeige ***** ***** */ #define numberOfSeconds(_time_) ((_time_ / 1000) % 60) #define numberOfMinutes(_time_) (((_time_ / 1000) / 60) % 60) /* Control-Modul */ #define NODE_MAX_NUMBER 127 #define PAYLOAD_SIZE 2 int nodePayload[NODE_MAX_NUMBER][PAYLOAD_SIZE]; TM1637Display display(2, 3); // Segmentanzeige an D2 und D3 void setup() { Serial.begin(115200); pinMode(sendPin, OUTPUT); // Set brightness display.setBrightness(0x0c); pinMode(button1Pin, INPUT_PULLUP); pinMode(button2Pin, INPUT_PULLUP); } void loop() { button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); if ((button1State == 0) && (button1LastState == 1)) { hours++; minutes = 50; if (hours >= 24) hours = 0; theTimer = millis(); } if ((button2State == 0) && (button2LastState == 1)) { hours--; minutes = 50; if (hours < 0) hours = 23; theTimer = millis(); } if (theTimer + ((theTimeout) * 1000 / 60) < millis()) { theTimer = millis(); minutes++; if (minutes >= 60) { hours++; minutes = 0; if (hours >= 24) hours = 0; sendeDaten(); } } showTime(hours, minutes); // Ausgabe auf Segmentanzeige button1LastState = button1State; button2LastState = button2State; delay(10); } void sendeDaten() { for (int i = 0; i < 24; i++) { if (hours >= i) digitalWrite(sendPin, LOW); delay(1); digitalWrite(sendPin, HIGH); delay(1); } } /* Segmentanzeige */ void showTime(int theHour, int theMinute) { display.showNumberDecEx(theMinute, 0, true, 2, 2); display.showNumberDecEx(theHour, 0b01000000, true, 2, 0); }
Im Code kann man nun in der Sektion Einstellungen bestimmen, wie viele Sekunden (theTimeout) in der echten Welt eine Stunde in der Modellbau-Welt entsprechen sollen.
Nach der Einstellung kann man den Code einfach auf das Arduino-Nano übertragen und das war es auch schon.
Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!
- Die beliebtesten Arduino-Projekte von StartHardware
- Inklusive Schaltplan, Beschreibung und Code
- Arduino-Schnellstart-Kapitel
- Kompakter Programmierkurs
Hallo, kurze Frage, kann man die Rail Sketche für die Modellbahn von ihrer Homepage runterladen.
Zweites finde ich die Bibliothek TM1637 nicht in der Bibliothek, wo bekomme ich den her
Danke im voraus
Gruß Bernd
Hallo Stefan;
“Allerdings werde ich das Modul in Zukunft um einen Mute-Button erweitern, ”
Hast du den Mute-Butten schon umgesetzt ?
Wenn Nein kannst du mir bitte mal einen Tip für Anfänger geben wo ich da ansetz kann ?
Gruß Uwe
Kann man beim Ausgang D18 auch ein Relais ansteuern.
Ich denke an eine Analoge Bahnhofsuhr die von einer Mutteruhr angesteuert wird
Hallo,
leider habe ich auf meine Frage bisher noch keine Antwort erhalten.
Welche Bibliothek kann ich als “Ersatz für TM1637Display.h” in den Sketch einfügen?
Bin mit meinem Latein am Ende, da ich erst vor einigen Monaten mit ARDUINO-Sketchen begonnen habe.
Für eine Antwort bin ich sehr dankbar.
Hallo, ich hatte das gleiche Problem, die Datei ist weiter unten, einfach runter scrollen.
Hallo Stefan,
ich finde das Projekt RailFX sehr gut und habe das Control-Modul aufgebaut.
Leider habe ich Problem mit der 7-Segment -Anzeige.
Wo kann ich die “TM1637Display-Bibliothek” herunterladen? Sämtliche Versuche mit
verschiedenen Bibliotheken haben keinen Erfolg gebracht.
Grüße Udo
Hey Stefan,
Ich wollte das Control-Modul nachbauen, jedoch will das ganze nicht so wie ich will. Meine Frage wäre es jetzt, ob man überhaupt anstelle eines Arduino Nanos auch einen ATtiny88 (Entwicklungs-Board) nutzen kann? Und ist es notwendig, dass der Pin, der mit den anderen Modulen verbunden ist, ein SDA Pin sein muss oder kann ich dafür jeden beliebigen Pin nutzen? Ich habe alles etwas gefreestylet mit meinem ATtiny 88. Jedoch leuchten meine Straßenlampen nur am Anfang kurz und meine Häuser sind dauerhaft beleuchtet. Ich bin leider komplett überfordert, da ich neu im Arduino Business bin.
Freundliche Grüße!
Hallo,
Das Konzept ist prima.
Ich würde dem Control Modul aber noch 2 oder 3 JP spendieren, um den 6 sec Faktor auf mehrere Werte zu erweitern. Sonst muss man bei jeder Änderung neu programmieren. I/Os sind ja genug vorhanden.
Gruß
Jürgen
Hallo,
Habe das Modul nachgebaut, jedoch funktioniert die Tastenfunktion nicht wie beschrieben.
Tastenanschluß an D4, D5. Was könnte der Fehler sein. habe Taster mit 3 PIN (S-Mittel -) pole.
Kabel bei D4 zum S und – zu -.
Hallo Richard, schwer zu sagen. Funktioniert es denn, wenn du statt der Taster einfach ein Kabel nimmst? Liebe Grüße Stefan
Hallo Stefan,
ich habe das Control-Modul ebenfalls nachgebaut und meine Taster funktionieren. Allerdings habe ich 2 PIN-Taster. Es muss also am Anschluss der Taster liegen.
Ich hatte dir auch in dem Tag- und Nacht-Modul geschrieben. Da schaust du aber wohl nicht mehr rein, da keine Antwort kam.
Die Schaltung funktioniert nicht. Es kann nicht am Control-Modul liegen, da dieses bei mir auch das Kirchen-Modul steuert und das funktioniert einwandfrei.
Vielleicht ist in dem Sketch ein Fehler enthalten, den ich nicht finde?
Viele Grüße
Dieter
Hallo.
Habe das modul nachgebaut. Funtioniert super alles. Mir kam noch die idee eine stop funktion mit eine taster hinzuzufügen. Wäre das denn auch möglich. ich bekomme es irgendwie nicht hin
Hi Sebastian, klar, das könnte man schon machen. Wäre aber cool, wenn man damit vielleicht auch alle Module anhalten könnte. Meinst du das so? Liebe Grüße Stefan
Hallo Stefan.
Ja so in der Art.
So könnte man ja die Zeit stoppen erstmal und müsste nicht drauf achten. Das bleibt ja dann sowieso alles so wie es ist solange die Zeit nicht weiter läuft. Ich habe schon versucht es einzubauen mit der stop Funktion. Bekomme es aber leider nicht hin irgendwie.
Hast da eine Idee?
Sonst eine echt tolle Sache das alles. Habe schon ewig gesucht nach sowas.
Habe da auch schon paar andere Ideen. Es zum Beispiel auf einen ESP 32 oder ESP 8266 zu machen. Da hat man auch mehr Speicher und könnte es vielleicht ja auch über wlan bedienen. Mit pc,Handy oder Tablett.
Hi Stefan . Erstmal klasse Arbeit und recht vielen dank für das kostenlose zur Verfügung stellen deiner Module . Damit kann man echt viel anstellen und der MÖGLICHKEITEN das fast alles möglich ist . Ich Designe gerade Häuser Bzw. Kleine Schaltkästen für ( Legobahnen ) mit deinem System, Aber bei den Arduino Boards steigen die preise und da ich mich auch mal bei Esp und Raspberry umgeschaut habe bin ich auf die Boards gestoßen, PI Pico um weiten mehr Leistung ( echtzeit on board ) und mehr GPIO aus – eingänge hat ( alle auch mit PWM ) und dem Pimoroni TINY 2040 Board was für kleine Bahnübergänge perfekt ist . Und da der PI Pico auch noch mit knapp 4 Euro ( direkt preis bei Berrybase ,ist ein offizieller Händler von Rasbperry ) sehr Günstig ist bietet es sich an das mit dem Board zu versuchen . Das TINY2040 hat auch den eignen entwickelten Chip von Rasi kostet zwar 3 euro mehr als der pico aber ist auch nur so groß wie ne Briefmarke. Schau dir die Boards mal an es lohnt sich du wirst es nicht bereuen ;-) . Und nochmals Danke das du das frei zur Verfügung stellst . LG Tom
Hallo Stefan,
kann ich das Control Modul auch mit einen Attiny 45 Programmieren.
Viele Grüße
Rudi
Hallo Rudi, von den Pins her sollte das klappen. Ich mache mir nur ein bisschen Sorgen, ob der Speicher ausreichend ist. Die Library für die Segmentanzeige könnte zu groß sein. Müsste man aber mal ausprobieren. Allerdings werde ich das Modul in Zukunft um einen Mute-Button erweitern, darauf kann man zwar verzichten, dann hätte man auf dem ATTiny45 allerdings tatsächlich einen Pin zu wenig. Vielleicht wäre dann ein ATTiny84 eine Alternative sein. Liebe Grüße Stefan
Hallo Stefan,
da ich absoluter Neuling bin auf dem Gebiet Digital und Modellbau, aber sehr fasziniert von den möglichen Anwendungen, habe ich ein paar Fragen vorab.
Das Controll-Modul gibt die Zeitimpulse vor, an alle weiteren Module (z.B. Hausbeleuchtung etc.) über den Pin D18 ?
Die Module für die Einzelanwendungen sind Inseln und können direkt im Modell/Modul z.B. ein Haus oder Fahrgeschäft verbaut werden?
Den Strom bekommen die Einzelanwendungen direkt vom Netzteil 5V + GND auf dem Control Modul oder kann diese auch dezentral bei gleicher Stärke eingespeist werden.
Vielen Dank für Ihre Anleitungen, und die Beantwortung meiner Fragen.
Hi Andreas, ja, alle Module sind Inseln, brauchen aber das Zeitsignal vom Control-Modul (davon braucht man nur ein einziges). Die Module (außer eines glaube ich) greifen das Signal am D18 (auch als A4 markiert) ab. Die Module brauchen 5V und theoretisch können sie einzeln versorgt werden. Dabei müsste man aber die GNDs aller unabhängigen Stromquellen verbinden. Liebe Grüße und viel Spaß mit dem System. Ich hab mir deine Website angesehen. Sieht ja super aus :-)
Liebe Grüße Stefan
Hallo Stefan,
Danke für die schnelle Antwort. Dann werde ich mich mal mit Arduino befassen, wird bestimmt spannend werden. Es freut mich das Dir meine Website gefällt.
Viel Grüße
Andreas
Pingback: RailFX Kirche mit Arduino Nano – Arduino Tutorial
Der Timer funktioniert schon mal perfekt! Danke Dir!
Pingback: RailFX: Arduino Zugzielanzeiger mit Live-Daten der Deutschen Bahn
Pingback: Bauteile für Arduino – Hier bekommst du Nachschub
Pingback: RailFX Raumbeleuchtung – Tag und Nacht für die Modellbahn
Pingback: RailFX – Bahnübergang mit Arduino – Tutorial: Arduino, Servos, LEDs
Pingback: RailFX-Truppenübungsplatz für Modellbahn und Modellbau – Arduino Tutorial
Pingback: RailFX Siedlung – Arduino Tutorial
Pingback: RailFX Einsatzstelle – mit Arduino und Blaulicht – Arduino Tutorial
Pingback: RailFX Ampel-Modul – Arduino Tutorial
Pingback: RailFX Jahrmarkt-Modul – Arduino Tutorial
Pingback: Wohnhausbeleuchtung für die Modellbahn – Arduino Tutorial
Hallo
Wirklich sehr schön, wenn es funktioniert. Mein ArduinoIDE verlangt nach Header-Dateien (CheapStepper.h, SoftwareSerial.h und DFRobotDFPlayerMini.h). Die benötigten Bibliotheken sind
installiert. Bitte um Hilfe.
Gruß Mario
Hi Mario,
hast du die Bibliotheken über das Arduino-Menü installiert?
Liebe Grüße
Stefan
Hi Stefan
Danke für dein Interesse mein Problem zu lösen , ein Freund hat mir geholfen. Jetzt läuft es. Super Teil.
LG Mario
Hi Mario, ja gerne :-) Cool, dass es jetzt läuft. Weißt du noch, woran es gelegen hat? Liebe Grüße Stefan
Hi Stefan,
war beruflich stark eingespannt. Darum antworte ich erst jetzt. Ich konnte den Nano nicht programmieren. Mein IDE wollte immer eine Header Datei. Ein Freund half mir und erklärte mir wie Attiny’s und Arduino’s programmiert werden. Ich finde euer Support klasse. Danke noch einmal.
Liebe Grüße Mario
Stefan,
Ich habe der Control Modul nachgebaut, alles funktioniert super. Doch habe ich eine Frage – gibt’s eine Möglichkeit die Helligkeit von Segmentdisplay zu verringern? Für mich ist sie zu hell…
Grüeße,
Jacek
Hi Jacek, das sollte mit dem Befehl display.setBrightness(0x0c); klappen (steht schon im Code). Übergeben werden hexadezimale Werte, z.B. 0x0c. Probier mal 0x55 oder 0x0a. Liebe Grüße Stefan
Danke fuer Dein Hinweis. Jetzt alles sieht sehr gut aus.
Gruesse,
Jacek
Moin wollte mal fragen ob 1 Kontrollmodul das zeitsignal an mehrere aruinos angeben kann um mehrere projekte zu erstellen
Grüße Michel
Hi Michael, genau so hab ich das konzipiert. Du brauchst nur ein Control-Modul und kannst viele Untermodule steuern :-) Liebe Grüße Stefan
Pingback: RailFX: Arduino Bahnhof – Mit Sound und Abfahrtsanzeiger
Pingback: RailFX Waldarbeiten auf der Modellbahn mit Arduino
Pingback: RailFX: Sound-Modul mit Arduino für Modellbahn und Modellbau
Pingback: Arduino: RailFX-Baustellen- und Industriemodul für die Modellbahn
Tolle Idee Tolle Umsetzung. Ganz ganz herzlichen Dank fuer das Bereitstellen.
Danke dir :-)
Servus Stefan,
habe das Control-Modul nachgebaut, aber die Segmentanzeige leuchtet nicht. Beim Hochladen wird kein Fehler angezeigt. Was kann ich übersehen haben? Die Kabel und auch die Segmentanzeige habe ich verschiedentlich ausgetauscht.
Beste Grüße
Bernd
Update: Bernd hat es noch einmal ab und aufgebaut, nun klappt es :-)
Sehr gutes Konzept!
Ein sehr gutes Projekt.Super beschrieben.Weiter so :-)