Simpele 2 Speler "button-masher"




Ontwerpdoel
Dit project had als doel om mijzelf bekend te maken met Arduino en te kijken of het iets voor mij was. Ik wilde het dus simpel en overzichtelijk houden. Ik was ook van plan om te gaan solderen, maar omdat de spullen die ik nodig had om dat te kunnen doen niet binnen waren gekomen moest ik dat weglaten.
Iteraties
Ik wilde eerst een licht puzzel maken waar het doel was om alle LED's aan te krijgen door op knoppen te drukken. Sommige knoppen zouden dezelfde LED's beïnvloeden en ervoor zorgen dat ze aan/uit gaan. Het klonk simpel genoeg maar ik kwam erachter dat ik niet de ervaring had om dit te maken. Dus nam ik een stap terug en kwam ik op een spel waar je zo snel mogelijk de knop moet indrukken om de LED's aan te zetten.
Dit kon ik wel maken, maar toen was het probleem dat het geen spelelement meer had - wat ik er wel in wilde hebben. Dus begon ik met een timer toe te voegen, wat de code deed breken. Toen kwam ik op het idee om er een 2 speler button-masher van te maken. Dit veranderd het in iets competitief wat een goede manier is om een spelelement toe te voegen. Ik hoefde ook geen timer toe te voegen want de timer is je tegenstander.
Hierna volgden veel kleine iteraties (de afbeeldingen hierboven) in de vorm van onnodige draden weghalen en de code wat opschonen.
Supplies
Hier is een lijst met de componenten die ik heb gebruikt:
- Arduino Uno
- Arduino IDE
- 2 LED (verschillende kleur)
- 2 Buttons
- Jumper wires
- Breadboard
- 4 Resistors
Niet gebruikt door mij maar kan handing zijn:
- Button caps (zelfde kleuren als de LED's)
Als je wilt solderen:
- PCB (printplaatjes)
- Soldeerbout
- Soldeertin
- Soldeerspons
Als je wilt behuizing wilt maken (aanraders):
- Houten platen
- Lasercutter
- Houtlijm
- Schuurpapier
- Schroeven
Wat ik heb gebruikt voor behuizing:
- Karton
- Paperclips
- Schaar
Circuit Opzetten
.png)

Op de afbeelding hierboven kun je zien hoe ik de arduino heb opgezet, ik heb ook een schematische versie als pdf toegevoegd waar je ook naar kan kijken. Ik heb het iets anders neergezet door de bouw van mijn breadboard, maar het komt op hetzelfde neer. Als je vanuit de positieve (+) en de negatieve (-) rijen de juiste componenten aansluit, zou het moeten werken.
Downloads
Code Schrijven




Voor de code heb ik ook afbeeldingen toegevoegd, maar je kunt het ook simpelweg downloaden. In de gedownloade versie staat ook een beetje extra uitleg.
De code begint met het variabel "byte". Byte is een variabel dat een nummer van 0 tot 255 kan bewaren, maar wij gebruiken in dit script de waarde "LOW". Dit is mogelijk omdat de waardes HIGH en LOW hetzelfde zijn als True en False, ze worden dus gezien als 1 en 0 (HIGH = 0 en LOW = 1). We gebruiken dit om te voorkomen dat de speler de knop ingedrukt houdt om constant hun score te verhogen. Hierna definiëren we verschillende variabelen om makkelijk aanpassingen te kunnen maken aan het circuit zonder de code zelf veel aan te hoeven passen. De nummertjes zijn namelijk hetzelfde als de nummers van de pins in het Arduino boord.
Hierna vertellen we de pins of ze een input of een output zijn en zorgen we ervoor dat de LED's uit (LOW) staan op het begin.
Voor de loop zijn er 2 functies opgeroepen die checken wat iedere knop doet en tegelijkertijd de score veranderd.
Onder de functies zie je 2 if-statements die de score bijhouden, wanneer deze hoger zijn dan 20 zal een "win event" afspelen voor de speler die heeft gewonnen - wat in dit geval een knipperend LED is van de winnaar - en de score resetten. De score wordt gereset op het begin en het einde van de if-statement om zo te voorkomen dat de score tijdens de if-statement verandert en zodat het spel weer gespeeld kan worden.
De functies voor de twee knoppen zijn, op de benamingen na, hetzelfde. De functies moeten buiten de void loop() staan, ze worden alleen aangeroepen in de void loop().
Wat er eigenlijk gebeurd is dat we opslaan wat er gebeurt met de knop en op die informatie verder gaan om te checken of de score moet worden verhoogd. We checken of de knop veranderd is en pas als die veranderd is, checken we of het de verandering is die we willen. Wanneer de knop veranderd is op de juiste manier geven we een punt.
TLDR:
- Variabelen aanmaken.
- In void Setup() pins de rol "Input" of "output geven".
- In void loop() de 2 knoppen functies aanroepen en score bijhouden d.m.v. if-statements.
- 2 knoppen functies buiten de void loop() die voorkomen dat de knop ingedrukt houden de score verhoogd.
Downloads
Uittesten
Hier ga je de knoppen stresstesten/playtesten. Door beide knoppen snel in te drukken kunnen we zien of de score goed loopt en of de LED's het goed doen. Je kunt in de file hieronder mij de knoppen zien proberen te stresstesten, wat wat lastiger ging omdat ik aan het filmen was. Dit is ook het uiteindelijke resultaat van dit project en de laatste versie op dit moment.
Laatste Stappen
Hierna kwamen de stappen "behuizing" en "solderen". Dit zijn niet mijn sterkste punten dus als je het beter kan, doe dat vooral! Maar ik heb het tenminste werkende gekregen (voor een groot gedeelte).
Downloads
Solderen

