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.
Bauteile
- 1 x
- 8 x Widerstand 220 Ohm
- 4 x LED weiß
- 1 x LED rot
- 1 x RGB-LED Common Cathode
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



Ich bin fasziniert von dem Artikel über die Wohnhausbeleuchtung für die Modellbahn. Er zeigt, wie man mit einfachen Mitteln eine realistische und stimmungsvolle Beleuchtung erzeugen kann. Zum Beispiel kann man LED-Streifen, Widerstände und Schalter verwenden. Ich bin ein großer Fan von Modellbahnen und habe selbst eine kleine Anlage zu Hause. Ich würde gerne meine Häuser auch beleuchten. Ich werde mir mal die Anleitung auf der Website genauer anschauen. Vielleicht bestelle ich mir auch das Material, das dort empfohlen wird.
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.
Hi Alain, no need to adapt anything. It should simply work on the Nano. All the best, Stefan
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
Guten Abend,
es kann mir wohl keiner dabei helfen, schade !!!!!