Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Toon hier je nieuwe (model-) spooraanwinst(en)... door hervé
Vandaag om 18:56:04
Mijn eerste H0-modeltreinbaan in aanbouw door Flevodienst 1976
Vandaag om 18:25:30
De bouw van mijn modelbaan in Thailand door Thai-Bundesbahn
Vandaag om 18:19:55
Swalbenburg, N modulebaan door NS264
Vandaag om 18:17:37
Spoorwegmuseum krimpt collectie in door Thom
Vandaag om 18:04:49
BR-18.6 Schaal-0. door Frits C
Vandaag om 17:55:33
Brawa goederenwagen Kassel ( Cassel ) h0 door Stefan88
Vandaag om 17:46:27
Microstepper motoren voor armseinpalen door Menno
Vandaag om 17:43:02
Overstroomd spoor in Schotland door Hendrik Jan
Vandaag om 17:30:51
Gezocht: foto's NS Ks/Us (nu Klmos) door ES44C4
Vandaag om 17:16:10
LS Models CIWL LX slaapwagens door Rob Ellerman
Vandaag om 16:59:53
Spoor- en tramweg parafernalia door Eric B
Vandaag om 16:27:24
Terug in de tijd met trein en tram rondom groningen door tijgernootje
Vandaag om 16:24:47
Montanbahn ergens in het 'Geroerde Gebied' door Montanbahn
Vandaag om 16:18:48
DB Cargo gaat op Betuweroute proeven doen met automatisch rijdende locomotief door Rick
Vandaag om 16:00:54
Sfeer op je modelbaan door meino
Vandaag om 14:48:00
"Ein kleines Kalkwerk", een nieuwe tentoonstellingsbaan door tijgernootje
Vandaag om 14:36:26
"moderne" kolenbakken en kolenwagens in Nederland. door ES44C4
Vandaag om 14:30:11
Bauarbeiten im gange door MOVisser
Vandaag om 13:45:56
lampjes in huizen willekeurig schakelen door AP3737
Vandaag om 12:47:46
Acherntal H0. (TP III/TP IV) door tijgernootje
Vandaag om 12:30:10
Länderbahn en Reichsbahn locomotieven. door puntenglijder
Vandaag om 12:26:46
Dat overkomt mij niet. door Benelux795
Vandaag om 11:45:04
Raadplaatje door Eric B
Vandaag om 11:41:14
Wèhnich - Eén onbeduidend baantje op 1200 bij 1200mm door Jelmer
Vandaag om 11:07:40
Br 38 Piko Superen. door Jelmer
Vandaag om 11:05:27
NS 1700 transfers door Gerco van Beelen
Vandaag om 08:11:51
Nederland jaren 50 op basis van mijn roots door defender
Vandaag om 05:13:26
Bezetmelder brug in rolbrug blijft actief als rolbrug gestopt is door spock
21 July 2025, 23:18:52
Toon hier je (model)treinfoto's door Frank 123
21 July 2025, 22:05:35
  

Auteur Topic: lampjes in huizen willekeurig schakelen  (gelezen 1432 keer)

bask185

  • Online Online
  • Berichten: 4982
Re: lampjes in huizen willekeurig schakelen
« Reactie #15 Gepost op: 21 July 2025, 13:21:27 »
Bert, de backticks werken hier niet, we hebben code tags op het forum  ::)

[ c o d e ]   [ / c o d e ]

// Configuratie
const int numLeds = 3;              // Aantal LED's
const int ledPins[numLeds] = {2, 3, 4}; // Pinnen waar de LED's op aangesloten zijn

// Min en max aan-tijden in milliseconden voor elke LED
const unsigned long minTimes[numLeds] = {100, 200, 300};  // Minimale aan-tijd per LED
const unsigned long maxTimes[numLeds] = {500, 800, 1000}; // Maximale aan-tijd per LED

// Variabelen voor timing
unsigned long previousTimes[numLeds]; // Laatste keer dat elke LED veranderde
unsigned long intervals[numLeds];     // Huidige interval voor elke LED
bool ledStates[numLeds];              // Huidige staat van elke LED