Solderen is iets anders waar ik weinig ervaring in heb. Tijdens het solderen brak ik een van mijn knoppen dus moest ik improviseren en maar 1 knop solderen.
Techniek
Solderen is het samensmelten van componenten om connecties te maken en dat moeten we gebruiken om het circuit dat op het breadboard is gemaakt te repliceren.
Je houdt de soldeerbout tegen het boord en wat er op het boord zit (bijvoorbeeld een pinheader). Daarna smelt je de soldeertin erbij, het resultaat zou een soort vulkaan moeten zijn. Nu kun je hetgeen pakken wat je samen wilt solderen en met soldeertin het samen smelten.
Je kunt op verschillende manieren connecties leggen. Je kunt draden gebruiken (jump wires), met soldeertin een pad maken waar de elektriciteit doorheen zal gaan of - degene die ik gebruikte - de benen van de componenten gebruiken om elkaar te verbinden.
Om bedrading vast te solderen - dus niet in pinheaders te stoppen - moet je ze afknippen op de lengte die je wilt. Daarna moet je zachtjes knippen en trekken om zo het plastic, dat om de draden, zit weg te halen. Daarna kun je de uiteinden solderen. Let op dat je niet te veel van het plastic weghaalt, want als de blootgestelde draden andere verbindingen aanraken zou dat kortsluiting kunnen veroorzaken.
Solderen
Ik deed al mijn componenten op hetzelfde printplaatje zodat ik het overzichtelijk voor mezelf kon houden. Omdat ik een knop was kwijtgeraakt, door te hardhandig de benen te buigen, had ik wat meer ruimte om mee te spelen. Ik plaatste eerst al mijn componenten op het boord voordat ik ze ging solderen. Zoals ik al eerder had geschreven gebruikte ik vooral de benen van de componenten om de verbindingen te leggen.
Nadat ik het circuit had getest en zeker wist dat het allemaal werkte ronde ik het solderen af en ging ik verder met de behuizing.
Downloads
Behuizing

De behuizing hield ik erg simpel. Ik ben namelijk niet zo handig met knutselen en dat zie je zeker terug in mijn behuizing. Ik pakte een kartonnen doosje van ongeveer 6cm x 6cm x 17cm om de Arduino in te stoppen. Ik had een gat uitgeknipt voor de kabel naar de laptop aan de lange kant van het doosje maar na nader inzien was het misschien handiger geweest om dit gat aan een van de korte kanten te doen zodat de kabel geen bochten hoeft te maken naar de buitenkant.
Het printplaatje had ik op de bovenkant vastgemaakt met opengevouwen paperclips, de Arduino is op dezelfde manier vastgezet in de behuizing. De paperclips zijn door het karton geslagen om zo de 2 vast te zetten.
De bedrading heb ik ook een eigen ingang gegeven naar de Arduino via een klein gat zodat de bedrading lastig ergens aan kan vasthaken.
Een tip voor de behuizing is om de draden los te koppelen wanneer je aan de slag gaat. Ik had ze namelijk nog aan de Arduino vast en brak per ongeluk bijna een van de draden af.
Nadat ik had getest of het allemaal nog werkte raakte ik het niet meer aan in hoop dat het zou blijven werken.
Conclusie
Ook al was ik niet behendig met knutselen/solderen en ligt mijn passie hier ook niet had ik toch nog veel kennis opgedaan. Het is jammer dat ik niet op tijd een 2e knopje kon regelen om het hele ding te kunnen solderen maar het is technisch gezien een replica maken van wat op deze pagina is gesoldeerd.
De behuizing vind ik zelf ook nog iets waar ik op kan verbeteren wanneer ik weet hoe ik dat voor elkaar kan krijgen.