Smart Jack

Smart Jack

Pygame Raspberry Pi Python

De Slimme Blackjacktafel

Smart Jack is een project dat ik heb gemaakt voor een IoT-groepsproject tijdens mijn eerste jaar op de hogeschool. Het spel draait op een Raspberry Pi 4. Het bevat een eID-kaartlezer om de speler te identificeren en te verifiëren. Het gebruikt ook een gehashte versie van hun rijksregisternummer om hen te identificeren in de database. Het spel zelf is een aangepast blackjack-spel gemaakt met Pygame. Het is geoptimaliseerd om op een Raspberry Pi 4 te draaien met behoud van een soepele 60fps ervaring.

Het Idee

Voor IoT moesten we een groepsproject doen waarbij we sensoren en actuatoren moesten gebruiken om iets cools te maken. Onze docent had de mindset van “hoe gekker, hoe beter”. In onze groep hadden we een lopende grap over gokken, dus besloten we natuurlijk om daar iets mee te doen.


Zo is Smart Jack ontstaan.

Het Spel

We zijn begonnen met het maken van het spel. Ik had veel ervaring met Pygame, dus ik nam de leiding over dat deel. Het was erg leuk om animaties en spellogica in het spel te verwerken. Ik heb de regels van blackjack geanalyseerd en geprobeerd ze zo nauwkeurig mogelijk te implementeren.


De enige uitdaging die overbleef was om het soepel te laten draaien op een Raspberry Pi 4, aangezien Pygame berucht is om zijn traagheid omdat het CPU-gebonden is en Python een geïnterpreteerde taal is. We mikten op een solide 60fps ervaring, maar zouden al blij zijn met 30fps. Ik heb delta time gebruikt om het spel op een constante snelheid te laten draaien, ongeacht de framerate.

Sensoren en Actuatoren

We gebruikten arcade-knoppen om het spel te besturen. Alles werd weergegeven op een groter scherm en om I2C-communicatie te integreren, gebruikten we een LCD-scherm. Het plan was om een camera met AI te gebruiken om onze studentenkaarten te detecteren en de spelers te identificeren. Helaas verschilden studentenkaarten te veel van elkaar en was de cameramodule veel te traag om een goed beeld te krijgen.


Ik kwam op het idee om een eID-kaartlezer te gebruiken om de speler te identificeren. Dit was een veel betere oplossing omdat het veiliger en betrouwbaarder is. Er is geen officiële Python-bibliotheek om Belgische eID-kaarten te lezen en de documentatie is erg pover. Ik vond online C#-code die ik heb geport naar Python. Dit werkte uiteindelijk erg goed en we konden alle openbare informatie van de kaart ophalen.

Handarbeid

Een arcadespel is niets zonder een mooi uitziende behuizing.

We hebben de beschikbare lasersnijder op school gebruikt om de houten panelen voor de behuizing te snijden. Deze zijn vervolgens met schroeven in elkaar gezet.

De behuizing was een beetje wankel, maar het werkte.

Eindresultaat

Onderdeel van het project was het verzamelen van telemetriegegevens.
ennl