void setup() {
  // Initialiseer seriële communicatie (optioneel voor debugging)
  Serial.begin(9600);
 
  // Initialiseer LED pinnen als OUTPUT
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins, OUTPUT);
    ledStates = LOW;
    digitalWrite(ledPins, ledStates);
    previousTimes = 0;
    intervals = random(minTimes, maxTimes);
  }
}

void loop() {
  unsigned long currentTime = millis();
 
  for (int i = 0; i < numLeds; i++) {
    // Controleer of het tijd is om de LED te schakelen
    if (currentTime - previousTimes >= intervals) {
      // Schakel de LED
      ledStates = !ledStates;
      digitalWrite(ledPins, ledStates);
     
      // Update de vorige schakeltijd
      previousTimes = currentTime;
     
      // Bepaal een nieuw random interval voor de volgende schakeling
      if (ledStates == HIGH) {
        // LED gaat aan - gebruik aan-tijd interval
        intervals = random(minTimes, maxTimes);
      } else {
        // LED gaat uit - gebruik een korte uit-tijd (of pas aan-tijd aan)
        // Hier gebruiken we de helft van de minimale aan-tijd als uit-tijd
        intervals = minTimes / 2;
      }
     
      // Debug output (optioneel)
      Serial.print("LED ");
      Serial.print(i);
      Serial.print(": ");
      Serial.print(ledStates ? "AAN" : "UIT");
      Serial.print(", Volgende schakeling in: ");
      Serial.println(intervals);
    }
  }
}
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Bert55

  • Offline Offline
  • Berichten: 894
Re: lampjes in huizen willekeurig schakelen
« Reactie #16 Gepost op: 21 July 2025, 15:24:49 »
Bedankt Bas,
Ken het maar was te lui ::)

edit:
Er zit een fout in de sketch:
Compilation error: incompatible types in assignment of 'int' to 'long unsigned int [3]'

In deze regels:
    previousTimes = 0;
    intervals = random(minTimes, maxTimes);

Moet even weer nazoeken waarom incompatible, mocht je het zo weten Bas, graag.

Bij toeval ben ik nu bezig met een eigen gebouwd huisje met leds erin, dus kan ik het mooi testen
« Laatst bewerkt op: 21 July 2025, 17:40:59 door Bert55 »
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

Patrick Smout

  • Offline Offline
  • Berichten: 441
Re: lampjes in huizen willekeurig schakelen
« Reactie #17 Gepost op: 21 July 2025, 19:33:06 »
Intervals is een array. Je moet deze indexeren wil je een waarde aan een element toekennen.

M.a..w, intervals vervangen door intervals[ i ]

Komt enkele malen voor in het programma. Ff ook nog nakijken of i de juiste index is op alle plaatsen.
« Laatst bewerkt op: 21 July 2025, 19:36:00 door Patrick Smout »
Met vriendelijk groeten,

Patrick Smout

RobVille

  • Offline Offline
  • Berichten: 185
  • My Dark Side
    • Modelbanen - Rob
Re: lampjes in huizen willekeurig schakelen
« Reactie #18 Gepost op: 21 July 2025, 19:54:00 »
Goedemorgen,

Ik ben nu op het punt om de verlichting aan te leggen.
Straatlantaarns, en verlichting voor de huisjes en het station.
Nu wil ik de verlichting in de huisjes een beetje slim maken, af en toe een lamp aan, en uit, en dat willekeurig.
Heb zo'n 30 leds voor huisjes en ongeveer 20-30 straatlantaarns (ook led)
Bestaat er een apparaat om dit slim te schakelen? Heb al de 5074 Multi protocol light decoder gevonden, heeft iemand ervaring hiermee? Is best duur om even te 'proberen'
Of zijn er alternatieven? Analoog of digitaal vind ik niet belangrijk.

Toch maar even terugkomen op de vraag van de TS. Nu de heren verder bakkeleien over het wel en wee van het programmeren van een Arduino, gebruik ik zelf de apparaatjes van Woodland. Hier kan je de Led's makkelijk mee in / uitschakelen, dimmen, ad rondom schakelen. Op beide van mijn modelbanen gebruik ik deze zonder problemen. Geen digitaal gedoe.

