Portfolio 2025-2026 gemaakt door Sem Biernaux.
Opleiding in informatica en communicatiewetenschappen.
De GIP, oftewel de geïntegreerde proef, is een project waar je ongeveer een jaar lang aan werkt. Voor mij is het een kans om te laten zien wat ik in mijn studierichting heb geleerd en welke vaardigheden ik heb ontwikkeld.
Normaal gesproken gaat het om één groot project, maar in de richting 6ICW krijgen wij de kans om aan meerdere en kleinere projecten te werken.
Hieronder staan alle vakken die geholpen hebben bij het opstellen van de geïntegreerde proef.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua ut enim.
In het begin maakten we kennis met Promotion, waarbij het begrijpen van databases de basis vormde. Daarnaast bouwden we ons eerste reactiespel met behulp van een Raspberry Pi.
In de daaropvolgende weken verdiepten we ons verder in Promotion en werkten we dit project ook succesvol af.
Tijdens deze periode ging ieder van ons zijn eigen weg. Zelf maakte ik een website voor de GIP van Vincent Smetsers. Ook maakte ik een spel op de Raspberry Pi.
Tegen het einde van het jaar werkte ik verder aan de web-HMI van Vincent. Ook voltooide ik het ledstrip-spel.
De richting 6SPB heeft een website nodig om hun GIP op een aantrekkelijke en overzichtelijke manier voor te stellen. De leerlingen van SPB ontwikkelen zelf verschillende cursussen die gevolgd kunnen worden. Deze cursussen bevatten oefeningen waarmee gebruikers specifieke spiergroepen kunnen trainen.
1.1.2 Doelstelling van het projectHet doel van ons, 6ICW, is om een toegankelijke en gebruiksvriendelijke website te ontwerpen en te ontwikkelen, zodat 6SPB hun GIP eenvoudig kan presenteren aan een breder publiek. Voor de technische uitwerking maken we gebruik van PHP en een database (phpMyAdmin) om alle informatie op een gestructureerde manier op te slaan en te beheren. We gebruiken hiervoor ook html, CSS en Javascript.
1.1.3 GebruikersfunctionaliteitenIn dit project kregen we het websitetemplate "Promotion" als basis voor onze applicatie. Binnen deze website wordt voorzien in een automatische weergave van labels en cursussen, zodat de inhoud overzichtelijk en gestructureerd wordt gepresenteerd. Daarnaast is het de bedoeling dat andere gebruikers de cursussen van de leerlingen snel en eenvoudig kunnen raadplegen. Verder moet er een inlogsysteem worden ontwikkeld. Via deze inlogpagina kunnen de leerlingen hun cursussen op een gebruiksvriendelijke en overzichtelijke manier beheren. Dit houdt in dat zij hun cursussen kunnen toevoegen, aanpassen en organiseren. Ook wordt er voorzien in accountbeheer, zodat gebruikers hun persoonlijke gegevens en accountinstellingen zelfstandig kunnen wijzigen.
Voor de uitvoering van dit project starten we met het opzetten van de ontwikkelingsomgeving. We installeerden een lokale server via XAMPP, waarbinnen Apache en MySQL actief zijn. De database werd aangemaakt in phpMyAdmin en bevat tabellen voor de gebruikers, cursussen, oefeningen en labels. De structuur van de website is opgebouwd op basis van het opgegeven template Promotion. We pasten de HTML- en CSS-bestanden aan, zodat de stijl aansloot bij het thema van 6SPB. De navigatie werd uitgebreid met een overzichtspagina voor cursussen en een inlogpagina voor leerlingen.
1.2.2 Back-endontwikkeling (PHP & database)Via PHP werd de connectie met de database en de logica voor het ophalen en weergeven van cursussen en labels geïmplementeerd. Cursussen worden automatisch ingeladen vanuit de database en dynamisch weergegeven op de overzichtspagina. Elke cursus is gekoppeld aan een of meerdere labels die de doelspiergroep aanduiden. Het inlogsysteem maakt gebruik van sessies in PHP. Na een succesvolle login worden gebruikers doorgestuurd naar hun persoonlijk dashboard, waar ze hun cursussen kunnen toevoegen, bewerken en verwijderen. Wachtwoorden worden gehasht en opgeslagen via password_hash() voor een veilige authenticatie.
1.2.3 Front-end en gebruiksvriendelijkheidDe front-end werd opgebouwd met HTML5, CSS3 en Javascript. De template werd aangepast, zodat de lay-out nu naar onze smaak is. Met Javascript werd interactiviteit toegevoegd, zoals het filteren van cursussen op label en het valideren van formulieren aan de clientzijde. Het sturen van data naar de database werd onder andere ook door Javascript gedaan, door het werken met Ajax-calls. Extra aandacht ging naar het bewerken van het profiel, waar de gebruikers hun persoonlijke gegeven konden aanpassen. De wijzigingen worden dan direct verwerkt in de database en de gebruiker kan meteen door met werken.
1.2.4 Account maken of inloggenVoor de login pagina maakte ik gebruik van Eduport's template. De standaardprocedure om informatie door te sturen naar de back-end is door gebruik te maken van een invul veld, zoals: vul hier je gebruikersnaam in. Daarna kan je via Javascript een variabele koppelen aan de waardes die je hebt ingevuld. Vanaf daar sturen we via een Ajax call de informatie door naar een PHP bestand dat dan de info veilig in de database opslaat.
1.2.5 Profiel bewerkenHet bewerken van je profiel werkt in principe precies hetzelfde als een account aanmaken. Je vult een veld in, bijvoorbeeld je leeftijd. Dan kan je door het opslaan knopje weer met Javascript de informatie ophalen en doorsturen via een Ajax call. PHP haalt deze waardes weer op en update de database naar wat je had ingevuld.
1.2.6 Maken van fiches en cursussenOok werkt het maken van fiches en cursussen op dezelfde manier. Van een invult veld naar de database. Na het versturen van je fiche kan je deze fiches zien op je dashboard, waar je ook je fiche kan verwijderen en later kan bewerken. Nu kan je met deze fiches een cursus maken, die je dan weer kan publiceren en bekijken. Zo kunnen de mensen je cursus volgen.
Een aantal doelen die we wilden bereiken waren het aanmaken van cursussen en fiches, waarbij de fiches versleepbaar moesten zijn. Ook hebben we een inlogsysteem gemaakt waarbij de gebruikers gebruiksvriendelijk kunnen inloggen. Het is ook belangrijk dat de gebruiker zijn eigen info kan aanpassen. Waaronder zijn profielfoto, voornaam, achternaam, leeftijd, gender, lengte en gewicht. Met deze info kunnen we dan uiteindelijk filteren op resultaten die beter geschikt zijn voor de gebruiker zelf. Je kan ook je eigen gemaakte fiches bekijken en verwijderen. Dit zijn alle behaalde doelen.
Voor dit project hebben we een reactiespel ontwikkeld waarbij de speler een knop indrukt om een timer te starten. Het doel van het spel is om de knop opnieuw te klikken zodra de timer tien seconden bereikt. De nauwkeurigheid van de speler wordt beoordeeld op basis van hoe dicht de klik bij de tien seconden ligt. Om een competitief element toe te voegen, worden de vijf beste scores opgeslagen op een scorebord, zodat spelers hun prestaties kunnen vergelijken en verbeteren. Dit spel biedt een eenvoudige manier om reactietijd en concentratie te trainen.
Dit heb ik zelf niet gedaan.
Er zijn verschillende manieren waarop het reactiespel verder verbeterd kan worden. Zo kan de functionaliteit van de knop uitgebreid worden, bijvoorbeeld door meerdere acties toe te wijzen, zoals het pauzeren van de timer, het terugzetten naar nul, of het navigeren door menu's. Daarnaast kan het spel visueel aantrekkelijker gemaakt worden door animaties of kleurveranderingen bij het indrukken van de knop. Ook kan het scorebord uitgebreid worden met extra statistieken, zoals gemiddelde fout per speler of het aantal gespeelde rondes. Tenslotte kan het spel uitgebreid worden met verschillende moeilijkheidsgraden, bijvoorbeeld door kortere of langere timers, waardoor het uitdagender wordt voor gevorderde spelers.
Stel: je werkt in een fabriek waar je dikke en dunne lagers moet sorteren en verplaatsen. Dit gebeurt door een module die wordt aangestuurd door een plc (Programmable Logic Controller). Een plc is een soort computer die je kan bedienen met fysieke knoppen of met een HMI (Human Machine Interface), een scherm dat vast aan de machine hangt. Dat is heel ouderwets, want je moet er fysiek bij staan om de machine te bedienen. Daarom vervang ik de HMI van Vincent Smetsers door een Web HMI: een website waarmee je de machine kan besturen van waar je ook bent, zolang je maar internet hebt.
In plaats van een scherm aan de muur maak ik een website die hetzelfde kan, maar dan vanop afstand.
Het systeem bestaat uit een aantal lagen die met elkaar moeten communiceren. Het is makkelijker om die eerst even op te sommen, want daarna wordt de rest veel duidelijker.
Onderaan heb je de plc van Vincent, de Siemens S7-1215C. Deze machine stuurt de motoren en sensoren aan. De plc kan op zichzelf werken met handmatige besturing of met een HMI.
Het probleem is dat je de plc enkel kan bereiken via het netwerk van school. Want je kan niet zomaar uit dat netwerk zonder beveiligingen uit te schakelen, en dat mochten we niet doen. Daarom hebben we een Raspberry Pi ertussen gezet. De Raspberry Pi zit op hetzelfde netwerk als de plc en kan er rechtstreeks mee praten. De Pi heb ik geprogrammeerd met Python.
Daarboven komt de website. Die moet je kunnen openen vanaf eender welke laptop ter wereld. De volgorde is dus: je laptop, het internet, de Raspberry Pi en de plc. En weer terug.
De plc is het hart van de sturing in Vincents module. Alle componenten zijn rechtstreeks verbonden met deze controller. De plc verzamelt continu signalen van de sensoren en beslist op basis van de geprogrammeerde logica welke acties uitgevoerd moeten worden.
Dankzij deze centrale sturing verloopt het volledige proces automatisch, zonder dat iemand er met de hand bij moet. De plc zorgt ervoor dat de juiste ventielen op het juiste moment worden aangestuurd, volgens het geprogrammeerde GRAFCET-verloop. Een GRAFCET is een soort stappenschema dat beschrijft welke stap na welke stap komt en onder welke voorwaarde. Daarnaast wordt ook de keuze van de gebruiker via de HMI verwerkt en kunnen veiligheidsacties uitgevoerd worden, zoals een stop bij storing.
De plc die Vincent gebruikt, is de Siemens SIMATIC S7-1215C DC/DC/Relay (6ES7215-1HG40-0XB0).
Deze compacte controller beschikt over:
• 14 digitale ingangen (24 V DC)
• 10 digitale uitgangen (relais), geschikt voor hogere schakelstromen
• 2 analoge ingangen (0-10 V DC) en 2 analoge uitgangen (0-20 mA)
• Een ingebouwde PROFINET-interface met 2 poorten voor communicatie
• Ingebouwde high-speed tellers
• Uitbreidbaar met signaalborden, communicatiemodules en tot 8 signaalmodules
De PLC wordt geprogrammeerd met TIA Portal. (Siemens, 6ES7215-1HG40-0XB0, 2026)
Voor je verder leest, is het handig om te weten wat ik bedoel met al de adressen zoals Q0.1, I0.3 of M20.1. In een plc heb je drie soorten geheugen die je gebruikt:
Ingangen (I): dit zijn de signalen die binnenkomen, bijvoorbeeld van een sensor. Een ingang kan de plc enkel lezen, niet veranderen. Bijvoorbeeld I0.3 is de sensor die zegt of de uitstoter in rust staat.
Uitgangen (Q): dit zijn de signalen die de plc naar buiten stuurt, bijvoorbeeld om een ventiel of motor aan te sturen. Een uitgang kan de plc zelf hoog of laag zetten. Bijvoorbeeld Q0.2 stuurt de uitstoter aan.
Merkers (M): dit zijn interne geheugenbitjes van de plc. Ze hangen niet vast aan een fysieke draad, maar de plc gebruikt ze om dingen te onthouden of door te geven.
geven, zoals "start het programma" (M20.1) of "er is een storing" (M89.7). Een merkerwoord (MW) is gewoon een merker die een heel getal kan onthouden in plaats van enkel 0 of 1, bijvoorbeeld MW100 voor het aantal cyclussen.
Het punt in een adres zoals Q0.2 betekent: byte 0, bit 2. Dat hoef je niet echt te onthouden, maar het verklaart waarom alles met punten geschreven wordt. Telkens zeg ik dan: "Zet M20.1 hoog." Dan bedoel ik dat ik de plc het signaal geef om te starten.
De Raspberry Pi staat altijd vast verbonden met de plc. Maar een website moet je kunnen besturen vanaf overal. Dit is een probleem, want je kan niet zomaar uit een netwerk zonder beveiligingen uit te schakelen. We lossen dit op door middel van een tool genaamd ngrok. De Raspberry Pi maakt verbinding met ngrok-servers op het internet. Ngrok geeft dan een publiek webadres terug. Wanneer je een knop indrukt op de website stuurt hij dit naar ngrok, die het doorstuurt via de tunnel naar de Raspberry Pi. De Raspberry Pi verwerkt het en stuurt een antwoord terug via ngrok naar de website.
3.2.4 Hoe veilig is ngrok?Het goede nieuws is dat de verbinding versleuteld is via HTTPS, waardoor niemand die het verkeer onderschept er iets aan heeft. Er zijn ook een aantal zwakke punten: wanneer iemand het ngrok-adres kent, kan die de plc aansturen zonder de website te openen. De gratis versie van ngrok heeft ook geen wachtwoord, wat betekent dat de tunnel open staat voor iedereen. Dit wordt opgelost met user rollen en API-beveiliging.
De gebruikersgegevens worden opgeslagen in een MariaDB-database op een externe server. De tabel "sem_user" bevat de kolommen id (UUID), username, email, password (gehasht), role, terms_accepted en de aanmaakdatum. Elke gebruiker krijgt bij registratie automatisch een unieke UUID v4 als primaire sleutel.
3.3.2 Login & registratieGebruikers kunnen een account aanmaken via de registratiepagina. Ze vullen hun gebruikersnaam, e-mailadres en wachtwoord in. Het wachtwoord wordt gehasht opgeslagen via PHP's password_hash(). Na registratie worden ze automatisch ingelogd. Bij een volgend bezoek loggen ze in via login.php, waar hun gegevens worden gecontroleerd via password_verify().
3.3.3 Rolsysteem (Admin / Operator / Viewer)Het systeem maakt gebruik van drie gebruikersrollen, opgeslagen als een getal in de database: 0 staat voor Admin, 1 voor Operator en 2 voor Viewer. Een Viewer ziet enkel het Dashboard en de informatiepagina's. Een Operator heeft ook toegang tot het Handmatig scherm en de Takenplanner. Een Admin kan bovenop alles de Adminpagina raadplegen, waar hij gebruikers kan bewerken of verwijderen.
Het Dashboard is de startpagina na het inloggen en toont het automatisch bedrijf van de machine. Er zijn twee panelen: "Commando's" en "Machine Status". Vanuit Commando's kan een Operator of Admin een START- of STOP-puls sturen naar de PLC, of de noodstop activeren. De machine statuspaneel toont real-time LEDs die elke seconde worden vernieuwd via een automatische poll naar de Flask API.
3.4.2 Handmatig schermHet handmatig scherm geeft Operators en Admins individuele controle over elke actuator. Per actuator is er een toggle-schakelaar om de uitgang vast aan of uit te zetten, en een drukknop die de uitgang enkel hoog houdt zolang de knop ingedrukt is. De actuatoren die bediend worden zijn de Uitstoter (Q0.0), Grijper (Q0.1), Controle (Q0.2), Selectie lager (Q0.3), Draaiarm (Q0.4/Q0.5) en het Perslucht ventiel (Q0.6).
3.4.3 Elektrische sledeDe elektrische slede is een stappenmotor die via de PLC-uitgangen Q68 en Q69 aangestuurd wordt. Op het scherm verschijnt een visuele slider met drie posities (0, 1 en 2). Er zijn ook jog-knoppen om de slede manueel te verplaatsen, een homen-knop en een alarm reset. De slider is ook bedienbaar via het toetsenbord en via slepen met de muis of aanraakscherm.
3.4.4 TakenplannerDe takenplanner laat Operators en Admins een reeks PLC-opdrachten samenstellen en automatisch uitvoeren. Via een drag-and-drop interface sleept de gebruiker taken vanuit een bibliotheek naar een volgorderij. Er zijn vijf taaktypen beschikbaar: Dunne lager, Dikke lager, Volledige cyclus, Reset alarm en Wacht. Een uitvoerlog rechts toont elke stap met tijdstempel en kleurcode.
3.4.5 StatistiekenDe statistiekenpagina leest numerieke waarden uit het merkergeheugen van de PLC. Via de Flask API worden 16-bit integers gelezen op adressen MW100 t.e.m. MW108. De weergegeven statistieken zijn: het totale aantal cyclussen, het aantal gesorteerde dikke lagers, het aantal gesorteerde dunne lagers, het aantal fouten en de laatste cyclustijd in milliseconden. De waarden worden automatisch elke vijf seconden ververst zolang de statistiekenpagina actief is.
3.4.6 Zwakke puntenHet systeem heeft een aantal bekende zwakke punten. Ten eerste staat de API-sleutel hardgecodeerd in de JavaScript-bestanden, waardoor iedereen die de broncode bekijkt de sleutel kan zien. Ten tweede mist het edit-user.php-bestand een authenticatiecontrole. Ten derde bewaart de takenplanner reeksen in de lokale opslag van de browser, waardoor ze verdwijnen bij een andere browser of incognitovenster. Ten slotte is de gratis ngrok-tunnel publiek toegankelijk voor iedereen die het adres kent, al wordt de schade beperkt door de API-sleutel.
Elke HTTP-aanroep naar de Flask API vereist een geheime sleutel in de header X-API-Key. De API vergelijkt deze sleutel met een vaste waarde in plc_api.py. Klopt de sleutel niet, dan antwoordt de server met een 401 Unauthorized-fout en wordt de aanvraag geblokkeerd. Enkel de publieke eindpunten /status, /config en / zijn vrijgesteld van deze controle, zodat de website de basisstatus kan ophalen zonder al ingelogd te hoeven zijn. Dit voorkomt dat iemand die het ngrok-adres kent rechtstreeks commando’s naar de PLC kan sturen.
3.5.2 Rolgebaseerde toegangscontroleDe beveiliging werkt op twee niveaus. Op de PHP-laag controleert elke pagina de sessie en stuurt niet-ingelogde gebruikers door naar de loginpagina. Gevoelige PHP-includes zoals admin.php zijn enkel zichtbaar als de sessievariabele $_SESSION[‘role’] gelijk is aan 0. Op de API-laag stuurt elke JavaScript-aanroep de rol mee als HTTP-header X-User-Role. De Flask API weigert schrijfopdrachten wanneer die header de waarde 2 (Viewer) bevat. Zo kan een Viewer, zelfs als hij de API-sleutel kent, nooit een uitgang aansturen. Knoppen in de JavaScript-interface worden ook meteen uitgeschakeld voor Viewers via de USER_ROLE-variabele die PHP injecteert.
3.5.3 HTTPS via ngrokAlle communicatie tussen de browser en de Flask API verloopt via HTTPS. Ngrok versleutelt het verkeer met een TLS-certificaat, waardoor de inhoud van elk bericht onleesbaar is voor iemand die het verkeer onderschept. Dit geldt zowel voor de API-aanroepen als voor de API-sleutel die in de headers wordt meegestuurd. De HTTPS-verbinding verhindert ook man-in-the-middle-aanvallen waarbij iemand nep-antwoorden zou kunnen injecteren.
3.5.4 Wachtwoordbeveiliging (hashing)Wachtwoorden worden nooit in leesbare tekst opgeslagen. Bij registratie wordt het wachtwoord gehasht via PHP’s ingebouwde functie password_hash() met het bcrypt-algoritme. Bij het inloggen vergelijkt password_verify() het ingevoerde wachtwoord met de opgeslagen hash. Bcrypt voegt automatisch een unieke salt toe, waardoor twee gebruikers met hetzelfde wachtwoord toch een andere hash krijgen. Dit beschermt de accounts zelfs als de database zou uitlekken.
3.5.6 Zwakke punten & verbeterpuntenHet systeem heeft een aantal bekende zwakke punten. Ten eerste staat de API-sleutel hardgecodeerd in de JavaScript-bestanden. Iedereen die de broncode van de webpagina bekijkt kan deze sleutel zien en er misbruik van maken. Een betere aanpak zou zijn om alle API-aanroepen via de eigen PHP-server te laten lopen, zodat de sleutel nooit de browser bereikt. Ten tweede mist het edit-user.php-bestand een authenticatiecontrole: in theorie kan iemand die weet welke data hij moet sturen rollen aanpassen zonder ingelogd te zijn als admin. Ten derde bewaart de takenplanner reeksen in de lokale opslag van de browser, waardoor reeksen verdwijnen wanneer een andere browser of een incognitovenster gebruikt wordt. Opslaan in de database zou dit oplossen. Ten slotte is de gratis ngrok-tunnel publiek toegankelijk voor iedereen die het adres kent, al wordt de schade beperkt door de API-sleutel.
Het doel van dit project was een volledig functionele Web HMI te bouwen waarmee de Siemens S7-1215C PLC van Vincent Smetsers vanop afstand bediend kan worden. Dit doel is bereikt. De website laat toe om via een beveiligde tunnel de machine op te starten, te stoppen en manueel te bedienen. De verbinding werkt wereldwijd via ngrok. Het rolsysteem zorgt ervoor dat niet iedereen dezelfde rechten heeft. De takenplanner automatiseert complexe sorteercyclussen zonder dat de operator de stappen manueel hoeft te herhalen. De elektrische slede kan precies naar drie posities gestuurd worden, of manueel gejogd worden. Statistieken zoals het aantal gesorteerde lagers en de cyclustijd worden live weergegeven.
3.6.2 UitbreidingsmogelijkhedenEr zijn verschillende manieren om het systeem verder uit te breiden. De API-sleutel kan worden verplaatst naar een serverproxy zodat hij nooit in de browser verschijnt. De takenreeksen kunnen worden opgeslagen in de database in plaats van in de lokale opslag van de browser, zodat ze beschikbaar zijn op elk apparaat. Een alarmenlogboek in de database zou toelaten om storing-historiek bij te houden. Ook kan de elektrische slede uitgebreid worden naar meer dan drie posities door het volledige bereik van de zes IN-bits te gebruiken (tot 63 posities). Tenslotte kan een live grafiek worden toegevoegd aan de statistiekenpagina om de cyclustijd of het productievolume over tijd te visualiseren.
Voor Limburg STEM’t af moesten we dit jaar een slim speel toestel maken. Na een aantal pogingen om een partner te vinden die ons kon helpen bij dit project hadden we er geen gevonden. Zonder partner was het moeilijk om echt een – tussen aanhalingstekens – een slim speeltoestel te maken. Daarom waren we begonnen met een reactie spel, als inleiding voor dit project.
4.1.2 Inleiding led strip spelNa een tijdje begon de tijd erg te drukken dus moesten we snel iets doen. Meneer Meyers bestelde hiervoor een aantal led strips van ca. vijf meter. Met deze led strips mochten we wat experimenteren. Ikzelf heb hiermee een soort tower defence game van gemaakt. Dit concept bestond al langer, hiermee ben ik aan de slag gegaan.
Sluit een grove shield aan op de arduino UNO. Sluit ook je usb-b aan op je arduino en sluit usb-a aan je laptop. Nadat je dit hebt gedaan sluit je je jumper kabels op D2, D4 en D6. De jumper kabels sluit je als volgt aan de arcade knoppen aan: je hebt 4 kleuren, geel en zwart moeten aan de knop, rood en wit aan de led. Sluit D2 aan op de rode knop, D4 op de blauwe en D6 op de gele knop.
Let op: als je geen weerstanden gebruikt, zorg dan zeker dat je in je code een INPUT_PULLUP toevoegt zodat je geen kortsluiting creëert.
4.2.3 Aansluiten van de led stripDe Led strip heeft twee bruikbare kanten, je moet hem maar langs één kant aansluiten. Er zijn vijf verschillende draden: rood en wit voor de externe voeding (wit aan de min, rood aan de plus). De andere drie draden — wit, groen en rood — sluit je aan de arduino. De witte aan de GND en de groene aan pin 8. De rode hoeven wij niet te gebruiken.
Een tower defence, of letterlijk vertaald een toren verdediging, is een spel waarbij je tegenstanders die langs één kant komen probeert te verwijderen. Dit kan je doen op verschillende manieren. Ik heb gekozen om ze een kleurcode te geven, waarbij je een gele, blauwe en rode tegenstander hebt. Om ze te verwijderen moet je een kogel vuren langs te andere kant die dezelfde kleur heeft als de tegenstander – in volgorde. Stel er komt een blauwe, een rode en nog een blauwe druk je blauw, rood, blauw waarmee een kleur schiet over de led strip waarbij de tegenstander verwijderd zal worden.
4.3.2 Hoe heb ik dit gedaan?Ik ben tewerk gegaan met de led strip die meneer Meyers voor ons kocht. De led stip komt met een externe voeding, het is belangrijk dat je deze aansluit, zodat je de arduino niet belast. Ik ben dan begonnen met het maken van testjes, zoals gewoon een wave van licht te sturen door de led strip. Ik had al een paar test versies, maar ik ben begin mei opnieuw begonnen met het maken van een single tower defence spel. Dit heb ik daarna verwerkt tot een meer kleuren spel.
4.3.3 Het officiële spelDe led strip stelt het speelveld voor. De shooter staat altijd op positie tien. De vijanden verschijnen aan het einde van de led strip (positie 299) en bewegen stap voor stap richting de shooter. Elke vijand heeft een kleur: geel, blauw of rood. De speler moet de knop van de overeenkomstige kleur indrukken om een vijand te verwijderen. Schiet je met de verkeerde kleur, dan flitst de vijand wit maar blijft hij leven. Als een vijand de spelerspositie bereikt verlies je een leven. Je begint altijd met drie levens. Het spel wordt steeds moeilijker elke ronde (wave).
Het spel maakt ook gebruik van een scorebord dat op het beeldscherm van je computer wordt getoond. Het scorebord geeft ook je levens weer, de hoogst behaalde score en het aantal kogels dat je kan vuren per kleurgroep. Het scorebord is gemaakt met Python en maakt gebruik van tkinter. Activeer het met het commando:
python score.py COM3
Let op: COM3 staat voor de usb poort waar de arduino op aangesloten is. Het kan zijn dat dit een ander getal is, zoals COM8.
De topscores worden opgeslagen in een json bestand.
led_game_color/
├── highscores.json
├── led_game_color.ino
└── score.py
Om het spel uit te breiden kunnen er nog altijd meer en meer waves toegevoegd worden. Het toevoegen van meer knoppen of interactiviteit tussen meerdere mensen zijn ook mogelijke uitbreidingen. Denk ook aan extra vijandtypes of power-ups die de speler kan verzamelen.
Hieronder vind je nodige info over bepaalde attributen die ik gebruikte voor mijn GIP.