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.
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:
- Houten doos (9.5cm x 18.5cm)
- Boor apparaat
- All-purpose lijm (maar houtlijm werkt hier waarschijnlijk beter)
- Ductape
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.
Downloads
Solderen

Solderen is iets anders waar ik weinig ervaring in heb. Tijdens het solderen braken vaak mijn jumper wires wat ervoor zorgde dat niet alles er even netjes uitziet.
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 gebruikte 2 pcb plaatjes waar ik ieder een knop en een licht op had geplaatst. 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. Ik raad aan om de knoppen en LED's aan een kant van de plaatjes te houden en de rest aan de andere kant (weerstanden, connecties, jumper wires, etc.) dit zal je enorm helpen tijdens het behuizen.
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.
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 had toevallig een houten doosje liggen waar niks meer mee gedaan werd en het was precies de grootte voor een goede kandidaat voor de behuizing. Dus ik ging aan de slag met het uitmeten waar de knopjes, LED's en Arduino zouden moesten komen.
Nadat de metingen waren gedaan begon ik met de gaten boren. Omdat ik alle componenten aan dezelfde kant had gesoldeerd bleef er nog veel ruimte over tussen het plaatje en de bovenkant waar het plaatje aan vast moest komen. Dit maakte het vastlijmen van het plaatje een stuk lastiger. Uiteindelijk had ik naast de lijm ductape gebruikt om de plaatjes in hun plaats te houden, een over ieder plaatje heen en dan 2 aan de zijkanten voor extra ondersteuning. Het is ook erg belangrijk om de plaatjes goed te ondersteunen, ze zullen namelijk tijdens gebruik veel druk krijgen. Tot nu toe is de ductape en lijm combo voldoende, maar als je betere oplossingen weet te vinden moet je die zeker gebruiken.
Conclusie
Ook al was ik niet behendig met knutselen/solderen en ligt mijn passie hier ook niet had ik toch nog veel kennis opgedaan. Ik had niet veel plezier tijdens het maken van dit project, dingen braken, gingen mis, maar toen alles werkte op het einde voelde ik me wel heel erg goed.