gemaakt door kobe, febe, niels en wout

kantelbaar doolhof

Hardware componenten
Fase 1

Onderzoek Voorbereiding

Activiteit

Inventarisatie van de benodigde hardware voor het project.

Doel

Bepalen welke componenten nodig zijn om een interactief, kantelbaar doolhofspel te maken.

Resultaat

Gekozen voor een TFT-scherm (ST7789) voor de visuele weergave, een MPU-6050 sensor (versnellingsmeter/gyroscoop) voor de kanteling, en een Arduino microcontroller voor de aansturing.

Wokwi Simulator Screenshot
Fase 2

Simulatie in Wokwi

Activiteit

Opzetten van de virtuele testomgeving en schrijven van de basiscode.

Doel

De logica van het spel, de muren en de beweging van de bal testen zonder dat er fysieke hardware aangesloten hoeft te worden.

Resultaat

De eerste opzet van het doolhof werkte in de simulator en de virtuele sensorwaarden stuurden de bal correct aan.

Muren en botsingsdetectie bug
Fase 3

Probleemoplossing (Debugging)

Probleem

Het balletje bewoog soms dwars door muren heen bij een te hoge snelheid (ver gekantelde sensor).

Oorzaak

Als de stapgrootte groter is dan de muurdikte, springt de bal in één frame over de muur heen. De botsingsdetectie (raaktMuur) wordt dan niet geactiveerd.

Oplossing

Er is een maximale snelheidsbegrenzing toegevoegd. Door de stappen klein te houden kan de bal de muren nooit 'overslaan'. Dit loste het probleem volledig op.

Schakeling op breadboard
Fase 4

Prototyping en Schema

Activiteit

Het ontwerpen van een elektrisch schema en het bouwen van een fysiek testcircuit.

Doel

Controleren of de fysieke componenten buiten de simulator correct samenwerken via SPI (scherm) en I2C (sensor), zonder direct te solderen.

Resultaat

De tijdelijke opstelling op het breadboard functioneerde goed. Het scherm reageerde correct op de fysieke sensor. Groen licht voor de montage!

Soldeerwerk op printplaat
Fase 5

Solderen

Activiteit

Het definitief aan elkaar solderen van de componenten.

Doel

Het kwetsbare breadboard-circuit omzetten in een robuuste, trillingsbestendige elektronische schakeling.

Resultaat

Alle componenten zijn stevig vastgesoldeerd op een prototypeprintplaat. Omdat het spel constant beweegt, voorkomt dit dat kabeltjes losraken tijdens het spelen.

3D geprinte of gemaakte behuizing
Fase 6

Behuizing

Activiteit

Het ontwerpen en maken van een fysieke behuizing voor het spel.

Doel

De elektronica beschermen en zorgen dat het project comfortabel als een echte handheld console in de hand ligt.

Resultaat

Een strakke behuizing waarin het TFT-scherm perfect zit verwerkt. Omdat de MPU-6050 nu stevig vastzit aan de behuizing, reageert het spel direct en vloeiend op kantelingen.

Logica en Structuur

Code Architectuur (Flowcharts)

Om de logica van de software visueel in kaart te brengen, is het programma opgedeeld in de eenmalige setup en de doorlopende hoofdloop. Hieronder staat de exacte werking stap voor stap uitgelegd.

Fase 1: Setup Flowchart

1. De Eenmalige Setup

Dit schema toont de initialisatiefase bij het opstarten van de Arduino. De microcontroller start op en configureert direct het TFT-scherm en de I2C-communicatiebus. Vervolgens vindt er een hardware-check plaats op de MPU-6050 sensor: bij een fout stopt het programma met de melding "Hardware Fout!", bij een succesvolle check wordt een nieuw spel gegenereerd, de balcoördinaten op startpositie (30, 30) gezet en het speelveld (zwarte achtergrond, cyaan muren, groen gat, witte bal) getekend.

Fase 2: Hoofdloop Deel 1 Flowchart

2. Hoofdloop: Sensor en Botsing

Dit diagram visualiseert het eerste deel van de actieve game-loop. De Arduino leest continu de ruwe kantelgegevens uit de MPU-6050 sensor en rekent deze waarden om naar een pixelsnelheid op de X- en Y-as. Om te voorkomen dat de bal te snel gaat, worden de waarden begrensd via een constrain(). Daarna volgt een aparte as-controle op muurbotsingen: zowel op de X-as als op de Y-as wordt gecontroleerd of er een muur geraakt wordt. Zo niet, wordt de positie aangepast; zo wel, wordt de beweging op die as geblokkeerd.

Fase 2: Hoofdloop Deel 2 Flowchart

3. Hoofdloop: Scherm-update en Winst

Het sluitstuk van de loop verwerkt de grafische rendering en de win-conditie. Eerst wordt gecontroleerd of de bal daadwerkelijk is verschoven: als dit het geval is, wordt de oude balpositie zwart gewist en de nieuwe bal wit getekend. Vervolgens berekent de Arduino via de stelling van Pythagoras de exacte afstand tussen de bal en het groene gat. Is deze afstand kleiner dan 10 pixels? Dan wint de speler, toont het scherm "WIN!", wacht het programma 3 seconden en start een nieuw spel. De loop eindigt met een korte delay van 15 milliseconden alvorens weer terug te keren naar stap 1.