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
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