Rob
I need to embrace imperfection, anomalies exist everywhere .....
and
asking me if that's black or dark green is not done!

Cornfield Junction / Boulder Crossing
Bypass Junction
Het Boemeltje

bask185

  • Online Online
  • Berichten: 4982
Re: lampjes in huizen willekeurig schakelen
« Reactie #19 Gepost op: 21 July 2025, 20:55:16 »
Bert, je bent echt overal vergeten om  achter te tikken  :P. Dit compileert:
// Configuratie
const int numLeds = 3;              // Aantal LED's
const int ledPins[numLeds] = {2, 3, 4}; // Pinnen waar de LED's op aangesloten zijn

// Min en max aan-tijden in milliseconden voor elke LED
const unsigned long minTimes[numLeds] = {100, 200, 300};  // Minimale aan-tijd per LED
const unsigned long maxTimes[numLeds] = {500, 800, 1000}; // Maximale aan-tijd per LED

// Variabelen voor timing
unsigned long previousTimes[numLeds]; // Laatste keer dat elke LED veranderde
unsigned long intervals[numLeds];     // Huidige interval voor elke LED
bool ledStates[numLeds];              // Huidige staat van elke LED

void setup() {
  // Initialiseer seriële communicatie (optioneel voor debugging)
  Serial.begin(9600);
 
  // Initialiseer LED pinnen als OUTPUT
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins, OUTPUT);
    ledStates[i] = LOW;
    digitalWrite(ledPins, ledStates);
    previousTimes[i] = 0;
    intervals[i] = random(minTimes, maxTimes);
  }
}

void loop() {
  unsigned long currentTime = millis();
 
  for (int i = 0; i < numLeds; i++) {
    // Controleer of het tijd is om de LED te schakelen
    if (currentTime - previousTimes[i] >= intervals[i]) {
      // Schakel de LED
      ledStates[i] = !ledStates[i];
      digitalWrite(ledPins, ledStates[i]);
     
      // Update de vorige schakeltijd
      previousTimes[i] = currentTime;
     
      // Bepaal een nieuw random interval voor de volgende schakeling
      if (ledStates[i] == HIGH) {
        // LED gaat aan - gebruik aan-tijd interval
        intervals[i] = random(minTimes[i], maxTimes[i]);
      } else {
        // LED gaat uit - gebruik een korte uit-tijd (of pas aan-tijd aan)
        // Hier gebruiken we de helft van de minimale aan-tijd als uit-tijd
        intervals[i] = minTimes[i] / 2;
      }
     
      // Debug output (optioneel)
      Serial.print("LED ");
      Serial.print(i);
      Serial.print(": ");
      Serial.print(ledStates ? "AAN" : "UIT");
      Serial.print(", Volgende schakeling in: ");
      Serial.println(intervals[i]);
    }
  }
}


Ik ben zelf echter meer dan de object georienteerde aanpak. Niet altijd, maar voor dit soort dingen vind ik het wel handig. Ik zal eerdaags iets in elkaar sleutelen.

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Bert55

  • Offline Offline
  • Berichten: 894
Re: lampjes in huizen willekeurig schakelen
« Reactie #20 Gepost op: 21 July 2025, 21:17:39 »
Bedankt Bas en Rob.
Heb zelf overigens niets getypt, is allemaal AI.
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

bask185

  • Online Online
  • Berichten: 4982
Re: lampjes in huizen willekeurig schakelen
« Reactie #21 Gepost op: Vandaag om 00:15:11 »
Ik denk dat ik wat heb.

De bovenste vier regels zijn de enige die je hoeft aan te passen. Hier kan je gebruikte pinnen tussen de accolades {} zetten, en je kan 3 tijden aanpassen.
const int pin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 } ;
const int MIN_HOUSE_TIME  =   5000 ;
const int MAX_HOUSE_TIME  =  15000 ;
const int DAY_CHANGE_TIME = 200000 ;

