Crazy Clown

Das Kirmes Fahrgeschäft "Crazy Clown" schaut erst dann richtig gut aus, wenn es auch beleuchtet ist. Dazu habe ich mir bei kokologgo.de SMD Lichterketten gekauft.

Gelbe Lichterketten habe ich oberhalb der Treppenstufen angeklebt.

Am Ein- und Ausgang sind senkrecht blaue Lichterketten montiert.

An der Rückwand habe ich paarweise gelbe SMD LEDs Baugröße 0603 verlötet und montiert. Eine paarweise Reihenschaltung wird immer an einen Ausgang des Arduinos angeschlossen um schöne Lauflichteffekte zu generieren.

Das Kassenhaus wird ebenfalls beleuchtet. Außerdem sind die beiden Stroboskoplampen mit weißen LEDs ausgestattet. Die Arduinos sind über Miniatursteckverbindungen RM 1,27 mm mit den LEDs verbunden, so dass zum Einbau des Fahrgeschäfts die Arduinos abgezogen werden können.

Der Umbau ist fertig.

So schaut das Karussell im Ruhemodus aus...

... und so in Aktion:

Für diejenigen, die gerne Arduino programmieren, anbei der Code für die Beleuchtung der Treppe, Türbereiche, Stroboskoplampen und Kasse:

#include "TimerOne.h"

int Treppe_1 = 6;
int Treppe_2 = 3;
int Treppe_3 = 7;
int Treppe_4 = 4;
int Eingang_links = 10;
int Eingang_rechts = 11;
int Ausgang_links = 5;
int Ausgang_rechts = 9;
int Stroboskop_links = 12;
int Stroboskop_rechts = 8;
int Kasse_Innenlicht = A0;
int Kasse_Dach = A1;
int Treppe_Funktion = 1;
int Treppe_Zaehler = 0;
int Treppe_Anzahl = 2;
int Treppe_Status = 0;
int Zugang_Funktion = 1;
int Zugang_Zaehler = 0;
int Zugang_Anzahl = 2;
int Zugang_Status = 0;
int Stroboskop_Funktion = 1;
int Stroboskop_Zaehler = 0;
int Stroboskop_Anzahl = 2;
int Stroboskop_Status = 0;
int Kasse_Funktion = 1;
int Kasse_Zaehler = 0;
int Kasse_Anzahl = 2;
int Kasse_Status = 0;

void setup()
{
  pinMode(Treppe_1, OUTPUT);
  pinMode(Treppe_2, OUTPUT);
  pinMode(Treppe_3, OUTPUT);
  pinMode(Treppe_4, OUTPUT);
  pinMode(Eingang_links, OUTPUT);
  pinMode(Eingang_rechts, OUTPUT);
  pinMode(Ausgang_links, OUTPUT);
  pinMode(Ausgang_rechts, OUTPUT);
  pinMode(Stroboskop_links, OUTPUT);
  pinMode(Stroboskop_rechts, OUTPUT);
  pinMode(Kasse_Innenlicht, OUTPUT);
  pinMode(Kasse_Dach, OUTPUT);
  digitalWrite(Treppe_1, LOW);
  digitalWrite(Treppe_2, LOW);
  digitalWrite(Treppe_3, LOW);
  digitalWrite(Treppe_4, LOW);
  digitalWrite(Eingang_links, LOW);
  digitalWrite(Eingang_rechts, LOW);
  digitalWrite(Ausgang_links, LOW);
  digitalWrite(Ausgang_rechts, LOW);
  digitalWrite(Stroboskop_links, LOW);
  digitalWrite(Stroboskop_rechts, LOW);
  digitalWrite(Kasse_Innenlicht, HIGH);
  digitalWrite(Kasse_Dach, LOW);

  Timer1.initialize(50000);
  Timer1.attachInterrupt(Zeitkonstante);
}

void Zeitkonstante()
{
  Treppe_Status++;
  Zugang_Status++;
  Stroboskop_Status++;
  Kasse_Status++;
}

