So, kleines Update zur Steuerung.
Wollte ja in der Anlage keine Arduino benutzen aber da ich zu faul bin, mir einen Bistabile Kippstufe (Wechselblinker) für die Frozen-Scene zu bauen...und die Zeitrelais für Schlittschuhfahrer und Karussell zu kurz sind…...habe ich alles mal auf eine Arduino Nano umgebaut.
Zur Frozen-Scene:
20171203_210933 by DenBe, auf Flickr
Lichtleiter sollen Schneeglitzer simulieren
20171206_220546 by DenBe, auf Flickr
von Unten
20171206_220525 by DenBe, auf Flickr
ein Stab von diesen Meteor-Weihnachtsbeleuchtungen mit 18-LED, wobei ich nur je eine LED/Pro Kanal benutze, also 6 Stck, verbunden mit ja 8 Lichtleitern, einfach 3,3V an den Cip und man hat ein günstiges Lauflicht.
Ich schalte die Verbraucher (Motoren /LED’S…mit drei 520er Mosfet- Treibern. Software und Schaltplan setze ich mal hier rein, als Hilfe, wenn sich mal jemand so was nachbauen möchte.
20171206_220514 by DenBe, auf Flickr
Schaltplan kleine z Winteranlage DenBe by DenBe, auf Flickr
Quellcode (erster Entwurf, noch nicht getestet):
/*
* Winteranlage Arduino FROZEN-Steuerung
* Steuert die LED,s für das Frozen-Diorama, das Ofenfeuer des Krippen-Dioramas
* Steuert die Taster für Karusell und Schlittschuhfahrer
* by DenBe(R)
*/
const int LEDKrippe = 3;
const int TasterKarussell = 4;
const int TasterSchlittschuh = 5;
const int LEDTasterKarussell = 6;
const int LEDTasterSchlittschuh = 7;
const int Karussell = 9;
const int Schlittschuh = 10;
const int Frozen = 11;
int TimerKarussell = 0;
int SpeedKarussell = 0;
int TimerSchlittschuh = 0;
int TimerFrozen = 0;
int hellichkeit = 0; //Hellichkeit Krippenfeuer
int dauer = 0; //dauer Krippenfeuer (Flackern)
//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
void setup() {
pinMode(LEDKrippe,OUTPUT);
pinMode(TasterKarussell,INPUT);
pinMode(TasterSchlittschuh,INPUT);
pinMode(LEDTasterKarussell,OUTPUT);
pinMode(LEDTasterSchlittschuh,OUTPUT);
pinMode(Karussell,OUTPUT);
pinMode(Schlittschuh,OUTPUT);
pinMode(Frozen,OUTPUT);
}
//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
void loop() {
flaker(); //Hellichkeit des Krippenfeuers
flakerdauer(); //dauer des Flackern über schleifendurchlauf
for(int i=dauer; i>0; i--) //Schleife so lange durchlaufen bis Flackerzeit zuende
{
Tasterabfrage(); //Taste betätigt?
PauseFrozen(); //Zufall Frozen-LED's an/aus
delay(50); //Zeitgeber entspricht pause / 20 mal for-Schleife je Sekunde
}
}
//--------------------------------------------------------------------------------------------------
//-----------Functionen-----------------------------------------------------------------------------
int flaker() //Hellichkeit für Flackern des Krippenfeuers
{
randomSeed(hellichkeit);
hellichkeit = random(100,255);
analogWrite (LEDKrippe,hellichkeit);
}
//-----------------------------------------------------------------
int flakerdauer() //Dauer des Flackern des Krippenfeuers
{
randomSeed(dauer); //Zufallswert für dauer
dauer = random(1,10); // min. 50 Millisekunden / max. eine halbe Sekunde (über for-Schleifenzähler)
return(dauer);
}
//------------------------------------------------------------------
int Tasterabfrage() //Abfrage der Taster
{
if(TasterKarussell == HIGH && TimerKarussell == 0)
{
TimerKarussell = 600; //ca. 30 Sekunden an
SpeedKarussell = 0; //Startgeschwindigkeit
}
if(TimerKarussell >=0)
{
TimerKarussell --;
Karussellspeed();
//digitalWrite(Karussell,HIGH);
digitalWrite(LEDTasterKarussell,LOW);
}
else
{
digitalWrite(Karussell,LOW);
digitalWrite(LEDTasterKarussell,HIGH);
}
if(TasterSchlittschuh == HIGH && TimerSchlittschuh == 0)
{
TimerSchlittschuh = 600; //ca. 30 Sekunden an
}
if (TimerSchlittschuh >=0)
{
TimerSchlittschuh --;
digitalWrite(Schlittschuh,HIGH);
digitalWrite(LEDTasterSchlittschuh,LOW);
}
else
{
digitalWrite(Schlittschuh,LOW);
digitalWrite(LEDTasterSchlittschuh,HIGH);
}
}
//-------------------------------------------------------------------
int PauseFrozen() //Timer für Frozen
{
if (TimerFrozen >=0 && TimerFrozen <=25) //kurz einschalten (1,25 Sekunden) vor Pausenende
{
digitalWrite(Frozen,HIGH);
}
else
{
digitalWrite(Frozen,LOW);
}
if(TimerFrozen >= 0)
{
TimerFrozen --;
}
else
{
randomSeed(TimerFrozen); //Zuffallspausenzeit
TimerFrozen = random(250,700); // ca. min. 12,5 Sekunden / max. 35 Sekunden Pause
}
}
//----------------------------------------------------------------------------
int Karussellspeed() //Motorgeschwindigkeit Karussell
{
if (TimerKarussell >= 500) //Anfahrrampe ca. 5 Sekunden
{
SpeedKarussell +=2;
}
if (TimerKarussell <= 100) //Bremsrampe ca. 5 Sekunden
{
SpeedKarussell -=2;
}
else
{
SpeedKarussell = 200; //Speedmax ca. 5,9V bei 7,5V Input
}
digitalWrite(Karussell,SpeedKarussell); //Wert an Motor
}
Übernehme natürlich keine Verantwortung für Vollständigkeit und Funktion, sowie Schäden die durch Nachbauten entstehen.