Elke zoveel tijd (dayTimer) klapt 'state' om. Alle pinnen gaan van af dat moment in een willekeurige volgorde om met een willekeurig (instelbare) tijd tot de volgende.


De rest van de code ziet er zo uit. Er zijn echter wat meer bestandjes bij betrokken. Dus ik moet een .zip mailen zodat je alles hebt.
Het was wel even een puzzeltje, maar het is gelukt.
#include "light.h"
#include "src/ST.h"

const int nLights = sizeof(pin) / sizeof(pin[0]) ;
Light light[nLights] ;

Timer timer ;
Timer dayTimer ;

void setup()
{
    Serial.begin(115200);

    for (int i = 0; i < nLights; i++)
    {
        light[i].begin(pin[i]);
    }

    timer.set(TIMER_BLEEP, MIN_HOUSE_TIME);
    dayTimer.set(TIMER_TOGGLE, DAY_CHANGE_TIME);

    randomSeed(analogRead(A7));
}

void loop()
{
    timer.update();
    dayTimer.update();

    if (timer.Q)
    {
        uint8_t targetState = dayTimer.Q;

        // Count how many lights are not yet in the correct state
        int mismatches = 0;
        for (int i = 0; i < nLights; i++)
        {
            if (light[i].getState() != targetState) { mismatches ++ ; }
        }

        // Only toggle if there's something left to update
        if (mismatches > 0)
        {
            bool updated = false;

            // Try random indices until one needs to change
            while (!updated)
            {
                int index = random(nLights);

                if (light[index].getState() != targetState)
                {
                    light[index].setState(targetState);

                    updated = true;
                    timer.PT = random(MIN_HOUSE_TIME, MAX_HOUSE_TIME);

                    char buf[64] ;
                    sprintf( buf, "index: %3d, Time to next: %4d, state: %d", (int)index, (int)timer.PT/*/1000*/, (int)targetState ) ;
                    Serial.println( buf ) ;
                }
            }
        }
    }
}

De hoofd aandrijfveer is hier de dayTimer en die staat dan hier op 200s (alle tijden voer je in ms). Je zou die dus ook kunnen vervangen door een schakelaar. Als je dan de schakelaar omzet, dan volgen de lampen 1 voor 1 met willekeur.

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Ronald Schreuder

  • Offline Offline
  • Berichten: 48
Re: lampjes in huizen willekeurig schakelen
« Reactie #22 Gepost op: Vandaag om 08:58:35 »
Bedankt Bas, Ik moet mij er nog wel in verdiepen, maar vind het leuk dat je zo enthousiast bent en mij wilt helpen.
De rest ook allemaal bedankt voor de bijdragen.
Je kunt mij gewoon een email sturen als je dat wilt.
Gr Ronald
« Laatst bewerkt op: Vandaag om 09:33:48 door Ronald Schreuder »

Ronald Schreuder

  • Offline Offline
  • Berichten: 48
Re: lampjes in huizen willekeurig schakelen
« Reactie #23 Gepost op: Vandaag om 09:38:05 »
Toch maar even terugkomen op de vraag van de TS. Nu de heren verder bakkeleien over het wel en wee van het programmeren van een Arduino, gebruik ik zelf de apparaatjes van Woodland. Hier kan je de Led's makkelijk mee in / uitschakelen, dimmen, ad rondom schakelen. Op beide van mijn modelbanen gebruik ik deze zonder problemen. Geen digitaal gedoe.

Rob

Rob, ik heb even zitten kijken naar dat systeem, ziet er goed uit en is kant-en-klaar, maar wordt dat niet heel duur?
En er zijn 4 uitgangen, maar kun je daar per uitgang ook meerdere ledjes (eigen leds) op aansluiten, weet jij de maximale uitgang-stroom per uitgang?
Anders moet je voor elke 4 leds zo'n ding hebben, dan lopen de kosten aardig op...

AP3737

  • Offline Offline
  • Berichten: 313
Re: lampjes in huizen willekeurig schakelen
« Reactie #24 Gepost op: Vandaag om 09:52:03 »
Beste allen

