Alhoewel ik niet van plan ben om mijn modelbaantje te voorzien van huisjes en dergelijke, leek het me wel leuk om over verlichting voor een huisje na te denken. En dan niet een lichtje per huisje, maar meerdere lichtjes die aan en uitgaan alsof er iemand van kamer naar kamer gaat en de lichtknopjes bedient. Het volgende is daaruit voortgekomen.
Een ATtiny85 (maar weer eens) gaf weer een paar voor mij nieuwe inzichten. Eerst maar weer de pin-out van het dingetje.

Ik had bedacht dat ik een 5-tal ledjes in een bepaalde volgorde aan en uit wilde sturen. Het ene ledje langer aan dan het andere. Hiervoor een programmaatje gemaakt in de Arduino IDE.
// Verlichting huizen op modelbaan
// Verschillende scenario's
//
// ATtiny85 met een 6-tal LEDs via 1K weerstand
//
// Pin 5 = D0 - huiskamer
// Pin 6 = D1 - keuken
// Pin 7 = D2 - wc
// Pin 2 = D3 - gang/trap
// Pin 3 = D4 - slaapkamer 1
// Pin 1 = D5 - slaapkamer 2, of potmeter om tijdbasis in te stellen
int led1 = 0; // hardware pin 5 op de ATtiny85: D0, op UNO D8
int led2 = 1; // hardware pin 6 op de ATtiny85: D1, op UNO D9
int led3 = 3; // hardware pin 2 op de ATtiny85
int led4 = 4; // hardware pin 3 op de ATtiny85
//int led5 = 5; // hardware pin 1 op de ATtiny85
//int led6 = 2; // hardware pin 7 op de ATtiny85
int inPin = A1; // hardware pin 7 op de ATtiny85, 10K potmeter aansluiten om tjdbasis te bepalen
unsigned long time = 1000; // Tien minuten = 600000?
unsigned long minuut = 60000; // aanpassen van test naar in gebruik
//int uur = 3600000;
unsigned long tijdbasis = 1; // Tijd sneller - korter laten verlopen
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
//pinMode(led5, OUTPUT);
//pinMode(led6, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
//digitalWrite(led5, LOW);
//digitalWrite(led6, LOW);
}
void loop() { // Wanneer moet het licht aangaan?
if(millis() >= time){
scenario(); // start scenario
}
/* Lees de potmeter uit en vergroot of verklein de tijdbasis
* Scenario 1 duur ca. 80 seconde van de tijd dat het licht
* in huis aangaat (ca. 17u)
* tot we gaan slapen (24u) is dat 7 uur.
*
* 7 uur = 420 minuten, is 25.200 seconden. 25.200/80 = 315.
* 315 is dus de deelfactor = tijdbasis waarmee maximaal
* vermenigvuldig kan worden
* om van fictieve tijd naar werkelijke tijd te komen.
*
* In de praktijk is dat veel te lang.
* Ingesteld op 40. Daarmee wordt de kortste tijd
* 80 seconden, en de langste tijd 80 x 40 is 3200 seconden, is 53 minuten.
*/
tijdbasis = analogRead(inPin);
tijdbasis = map(tijdbasis, 0, 1023, 1, 40); //Zie voor berekening hierboven!
}
void scenario(){
digitalWrite(led1, HIGH);
delay (4000UL * tijdbasis);
digitalWrite(led2, HIGH);
delay (11000UL * tijdbasis);
digitalWrite(led3, HIGH);
delay (4000UL * tijdbasis);
digitalWrite(led3, LOW);
delay (1000UL * tijdbasis);
digitalWrite(led2, LOW);
delay (12000UL * tijdbasis);
digitalWrite(led2, HIGH);
delay (19000UL * tijdbasis);
digitalWrite(led3, HIGH);
delay (1000UL * tijdbasis);
digitalWrite(led2, LOW);
delay (3000UL * tijdbasis);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
delay(1000UL * tijdbasis);
digitalWrite(led1, LOW);
delay(16000UL * tijdbasis);
digitalWrite(led3, HIGH);
delay (3000UL * tijdbasis);
digitalWrite(led3, LOW);
delay(1000UL * tijdbasis);
digitalWrite(led4, LOW);
delay(30000UL * tijdbasis);
}
Ik weet het: beter geen gebruikmaken van ‘delay’, maar het programma hoeft verder toch niks anders te doen, dus … toch maar (veelvoudig) gebruikt! De doorloop van het geheel is ongeveer 80 seconde, daarna volgt een pauze en begint de zaak weer van voren af aan. Door een potmetertje toe te voegen kan je de tijd tussen elke aan/uit schakeling aanpassen: de tijd wordt vermenigvuldigd (variabele tijdbasis) van 1x (sequentie duur is 80 seconde) tot 40x (duur ca. 1 uur).
Ik dacht de potmeter (10K) op pin 1 (A0) aan te sluiten, maar omdat pin 1 tevens RESET-functie heeft lukte dat niet goed. Hier wat meer discussie/achtergrond info. Je moet blijkbaar iets doen met de ‘fuse settings‘. Daarna bleek pin 1 evenmin goed bruikbaar voor de aansturing van een LED. Dus … van vijf naar vier ledjes:
– led 1 op pin 5 = PB0,
– led 2 op pin 6 = PB1,
– led 3 op pin 2 is PB3,
– led 4 op pin 3 is PB4)
– Met de potmeter op pin 7 (A1).


De ATtiny en het potmetertje passen makkelijk op een klein stukje gaatjesprint. Hierboven te zien, nog zonder de led-aansluitingen.



Het huisje moet lichtdicht gemaakt worden (er mag natuurlijk geen licht door de dakrand of de hoeken naar buiten piepen!) en moet voorzien worden van ‘kamers’. Hiervoor heb ik Polimax montage kit gebruikt. Een hoop geklieder, maar het werkt wel. Met 1 – 1,5mm karton heb ik tussenwandjes en plafonnetjes gemaakt, die weer met de kit zijn afgewerkt. Ik las dat sommigen de binnenkant van de huisjes zwart verven, om doorschijnen van de ‘muren’ tegen te gaan. Dat zou zeker beter zijn! Ook het beter wegwerken van de draadjes zou trouwens beter zijn! 🙂
Toch geeft het een aardig resultaat, vind ik zelf, zoals hierboven te zien. Wanneer het huisje vastgezet wordt zal natuurlijk ook de onderkant lichtdicht gemaakt moeten worden.
In een uitgave van MIBA (MIBA-Modellbahn-Praxis 1/2019 – Licht und beleuchtung) kwam ik het volgende product van Viessmann tegen. Een mooi idee! Een soort kleine hokjes die je, uitgerust met een apart ledje, achter een raam kunt plakken. Een combinatie van beide aanpakken is natuurlijk ook mogelijk.



