Durch eine im WWW gefundene Installation mit Lichtleitern, kam mir die Idee eine kleine Box oder einen Bilderrahmen zu bauen, der einige Sternen-Konstellationen (z.B. Tierkreiszeichen) in abwechselnder Reihenfolge anzeigt. Herz des Projekts soll ein Arduino werden, der einige wenige weiße LEDs ansteuert, die ihr Licht durch Lichtleiter (z.B. Glasfasern) an eine durchbrochene Oberfläche leiten und so als winzige, helle Punkte die entsprechende Sternen-Konstellationen anzeigen.
Der Prototyp soll ein "proof-of-concept" für meine Idee darstellen, die ich im Kopf habe und außerdem auftretenden Problemen entgegenzuwirken.
Als nächster Schritt habe ich eine Schaltung mit dem Arduino erstellt, die in bestimmten Intervallen je ein Sternbild anzeigen soll, d.h. die entsprechende LED (hier: 4 Stück) muss in zeitlichen Intervallen aufleuchten. Zusätzlich soll man mit einem kleinen Taster die Sternbilder auch manuell durchschalten können.
/**
* © 2018 Christian Grieger
* GNU GENERAL PUBLIC LICENSE
*
* Starmap switcher
*/
#define PIN_BUTTON 2
#define PIN_CYGNUS 3 // dt. "Schwan"
#define PIN_ANDROMEDA 5
#define PIN_CASSIOPEIA 6
#define PIN_PEGASUS 9
#define PIN_PISCES 10 // dt. "Fische"
#define PIN_AQUARIUS 11 // dt. "Wassermann"
#define INTERVAL_BUTTON_DEBOUNCE 250 // in milliseconds
#define INTERVAL_LED_SWITCH 60000 // in milliseconds
unsigned long lastButtonPressed, lastChange;
byte currentLed, lastLed, leds[6] = {PIN_CYGNUS, PIN_ANDROMEDA, PIN_CASSIOPEIA, PIN_PEGASUS, PIN_PISCES, PIN_AQUARIUS};
void setup()
{
for (byte i=0; i<sizeof(leds); i++) {
pinMode(leds[i], OUTPUT);
}
lastButtonPressed = 0;
lastChange = 0;
lastLed = 5;
currentLed = 0;
digitalWrite(PIN_CYGNUS, HIGH);
}
void loop()
{
checkButtonPressed();
if ((millis() - lastChange) > INTERVAL_LED_SWITCH) {
changeLed();
}
}
void checkButtonPressed()
{
if ((millis() - lastButtonPressed) > INTERVAL_BUTTON_DEBOUNCE) {
if (digitalRead(PIN_BUTTON) == HIGH) {
lastButtonPressed = millis();
lastChange = millis();
changeLed();
}
}
}
void changeLed()
{
lastLed = currentLed;
currentLed++;
currentLed %= sizeof(leds);
for(byte i=255; i>0; i-=5) {
analogWrite(leds[lastLed], i);
delay(20);
}
digitalWrite(leds[lastLed], LOW);
for(byte i=0; i<255; i+=5) {
analogWrite(leds[currentLed], i);
delay(20);
}
digitalWrite(leds[currentLed], HIGH);
lastChange = millis();
}
Die fertige Sternenkarte wird in einer Holzbox mit 8 verschiedenen Sternenbildern Platz finden. Die folgenden Bilder dokumentieren die Schritte des Zusammenbaus:
Projekt ist noch nicht fertig...
zurück