Misschien heb ik het gemist, maar DE aanpak is toch gewoon gebruik te maken van de MoBaLedLib? Dat is een heel open source ecosystem, waarbij je kant en klare printjes kan kopen en de programmering bijvoorbeeld doet door wat vakjes in een spreadsheet in te vullen.

Ik hou van zelfbouw, maar voor de verlichting van de modelbaan zou ik altijd voor de mobaledlib kiezen. In Nederland is bijvoorbeeld Theo Maassen een actieve ontwikkelaar, en die heeft ook uitstekende printjes ontworpen.

https://wiki.mobaledlib.de/

https://wiki.mobaledlib.de/spezial/user/theo/hauptplatine_tmaa

Groet, Aiko

Bert55

  • Offline Offline
  • Berichten: 894
Re: lampjes in huizen willekeurig schakelen
« Reactie #25 Gepost op: Vandaag om 10:29:40 »
Beste Aiko,
Moba is een prima oplossing, net als een sketch in een Arduino proppen, die van Bas of die van mij ( na ja AI) en ook de Woodland oplossing met elk hun eigen voor en nadelen.

Ten eerste Woodland, verreweg het eenvoudigste te implementeren maar ongetwijfeld ook veruit het duurste, dat alleen houd me al tegen.

Dan Moba, de inleertijd is erg lang lijkt me, zeker voor de spoor liefhebbers zonder al te veel affiniteit met electronica. Daarbij is de Duitse taal ook een drempel, niet voor mij overigens.
Verder zie ik wat betreft open source een nadeel, vaak kan het alles maar wordt daardoor wat onoverzichtelijk. Ik wil hierbij niet generaliseren.

Zelf een sketch in een Arduino laden stelt niet veel voor, daarbij kost een Nano rond de €3 plus nog iets om hem in te steken, en kun je er veel leds onafhankelijk mee aansturen.
Kan me wel voorstellen dat niet iedereen hier zin in heeft / het een te hoge drempel vindt.

Voor mij is het een deel van de hobby om zelf printen te ontwerpen maar alle keuzes hierboven zijn prima, wellicht is er nog meer, ieder zijn ding.

Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

bask185

  • Online Online
  • Berichten: 4982
Re: lampjes in huizen willekeurig schakelen
« Reactie #26 Gepost op: Vandaag om 10:59:01 »
Je laat code wel maken door AI, maar Duits vertalen?  :P. Daar is AI wel goed in  (y).

Die moba dingen, is dat nu alles zelf in elkaar solderen?  :-X.

Dat doet me terug denken aan een van mn eerste projecten...
https://forum.beneluxspoor.net/index.php?topic=97216.0

Ik heb er ooit een SMD versie van ontworpen maar die heeft nog geen daglicht gezien.

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Bert55

  • Offline Offline
  • Berichten: 894
Re: lampjes in huizen willekeurig schakelen
« Reactie #27 Gepost op: Vandaag om 11:22:39 »
Weet niet hoe serieus ik jouw reactie moet zien Bas.

Duits hoef ik niet te vertalen, spreek en schrijf het als 2e taal.

En dit was mijn eerste AI sketch. Om te laten zien dat het vrij simpel kan zijn.
Veel omvangrijkere sketches heb ik zelf geschreven. Onder andere voor mijn rijdende auto’s
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

bask185

  • Online Online
  • Berichten: 4982
Re: lampjes in huizen willekeurig schakelen
« Reactie #28 Gepost op: Vandaag om 12:08:36 »
Mijn reacties moet je sws niet serieus nemen  ::)
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Mar-Cas

  • Offline Offline
  • Berichten: 262
  • Samen bouwen a.d. woonkamerbaan is wel zo gezellig
Re: lampjes in huizen willekeurig schakelen
« Reactie #29 Gepost op: Vandaag om 12:10:15 »
Alternatieve versie voor UNO, NANO, MEGA en ESP's,  Program: MIXLY

Voorbeeld met timers,
Simple timer 1 heeft 1sec on/off ritme.
Simple timer 16 stuurt timers aan tbv verschillende ritmes van timers al dan niet random.




« Laatst bewerkt op: Vandaag om 12:13:11 door Mar-Cas »
Greetz Caspar