void loop()
{
  // Treppe Lauflicht langsam
  if (Treppe_Funktion == 1 && Treppe_Status == 0)
  {
    digitalWrite(Treppe_1, HIGH);
  }
  if (Treppe_Funktion == 1 && Treppe_Status == 6)
  {
    digitalWrite(Treppe_1, LOW);
    digitalWrite(Treppe_2, HIGH);
  }
  if (Treppe_Funktion == 1 && Treppe_Status == 12)
  {
    digitalWrite(Treppe_2, LOW);
    digitalWrite(Treppe_3, HIGH);
  }
  if (Treppe_Funktion == 1 && Treppe_Status == 18)
  {
    digitalWrite(Treppe_3, LOW);
    digitalWrite(Treppe_4, HIGH);
  }
  if (Treppe_Funktion == 1 && Treppe_Status == 24)
  {
    digitalWrite(Treppe_4, LOW);
    Treppe_Status = 0;
    Treppe_Zaehler++;
  }
  if (Treppe_Funktion == 1 && Treppe_Zaehler >= Treppe_Anzahl)
  {
    Treppe_Funktion = 2;
    Treppe_Zaehler = 0;
    Treppe_Anzahl = 8;
  }

  // Treppe Lauflicht schnell
  if (Treppe_Funktion == 2 && Treppe_Status == 0)
  {
    digitalWrite(Treppe_1, HIGH);
  }
  if (Treppe_Funktion == 2 && Treppe_Status == 2)
  {
    digitalWrite(Treppe_1, LOW);
    digitalWrite(Treppe_2, HIGH);
  }
  if (Treppe_Funktion == 2 && Treppe_Status == 4)
  {
    digitalWrite(Treppe_2, LOW);
    digitalWrite(Treppe_3, HIGH);
  }
  if (Treppe_Funktion == 2 && Treppe_Status == 6)
  {
    digitalWrite(Treppe_3, LOW);
    digitalWrite(Treppe_4, HIGH);
  }
  if (Treppe_Funktion == 2 && Treppe_Status == 8)
  {
    digitalWrite(Treppe_4, LOW);
    Treppe_Status = 0;
    Treppe_Zaehler++;
  }
  if (Treppe_Funktion == 2 && Treppe_Zaehler >= Treppe_Anzahl)
  {
    Treppe_Funktion = 3;
    Treppe_Zaehler = 0;
    Treppe_Anzahl = 4;
  }

  // Treppe Blink
  if (Treppe_Funktion == 3 && Treppe_Status == 0)
  {
    digitalWrite(Treppe_1, HIGH);
    digitalWrite(Treppe_2, HIGH);
    digitalWrite(Treppe_3, HIGH);
    digitalWrite(Treppe_4, HIGH);
  }
  if (Treppe_Funktion == 3 && Treppe_Status == 2)
  {
    digitalWrite(Treppe_1, LOW);
    digitalWrite(Treppe_2, LOW);
    digitalWrite(Treppe_3, LOW);
    digitalWrite(Treppe_4, LOW);
  }
  if (Treppe_Funktion == 3 && Treppe_Status == 6)
  {
    Treppe_Status = 0;
    Treppe_Zaehler++;
  }
  if (Treppe_Funktion == 3 && Treppe_Zaehler >= Treppe_Anzahl)
  {
    Treppe_Funktion = 4;
    Treppe_Zaehler = 0;
    Treppe_Anzahl = 4;
  }

  // Treppe Aufbau/Abbau
  if (Treppe_Funktion == 4 && Treppe_Status == 0)
  {
    digitalWrite(Treppe_1, HIGH);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 3)
  {
    digitalWrite(Treppe_2, HIGH);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 6)
  {
    digitalWrite(Treppe_3, HIGH);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 9)
  {
    digitalWrite(Treppe_4, HIGH);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 12)
  {
    digitalWrite(Treppe_1, LOW);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 15)
  {
    digitalWrite(Treppe_2, LOW);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 18)
  {
    digitalWrite(Treppe_3, LOW);
  }
  if (Treppe_Funktion == 4 && Treppe_Status == 21)
  {
    digitalWrite(Treppe_4, LOW);
    Treppe_Status = 0;
    Treppe_Zaehler++;
  }
  if (Treppe_Funktion == 4 && Treppe_Zaehler >= Treppe_Anzahl)
  {
    Treppe_Funktion = 1;
    Treppe_Zaehler = 0;
    Treppe_Anzahl = 4;
  }

  // Zugang Lauflicht
  if (Zugang_Funktion == 1 && Zugang_Status == 0)
  {
    digitalWrite(Eingang_links, HIGH);
  }
  if (Zugang_Funktion == 1 && Zugang_Status == 3)
  {
    digitalWrite(Eingang_links, LOW);
    digitalWrite(Eingang_rechts, HIGH);
  }
  if (Zugang_Funktion == 1 && Zugang_Status == 6)
  {
    digitalWrite(Eingang_rechts, LOW);
    digitalWrite(Ausgang_links, HIGH);
  }
  if (Zugang_Funktion == 1 && Zugang_Status == 9)
  {
    digitalWrite(Ausgang_links, LOW);
    digitalWrite(Ausgang_rechts, HIGH);
  }
  if (Zugang_Funktion == 1 && Zugang_Status == 12)
  {
    digitalWrite(Ausgang_rechts, LOW);
    Zugang_Status = 0;
    Zugang_Zaehler++;
  }
  if (Zugang_Funktion == 1 && Zugang_Zaehler >= Zugang_Anzahl)
  {
    Zugang_Funktion = 2;
    Zugang_Zaehler = 0;
    Zugang_Anzahl = 3;
  }

  // Zugang Blitz
  if (Zugang_Funktion == 2 && Zugang_Status == 0)
  {
    digitalWrite(Eingang_links, HIGH);
    digitalWrite(Eingang_rechts, HIGH);
    digitalWrite(Ausgang_links, HIGH);
    digitalWrite(Ausgang_rechts, HIGH);
  }
  if (Zugang_Funktion == 2 && Zugang_Status == 2)
  {
    digitalWrite(Eingang_links, LOW);
    digitalWrite(Eingang_rechts, LOW);
    digitalWrite(Ausgang_links, LOW);
    digitalWrite(Ausgang_rechts, LOW);
  }
  if (Zugang_Funktion == 2 && Zugang_Status == 5)
  {
    digitalWrite(Eingang_links, HIGH);
    digitalWrite(Eingang_rechts, HIGH);
    digitalWrite(Ausgang_links, HIGH);
    digitalWrite(Ausgang_rechts, HIGH);
  }
  if (Zugang_Funktion == 2 && Zugang_Status == 7)
  {
    digitalWrite(Eingang_links, LOW);
    digitalWrite(Eingang_rechts, LOW);
    digitalWrite(Ausgang_links, LOW);
    digitalWrite(Ausgang_rechts, LOW);
  }
  if (Zugang_Funktion == 2 && Zugang_Status == 12)
  {
    Zugang_Status = 0;
    Zugang_Zaehler++;
  }
  if (Zugang_Funktion == 2 && Zugang_Zaehler >= Zugang_Anzahl)
  {
    Zugang_Funktion = 3;
    Zugang_Zaehler = 0;
    Zugang_Anzahl = 8;
  }

  // Zugang Lauflicht
  if (Zugang_Funktion == 3 && Zugang_Status == 0)
  {
    digitalWrite(Eingang_links, HIGH);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 2)
  {
    digitalWrite(Eingang_rechts, HIGH);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 4)
  {
    digitalWrite(Ausgang_links, HIGH);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 6)
  {
    digitalWrite(Ausgang_rechts, HIGH);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 8)
  {
    digitalWrite(Eingang_links, LOW);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 10)
  {
    digitalWrite(Eingang_rechts, LOW);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 12)
  {
    digitalWrite(Ausgang_links, LOW);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 14)
  {
    digitalWrite(Ausgang_rechts, LOW);
  }
  if (Zugang_Funktion == 3 && Zugang_Status == 16)
  {
    Zugang_Status = 0;
    Zugang_Zaehler++;
  }
  if (Zugang_Funktion == 3 && Zugang_Zaehler >= Zugang_Anzahl)
  {
    Zugang_Funktion = 4;
    Zugang_Zaehler = 0;
    Zugang_Anzahl = 3;
  }

  // Zugang Blitz
  if (Zugang_Funktion == 4 && Zugang_Status == 0)
  {
    digitalWrite(Eingang_links, HIGH);
    digitalWrite(Eingang_rechts, HIGH);
    digitalWrite(Ausgang_links, HIGH);
    digitalWrite(Ausgang_rechts, HIGH);
  }
  if (Zugang_Funktion == 4 && Zugang_Status == 2)
  {
    digitalWrite(Eingang_links, LOW);
    digitalWrite(Eingang_rechts, LOW);
    digitalWrite(Ausgang_links, LOW);
    digitalWrite(Ausgang_rechts, LOW);
  }
  if (Zugang_Funktion == 4 && Zugang_Status == 5)
  {
    digitalWrite(Eingang_links, HIGH);
    digitalWrite(Eingang_rechts, HIGH);
    digitalWrite(Ausgang_links, HIGH);
    digitalWrite(Ausgang_rechts, HIGH);
  }
  if (Zugang_Funktion == 4 && Zugang_Status == 7)
  {
    digitalWrite(Eingang_links, LOW);
    digitalWrite(Eingang_rechts, LOW);
    digitalWrite(Ausgang_links, LOW);
    digitalWrite(Ausgang_rechts, LOW);
  }
  if (Zugang_Funktion == 4 && Zugang_Status == 12)
  {
    Zugang_Status = 0;
    Zugang_Zaehler++;
  }
  if (Zugang_Funktion == 4 && Zugang_Zaehler >= Zugang_Anzahl)
  {
    Zugang_Funktion = 1;
    Zugang_Zaehler = 0;
    Zugang_Anzahl = 8;
  }

  // Stroboskop langsam
  if (Stroboskop_Funktion == 1 && Stroboskop_Status == 0)
  {
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
  }
  if (Stroboskop_Funktion == 1 && Stroboskop_Status == 1)
  {
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
  }
  if (Stroboskop_Funktion == 1 && Stroboskop_Status == 5)
  {
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
  }
  if (Stroboskop_Funktion == 1 && Stroboskop_Status == 6)
  {
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
  }
  if (Stroboskop_Funktion == 1 && Stroboskop_Status == 16)
  {
    Stroboskop_Status = 0;
    Stroboskop_Zaehler++;
  }
  if (Stroboskop_Funktion == 1 && Stroboskop_Zaehler >= Stroboskop_Anzahl)
  {
    Stroboskop_Funktion = 2;
    Stroboskop_Zaehler = 0;
    Stroboskop_Anzahl = 5;
  }

  // Stroboskop schnell
  if (Stroboskop_Funktion == 2 && Stroboskop_Status == 0)
  {
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
  }
  if (Stroboskop_Funktion == 2 && Stroboskop_Status == 1)
  {
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
  }
  if (Stroboskop_Funktion == 2 && Stroboskop_Status == 4)
  {
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
    digitalWrite(Stroboskop_links, HIGH);
    digitalWrite(Stroboskop_rechts, HIGH);
  }
  if (Stroboskop_Funktion == 2 && Stroboskop_Status == 5)
  {
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
    digitalWrite(Stroboskop_links, LOW);
    digitalWrite(Stroboskop_rechts, LOW);
  }
  if (Stroboskop_Funktion == 2 && Stroboskop_Status == 7)
  {
    Stroboskop_Status = 0;
    Stroboskop_Zaehler++;
  }
  if (Stroboskop_Funktion == 2 && Stroboskop_Zaehler >= Stroboskop_Anzahl)
  {
    Stroboskop_Funktion = 1;
    Stroboskop_Zaehler = 0;
    Stroboskop_Anzahl = 10;
  }

  // Kasse Blink langsam
  if (Kasse_Funktion == 1 && Kasse_Status == 0)
  {
    digitalWrite(Kasse_Dach, HIGH);
  }
  if (Kasse_Funktion == 1 && Kasse_Status == 5)
  {
    digitalWrite(Kasse_Dach, LOW);
  }
  if (Kasse_Funktion == 1 && Kasse_Status == 10)
  {
    Kasse_Status = 0;
    Kasse_Zaehler++;
  }
  if (Kasse_Funktion == 1 && Kasse_Zaehler >= Kasse_Anzahl)
  {
    Kasse_Funktion = 2;
    Kasse_Zaehler = 0;
    Kasse_Anzahl = 2;
  }

  // Kasse Blink schnell
  if (Kasse_Funktion == 2 && Kasse_Status == 0)
  {
    digitalWrite(Kasse_Dach, HIGH);
  }
  if (Kasse_Funktion == 2 && Kasse_Status == 2)
  {
    digitalWrite(Kasse_Dach, LOW);
  }
  if (Kasse_Funktion == 2 && Kasse_Status == 4)
  {
    Kasse_Status = 0;
    Kasse_Zaehler++;
  }
  if (Kasse_Funktion == 2 && Kasse_Zaehler >= Kasse_Anzahl)
  {
    Kasse_Funktion = 1;
    Kasse_Zaehler = 0;
    Kasse_Anzahl = 6;
  }
}