Zum Inhalt springen
Arduino Wohnhausbeleuchtung Modelleisenbahn Diorame

Wohnhausbeleuchtung für die Modellbahn

    Wer schon einmal die Chance hatte, sich im Miniatur Wunderland in Hamburg verzaubern zu lassen, weiß, dass neben Bewegung Licht die entscheidende Rolle spielt. Alle 10 Minuten wird es in dieser weltweit größten Modelleisenbahnanlage Nacht und hunderttausende Lichter verzaubern die Städte und Länder in ihr nächtliches Gewandt.

    (Update: Ich arbeite gerade an einem System für die Modelleisenbahn. Vielleicht ist das spannend für dich. Es geht um Lichteffekte, Bewegung und Sounds: RailFX – Effekte mit Arduino.)

    Kann man realistische Beleuchtung mit Arduino erschaffen? Das denke ich doch. In diesem Projekt zeige ich dir, wie du das selbst umsetzen kannst. Bei diesem Beispiel handelt es sich um ein Wohnhaus, das mit LEDs ausgestattet werden kann. Die Hausnummernbeleuchtung und drei Zimmer werden mit weißen LEDs beleuchtet (Küche, Badezimmer, Esszimmer), das Wohnzimmer bekommt eine RGB-LED, um einen Fernseher zu simulieren und das Schlafzimmer bekommt eine rote LED als Zimmerlampe. Ob das geschmackvoll ist, überlasse ich den Bewohnern.


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


    Bauteile

    Schaltplan

    Arduino Wohnhausbeleuchtung Modelleisenbahn Diorama Schaltplan

    Der Schaltplan besteht aus acht Reihenschaltungen bestehend aus jeweils einer LED und einem 220 Ohm Widerstand (rot-rot-braun oder rot-rot-schwarz-schwarz). Drei dieser Reihenschaltungen laufen in der RGB-LED zusammen.

    Code für die Wohnhausbeleuchtung für die Modellbahn

    Zentrales Element des Programms ist eine State-Machine. Dabei handelt es sich um eine Switch-Case-Konstruktion, die je nach aktuellem Zustand die LEDs ein- oder ausschaltet, das flackernde TV-Licht oder die Schlafzimmerbeleuchtung simuliert. Die Zustände werden nach einer bestimmten Wartezeit, die in der Variable stateDauer[] festgelegt sind, weitergeschaltet.

    Natürlich lässt sich das Projekt um weitere LEDs erweitern, aber für den Anfang sollte es schon recht realistisch sein.

    int ledPins[] = {3, 4, 5, 6, 7};                // Pins für die Zimmerbeleuchtung, 0 = Schlafzimmer, 1 = Küche, 2 = Esszimmer, 3 = Badezimmer, 4 = Hausnummer
    int anzahlLedPins = 5;                          // Anzahl der Einträge im Array ledPins
    int tvPins[] = {11, 10, 9};                     // Pins für den TV Rot, Grün, Blau
    
    int myState = 0;                                // Speichert den aktuellen Zustand der Animation
    long stateDauer[] = {50000, 20000, 30000, 10000, 10000, 30000, 10000}; // Wie lange dauert der jeweilige Zustand
    int stateAnzahl = 7;                            // 0 = Tag, 1 = Abendessen, 2 = TV Show, 3 = Zähneputzen, 4 = Kuschelzeit, 5 = Schlafen, 6 = Aufstehen
    long currentStateTimer = 0;                     // Timer für den aktuellen Zustand
    
    void setup() {
      randomSeed(analogRead(0));                    // Start des Zufallszahlen-Generators
      for (int i = 1; i < anzahlLedPins; i++) {     // erst ab 1, da der erste Pin (Pin 3) als analoger Output verwendet wird 
        pinMode(ledPins[i], OUTPUT);                // deklariere Pins 4 – 7 als digitale Outputs
      }
    }
    
    void loop() {
      if (currentStateTimer + stateDauer[myState] < millis()) {
        currentStateTimer = millis();               // resetted den Timer
        myState++;                                  // erhöht den aktuellen State
        if (myState >= stateAnzahl) myState = 0;    // falls myState größer als verfügbare States, dann myState=0;
      }
      
      switch (myState) {                            // Haupt-Statemachine
        case 0:                                     // State: Tag
          digitalWrite(ledPins[1], LOW);            // Küche aus
          digitalWrite(ledPins[2], LOW);            // Esszimmer aus
          digitalWrite(ledPins[3], LOW);            // Badezimmer aus
          digitalWrite(ledPins[4], LOW);            // Hausnummer aus      
          analogWrite(tvPins[0], 0);                // TV aus als Wohnzimmerbeleuchtung
          analogWrite(tvPins[1], 0);                // TV aus als Wohnzimmerbeleuchtung
          analogWrite(tvPins[2], 0);                // TV aus als Wohnzimmerbeleuchtung        
          break;
        case 1:                                     // State: Abendessen
          digitalWrite(ledPins[4], HIGH);           // Hausnummer an
          digitalWrite(ledPins[1], HIGH);           // Küche an
          digitalWrite(ledPins[2], HIGH);           // Esszimmer an
          break;
        case 2:                                     // State: TV Show
          digitalWrite(ledPins[2], LOW);            // Esszimmer aus
          if (random(400)==1) {                     // Licht in Küche ausschalten
            digitalWrite(ledPins[1], LOW);          // Küche aus
          }
          if (random(500)==1) {                     // Licht in Küche einschalten
            digitalWrite(ledPins[1], HIGH);         // Küche an
          }
          if (random(10)==1) analogWrite(tvPins[0], random(100,200));  // TV rot
          if (random(10)==1) analogWrite(tvPins[1], random(100,200));  // TV grün > für mehr Fussball einfach die Werte ändern ;-)
          if (random(10)==1) analogWrite(tvPins[2], random(100,200));  // TV blau
          break;
        case 3:                                     // State: Zähneputzen
          digitalWrite(ledPins[1], LOW);            // Küche aus
          digitalWrite(ledPins[2], LOW);            // Esszimmer aus
          analogWrite(tvPins[0], 0);                // TV aus
          analogWrite(tvPins[1], 0);                // TV aus
          analogWrite(tvPins[2], 0);                // TV aus
          digitalWrite(ledPins[3], HIGH);           // Badezimmer an
               
          break;
        case 4:                                     // State: Kuschelzeit?
          digitalWrite(ledPins[3], LOW);            // Badezimmer aus
          if (random(10)==1) analogWrite(ledPins[0], random(100,200));  // Schlafzimmer 
          break;
        case 5:                                     // State: Schlafen
          analogWrite(ledPins[0], 0);               // Schlafzimmer aus
          break;
        case 6:                                     // State: Aufstehen
          digitalWrite(ledPins[1], HIGH);           // Küche an
          digitalWrite(ledPins[2], HIGH);           // Esszimmer an
          digitalWrite(ledPins[3], HIGH);           // Badezimmer an
          analogWrite(tvPins[0], 255);              // TV an als Wohnzimmerbeleuchtung
          analogWrite(tvPins[1], 255);              // TV an als Wohnzimmerbeleuchtung
          analogWrite(tvPins[2], 255);              // TV an als Wohnzimmerbeleuchtung            
          break;
      }
      delay(20);                                    // kurze Pause
    }

    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


    4 Gedanken zu „Wohnhausbeleuchtung für die Modellbahn“

    1. alain van cauwelaert

      Hello ,
      Is it possible to adapt this to an Arduino nano ?
      Thank you .
      Hallo ,
      Ist es möglich, dies an einen Arduino Nano anzupassen?
      Danke .
      Alain.

    2. Guten Tag,
      können Sie mir helfen den obigen Sketch so anzupassen das es für ein Arduino Nano zusammen mit dem Controllmodul(Zeitgeber) von Ihrem RailFX funktioniert.

      Danke

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.

     

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