Anzeige

Wohnhausbeleuchtung für die Modellbahn

Arduino Wohnhausbeleuchtung Modelleisenbahn Diorame

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.

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

  • 1x [adinserter block=”1″]
  • 8x Widerstand 220 Ohm
  • 4x LED weiß
  • 1x LED rot
  • 1x RGB-LED Common Cathode

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
}

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 4.7 / 5. Anzahl Bewertungen: 3

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Deine Meinung ist mir sehr wichtig!

Lasse uns diesen Beitrag verbessern!

Wie kann ich den Beitrag verbessern? Was würdest du dir wünschen? Was hat dir gefehlt?

Die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

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.