Gooit de Neon Lamp Dice van 1966 echt random? Mijn geautomatiseerde simulatie geeft antwoord

3 Juni 2026 –

De Elektor Neon Lamp Dice Kit is een herontwerp van een schakeling die B.B. Gorneau in 1966 ontwierp. Dertien neonlampjes, een NE555 als pulstrigger en een 74HC374 als latch controller – en het geheel draait op 100 volt, gegenereerd door een STPS1150 boostconverter. Een prachtig stukje retro-elektronica. Maar ik stel mezelf een concrete vraag: levert dit circuit echt een gelijkmatig verdeeld dobbelsteenresultaat op? Of zit er een meetbare bias in? Tijd om dat wetenschappelijk aan te pakken – met een Arduino, een relais, en de chi-kwadraat toets.

Een uitdaging van een collega
Deze kit beland niet zomaar op mijn werkbank. Mijn collega Amir – met wie ik samen het werkplaatsbeheer verzorg bij Avans AAAd Engineering in ‘s-Hertogenbosch – speelt me deze uitdaging toe. Of de dobbelsteen wel echt random gooit. Een vraag die je makkelijk kunt afdoen met “tuurlijk, het is een chip”, maar die me genoeg prikkelt om er serieus antwoord op te geven. Met metingen en praktisch toegepaste statistiek.

Wat heb ik gebruikt
– Elektor Neon Lamp Dice Kit – Elektor Classic zie elektor.com/21197
– Arduino Uno R3 als meetcomputer en schakelaar trigger
– Joy-it relaismodule SRD-05VDC-SL-C voor het simuleren van de indrukken schakelaar
– Stannol HS10 soldeertin 0,5 mm en soldeerbout
– Dupont jumperdraden voor verbinden van PCB aan Arduino Uno R3
– hot-glue voor fixeren van meetdraden aan de PCB-achterkant
– KORAD KD3305D laboratoriumvoeding als stabiele 9 volt bron
– Arduino IDE voor programmeren en realtime seriële monitor

De kit in elkaar zetten
Ik bouw de kit op vanuit het niets – through-hole componenten, Stannol HS10 soldeertin, en de kenmerkende zwarte PCB van Elektor Classic. De achterkant van de print bevat de originele schematekst van Gorneau, een mooi detail. Alles is through-hole, wat het solderen aangenaam overzichtelijk maakt. De neonlampjes komen in een stervorm rond het midden te zitten, de passieve componenten netjes langs de randen. Na een uurtje solderen staat de kit in zijn houten Elektor Labs standaard.

Hoe werkt het circuit
De klassieke NE555 genereert een vrijlopende pulstrein. De 74HC374 samplet de toestand van de ringoscillator op het moment dat de schakelaar wordt ingedrukt – dat is het latch-moment. De uitgangspennen Q0 t/m Q5 coderen welk dobbelsteengetal verschijnt: zes specifieke bitvectoren activeren de bijbehorende combinatie van neonlampjes voor 1 t/m 6. De 100 volt voeding zorgt voor de karakteristieke oranje gloed van de neonbuisjes. Bij minder dan circa 7,2 volt op de ingang valt de werking al merkbaar weg – iets wat ik later in de test nog ga terugzien.

De meetopstelling: Arduino plus relais
Om de dobbelsteen geautomatiseerd te kunnen gooien, tap ik de uitgangslijnen Q0, Q1, Q2, Q4 en Q5 af via jumperdraden naar de achterkant van de PCB. Die verbind ik met digitale ingangen D2 t/m D6 van een Arduino Uno R3. Voor het simuleren van een druk op de schakelaar gebruik ik een Joy-it relaismodule op 5 volt, aangestuurd via D13. De code schrijf ik in de Arduino IDE.

Bedrading aan de achterkant
De aansluitpunten op de PCB zijn bereikbaar via de soldeerpads aan de achterkant. Ik breng de jumperdraden samen in een hot-glue blob zodat ze mechanisch vast zitten en er geen kortsluiting kan ontstaan tussen de 100 volt sectie en de 5 volt Arduino logica. Even opletten bij het plaatsen: de hoogspanningszijde van het circuit ligt open op de print. Dus oppassen met waar ik de print oppak bij verplaatsing wanneer hij aan staat.

De decodeerlogica in Arduino
Ik maak een feitentabel van de vijf afgetapte uitgangen naar de dobbelsteenwaarden 1 tot en met 6. Die tabel vertaal ik rechtstreeks naar if-else logica:

if (q0 == 0 && q1 == 0 && q2 == 0 && q4 == 1 && q5 == 0) {
  getal = 1;
}
else if (q0 == 0 && q1 == 0 && q2 == 0 && q4 == 0 && q5 == 0) {
  getal = 2;
}
else if (q0 == 0 && q1 == 0 && q2 == 0 && q4 == 0 && q5 == 1) {
  getal = 3;
}
else if (q0 == 0 && q1 == 0 && q2 == 1 && q4 == 0 && q5 == 0) {
  getal = 4;
}
else if (q0 == 0 && q1 == 1 && q2 == 0 && q4 == 0 && q5 == 0) {
  getal = 5;
}
else if (q0 == 1 && q1 == 0 && q2 == 0 && q4 == 0 && q5 == 0) {
  getal = 6;
}

