Zum Inhalt springen
RailFX Effekte für Modellbahn und Modellbau mit Arduino

RailFX – Effekte für Modellbahn und Modellbau mit Arduino Nano

    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.

    Wir benötigen Ihre Zustimmung um den Inhalt von YouTube laden zu können.

    Mit dem Klick auf das Video werden durch den mit uns gemeinsam Verantwortlichen Youtube [Google Ireland Limited, Irland] das Video abgespielt, auf Ihrem Endgerät Skripte geladen, Cookies gespeichert und personenbezogene Daten erfasst. Damit kann Google Aktivitäten im Internet verfolgen und Werbung zielgruppengerecht ausspielen. Es erfolgt eine Datenübermittlung in die USA, diese verfügt über keinen EU-konformen Datenschutz. Weitere Informationen finden Sie hier.

    Jmx0O2RpdiBjbGFzcz0mcXVvdDtudi1pZnJhbWUtZW1iZWQmcXVvdDsmZ3Q7Jmx0O2lmcmFtZSB0aXRsZT0mcXVvdDtSYWlsRlggVcyIYmVyYmxpY2sgJm5kYXNoOyBFaW4gRWZmZWt0ZS1TeXN0ZW0gZiZ1dW1sO3IgTW9kZWxsYmFobiB1bmQgTW9kZWxsYmF1JnF1b3Q7IHdpZHRoPSZxdW90OzEyMDAmcXVvdDsgaGVpZ2h0PSZxdW90OzY3NSZxdW90OyBzcmM9JnF1b3Q7aHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvMVRhYnJ1RG5JdjA/ZmVhdHVyZT1vZW1iZWQmcXVvdDsgZnJhbWVib3JkZXI9JnF1b3Q7MCZxdW90OyBhbGxvdz0mcXVvdDthY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmUmcXVvdDsgYWxsb3dmdWxsc2NyZWVuJmd0OyZsdDsvaWZyYW1lJmd0OyZsdDsvZGl2Jmd0Ow==

    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

    RailFX Control Modul Arduino Modellbahn Modelleisenbahn 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.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    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


    49 Gedanken zu „RailFX – Effekte für Modellbahn und Modellbau mit Arduino Nano“

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

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

    3. 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!

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

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

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

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

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

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

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

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

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

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

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

    9. Pingback: RailFX Kirche mit Arduino Nano – Arduino Tutorial

    10. Pingback: RailFX: Arduino Zugzielanzeiger mit Live-Daten der Deutschen Bahn

    11. Pingback: Bauteile für Arduino – Hier bekommst du Nachschub

    12. Pingback: RailFX Raumbeleuchtung – Tag und Nacht für die Modellbahn

    13. Pingback: RailFX – Bahnübergang mit Arduino – Tutorial: Arduino, Servos, LEDs

    14. Pingback: RailFX-Truppenübungsplatz für Modellbahn und Modellbau – Arduino Tutorial

    15. Pingback: RailFX Siedlung – Arduino Tutorial

    16. Pingback: RailFX Einsatzstelle – mit Arduino und Blaulicht – Arduino Tutorial

    17. Pingback: RailFX Ampel-Modul – Arduino Tutorial

    18. Pingback: RailFX Jahrmarkt-Modul – Arduino Tutorial

    19. Pingback: Wohnhausbeleuchtung für die Modellbahn – Arduino Tutorial

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

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

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

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

    22. Pingback: RailFX: Arduino Bahnhof – Mit Sound und Abfahrtsanzeiger

    23. Pingback: RailFX Waldarbeiten auf der Modellbahn mit Arduino

    24. Pingback: RailFX: Sound-Modul mit Arduino für Modellbahn und Modellbau

    25. Pingback: Arduino: RailFX-Baustellen- und Industriemodul für die Modellbahn

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

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.