ATmega328P Alien-gokkast Kit
Onderdelen en benodigdheden
| Microchip ATmega328P-PU (2x: 1 voor gokkast, 1 voor I2C credit-display slave) | 2 |
| 7-segment display 8 digits (spelercredits) | 1 |
| 8x8 LED-matrix, 4 segmenten, MAX7219 (3 rollen, 1 ongebruikt) | 1 |
| I2C 2004 Seriële Blue Backlight LCD 20x4 (menu) | 1 |
| Breadboard 830 punten | 2 |
| Momentcontactknoppen (1x rollen, 3x menu, 2x reset) | 6 |
| RGB Diffused Common Cathode LED | 1 |
| LED (standaard, power-indicator) | 1 |
| Weerstand 10kΩ (pull-ups knoppen + reset) | 6 |
| Weerstand 1kΩ (knop-beveiliging) | 4 |
| Weerstand 330Ω (RGB LED) | 3 |
| 16 MHz Kristal (2x) | 2 |
| Schuifschakelaar (voeding) | 1 |
| Buzzer (piezo) (2x: 1 per chip) | 2 |
| Condensator 22pF (kristal) | 4 |
| Condensator 0.1µF (100nF) | 6 |
| Condensator 100nF (optioneel, voor FTDI-programmering) | 1 |
| Condensator 10µF (voedingssmoothing) | 2 |
| Lineaire regelaar 7805 (5V) | 1 |
| Jumper-draden | 1 set |
| 5V voeding | 1 |
| Arduino Mini USB-serieel adapter (optioneel, voor programmeren) | 1 |
| FTDI USB-TTL Serial Adapter (2x, voor in-circuit programmeren) | 1 |
| Solderbaar breadboard (volledig + mini) | 1+1 |
| Soldeer 60/40 Rosin Core 0.8mm | 1 |
| Waterdichte projectbehuizing (clear plastic) | 1 |
Benodigde tools en machines
- Solderbout
- Helping Hands (derde hand)
Apps en online diensten
- Arduino IDE
- Timer Free Tone Library
- LED Control Library (LedControl)
- LiquidCrystal/LCD Library
- LiquidCrystal I2C Library
Over dit project
ATmega Alien-themed gokkast
Deze gokkast gebruikt twee ATmega328P-PU microcontrollers. Geïnspireerd door Cory Potter's Alien Invasion Slot Machine, wilde ik het concept uitbreiden. Het is voor entertainment en educatief doel. Ik probeerde een echte gokkast zo nauwkeurig mogelijk te simuleren. Op breadboard gebouwd; behuizing volgt na levering onderdelen. Bouwtijd: ~2 maanden in vrije tijd. De grootste uitdaging: de wiskunde achter de uitbetalingstabel na honderden miljoenen simulaties.
Hoe het spel werkt
Drie rollen met elk 25 unieke symbolen (één van de 4 matrices ongebruikt). Vijf manieren om te winnen:
- 3 ruimteschepen = Jackpot
- 1 of 2 ruimteschepen = credits
- 2 of 3 matchende symbolen = credits
- Combinatie (ruimteschip + 2 matchende symbolen) = uitbetaling op basis van laagste kans/hoogste uitbetaling (winnende events sluiten elkaar uit)
Functies
Via het 20x4 I2C LCD-display (2 navigatieknoppen + selectieknop) benader je het menu. Knoppen gebruiken een gesofisticeerd debounce-algoritme met externe interrupts.
Hoofdmenu: Play, Bet, Settings, Metrics, Reset, Hold (scrollen voor meer items). Er is ook een speciale 'spin'-knop.
Inzet wijzigen: Via Bet-menu (+5/-5 credits).
Auto-modus: Via Settings-menu. Spelt automatisch tot 1 miljoen speelrondes of handmatig stoppen. Ideaal voor testen. Geluid kan hier uitgeschakeld worden.
Metrics bekijken: Creditbalans, jackpot-aantal, overige winnings, etc. Ook zichtbaar in Seriële Monitor via RX/TX. Gebruikt voor simulatie-validatie.
Reset: Zet alle metrics (behalve EEPROM-schrijftellen) op nul. EEPROM houdt ~100.000 schrijfcycli; met 512kB beschikbaar kun je metrics-opslag verplaatsen bij benadering van limiet (niet geïmplementeerd).
Hold (huisvoordeel): Configureerbaar via menu (percentage van inzet dat huis houdt). Typisch max 15% per jurisdictie. Na Reset moet Hold opnieuw ingesteld worden.
Creditbalans: Altijd zichtbaar op 8-digit 7-segment display.
De Wiskunde
Kansen en uitbetalingen zijn berekend voor acceptabele Volatiliteitsindex (VI) (< ~20). VI meet voorspelbaarheid: hogere VI = onvoorspelbaardere winst/verlies. VI wordt gemanipuleerd via uitbetaaltabel.
Kansen (25 symbolen per rol, 15625 combinaties):
- 3 ruimteschepen: 1/15625 = 0.000064 (odds 1:15624)
- 3 symbolen matchen (geen schepen): 24/15625 = 0.001536 (odds ~1:650)
- 2 ruimteschepen: 72/15625 = 0.004608 (odds ~1:216)
- 1 ruimteschip: 1728/15625 = 0.110592 (odds ~1:8)
- 2 symbolen matchen: 1656/15625 = 0.105984 (odds ~1:8.4)
Met spreadsheet (bij code) zijn uitbetalingen getund tot VI = 16.43:
- 3 Schepen: 600x inzet
- 3 Symbolen: 122x
- 2 Schepen: 50x
- 1 Schip: 3x
- 2 Symbolen: 2x
Validatie: 5 simulaties van 1.000.001 spelen met 0% hold → werkelijke kansen matchen berekende kansen. Met 15% hold → inkomsten binnen 90% betrouwbaarheidsinterval.
De Code
Uitgebreid gecommentarieerd. Lees de bron (GitHub). Gebruikt:
- Timer Free Tone Library – piezospaker frequenties (Close Encounters thema bij opstart)
- LED Control Library – 3x 8x8 matrices (rollen) + 7-segment display (via I2C slave)
- LiquidCrystal I2C – 20x4 LCD (vervangbaar door 20x2 door
LCD_SCREEN_HEIGHTop 2 te zetten). Moet I2C-capabel zijn of met PCF8574 adapter.
State machine: machineState volgt statussen (IDLE, SPINNING, AUTO, SHOW_MENU). Events worden gedispatched via ProcessEvents.
Bekende issues:
- Soms draait 1-2 rollen niet (RNG kiest hetzelfde symbool) – geen defect.
- Rollen stoppen niet linkser-naar-rechts (ontwerpkeuze voor simpliciteit).
- 80% globaal geheugen gebruikt – instabiel risico bij toevoegingen.
TODO: Brown-out detectie, watchdog, geluid verbeteren, RGB LED beter benutten.
Symbolen (deels Space Invaders, deels zelf ontworpen) staan in SlotMachine.h in binair formaat voor makkelijke aanpassing.
De gokkast bouwen
Programmeren via FTDI USB-serieel bord (verbindingen niet in Fritzing-schema). Zie Arduino op breadboard voor setup. Bootloader branden via AVRISP mkII, USBtinyISP of Arduino als ISP.
Onderdelen
Kleine componenten op voorraad? < $40. Met behuizing + printplaat ~$60. Leveranciers: AliExpress, Amazon, eBay. 20x4 LCD niet verplicht; 20x2 werkt met code-aanpassing.
Software
Alle libraries in Arduino IDE installeren via Library Manager of handmatig.
Handtools
- Solderbout
- Helping Hands
Schema
Fritzing-schema beschikbaar (bij code op GitHub). Onderstaande pinout-listen helpen bij de drukke schematica:
Slot Machine (Master)
- Pin 1: FTDI RTS / resetknop
- Pin 2: FTDI TXD
- Pin 3: FTDI RXD
- Pin 4: 1kΩ → spin-knop
- Pin 5: 330Ω → RGB blauw
- Pin 6-13: ongebruikt (overweeg ground)
- Pin 7 VCC, Pin 8 GND: 0.1µF naar rails
- Pin 9-10: 16MHz kristal + 22pF naar GND
- Pin 14: DIN 8x8 matrices
- Pin 15: 330Ω → RGB rood
- Pin 16: 330Ω → RGB groen
- Pin 17: Piezo buzzer (+) / (-) → GND
- Pin 18: CS 8x8 matrices
- Pin 19: CLK 8x8 matrices
- Pin 20 AVCC, Pin 21 AREF: voeding
- Pin 22 GND
- Pin 23: zwevend (RNG seed)
- Pin 24: 1kΩ → nav-up knop
- Pin 25: 1kΩ → nav-down knop
- Pin 26: 1kΩ → select knop
- Pin 27 SDA → Slave pin 27
- Pin 28 SCL → Slave pin 28
Display Slave
- Pin 1: FTDI RTS / resetknop
- Pin 2: FTDI TXD
- Pin 3: FTDI RXD
- Pin 4-13: ongebruikt (ground?)
- Pin 7 VCC, Pin 8 GND: 0.1µF
- Pin 9-10: 16MHz kristal + 22pF
- Pin 15: Piezo buzzer
- Pin 16: CS 7-segment
- Pin 17: CLK 7-segment
- Pin 18: DIN 7-segment
- Pin 20 AVCC, Pin 21 AREF: voeding
- Pin 22 GND
- Pin 23-26: ongebruikt
- Pin 27 SDA → Master pin 27
- Pin 28 SCL → Master pin 28
Samenvatting
Leuk project om te bouwen. De wiskunde achter de uitbetaaltabel was de grootste uitdaging. Veel plezier ermee! Vragen/defects: dan-murphy@comcast.net. Deel II volgt na inbouw in behuizing.
Code
Drie bestanden op GitHub:
SlotMachine.ino(hoofdprogramma)SlotMachine.h(symbolen, noten, constanten)slotCreditsDisplaySlave.ino(I2C slave voor 7-segment display)
Schema's
Fritzing-schema en .fzz-bestand bij code. Spreadsheet met uitbetalingsberekeningen (wachtwoord: "password").
Productieproces
- EEG-Apparaten: Ontwerp, Productie en Opkomende Toepassingen
- Automaatjes: Een Amerikaanse Industriemacht van $36,6 Mrd
- Stemmachines: Geschiedenis, Technologie en Standaarden
- Expertgids voor Moderne Wisselgeldautomaten: Ontwerp, Componenten en Toekomsttrends
- Uitgebreid Overzicht van Moderne ECG-Apparaten: Technologie, Productie en Toekomstige Innovaties
- De Evolutie en Productie van Naaimachines: Van 19e-Eeuwse Innovatie tot Moderne Automatisering
- CNC-Machines: Geschiedenis, Ontwerp en Toekomsttrends
- Essentiële onderdelen van een draaibank: functies en overzicht
- Draaibanken begrijpen: geschiedenis, typen en toepassingen
- Belangrijkste Onderdelen van een Freesmachine Uitgelegd
- Wat is een machine? Een uitgebreide gids