Het relais krijgt een random trigger met een vertraging tussen de 100 en 1000 milliseconden – de randomSeed haal ik uit de zwevende A0 ingang om ervoor te zorgen dat het gesimuleerde indrukken van de knop gebaseerd is op een random sequence. Na elke triggerpuls wacht de sketch 3,5 seconde voordat ik de uitgang uitlees: dat geeft de latch controller de tijd om te settelen en de neonlampjes hun eindstand te laten bereiken.

Realtime feedback via de seriele monitor
Elke worp verschijnt in de Arduino IDE seriele monitor. Het scherm toont per dobbelsteenwaarde het absolute aantal worpen, het percentage, en de afwijking ten opzichte van het ideale 16,67 procent. Zo zie ik in een oogopslag of er iets scheef loopt. Zoals hieronder te zien, blijkt bij worp 83 de verdeling nog steeds een aardig random gedrag te vertonen.

De chi-kwadraat berekening
Voor de statistische toets bereken ik chi-kwadraat op basis van de opgebouwde tellerarray:

for (int i = 1; i <= 6; i++) {
  float verschil = teller[i] - verwacht;
  chi2 += (verschil * verschil) / verwacht;
}

De drempelwaarde voor een eerlijke verdeling bij 5 vrijheidsgraden en een betrouwbaarheidsniveau van 95 procent is 11,07. Ligt de chi-kwadraat uitkomst daaronder, dan concludeer ik dat de verdeling normaal mag worden beschouwd. Maar ik wil die uitspraak pas doen na minimaal 600 worpen: bij minder worpen is het statistisch bewijs te dun. Met 1 seconde per triggerpuls plus 3,5 seconde wachttijd per worp kost dat rekenkundig 600 x 4,5 seconde – dat is 45 minuten meten.

Het resultaat: een random verdeling, met lichte maar meetbare afwijking
Na meer dan 600 gesimuleerde worpen is mijn conclusie: de Neon Lamp Dice gooit niet perfect random. Er is een kleine maar statistisch meetbare bias aanwezig. De afwijking is klein genoeg om in normaal gebruik niet op te vallen, maar groot genoeg om zichtbaar te zijn in de chi-kwadraat berekening. Een opvallende bijkomstigheid: toen ik een 9 volt blokbatterij gebruikte en die onder de 7,2 volt zakte, werden de afwijkingen aanzienlijk groter. Ik heb de batterij daarom vervangen door mijn KORAD KD3305D laboratoriumvoeding, ingesteld op 9 volt. Stabiele voeding blijkt cruciaal voor het correct functioneren van het circuit.

Q0=0 Q1=0 Q2=0 Q4=1 Q5=0

Worp 687 = 1

1: 15.28% (105 keer)
2: 19.36% (133 keer)
3: 13.10% (90 keer)
4: 16.30% (112 keer)
5: 18.20% (125 keer)
6: 17.76% (122 keer)

Afwijking t.o.v. ideaal 16.67%
1: -1.38%
2: +2.69%
3: -3.57%
4: -0.36%
5: +1.53%
6: +1.09%

Chi² = 10.528 –> Verdeling lijkt random

Wat ik hier eigenlijk aan het bouwen ben
Dit project gaat verder dan een leuke retro-kit. Wat ik hier neerzet is een generieke methodiek voor geautomatiseerde fysieke simulatie – en die is breder inzetbaar dan alleen het testen van een dobbelsteen. De aanpak bestaat uit drie herbruikbare stappen:

1) geautomatiseerd simuleren van gebruikersinteractie via een relais,
2) observeren en digitaliseren van het fysieke resultaat,
3) berekenen van statistische uitspraken over de verkregen dataset.

Elke fysieke schakeling met een meetbaar uitgangsignaal is op deze manier te valideren – van sensoren tot schakelautomaten. Leuk om dat met zo’n klassiek circuit van 60 jaar oud voor het eerst volledig geautomatiseerd door te lopen.

Wat heb ik geleerd met dit project
Het meest concrete inzicht: voeding is geen bijzaak. Een dalende batterij heeft merkbare impact op de meetresultaten op een manier die je zonder referentiemeting niet ziet aankomen. Stabiele voeding is een randvoorwaarde, geen optie. Verder leer ik dat de chi-kwadraat toets pas echt zegt wat hij zegt boven de 600 worpen – met minder data is de uitkomst statistisch gezien te wankel om conclusies op te bouwen. Geduld is dus een meetinstrument. Op methodisch vlak bevestigt dit project dat een relais als fysieke actuator prima werkt als brug tussen software en hardware – de combinatie van randomSeed, variabele trigger-delays en een vaste uitleesvertraging geeft een betrouwbare en herhaalbare meetcyclus. En tot slot: een schakeling uit 1966 gedraagt zich verrassend consistent als je haar de juiste omstandigheden geeft. Gorneau wist wat hij deed.