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)
- Pin headers
- Soldeerbout
- Soldeertin (met flux)
- Soldeerspons
Als je wilt behuizing wilt maken (aanraders):
- Houten platen
- Lasercutter
- Houtlijm
- Schuurpapier
- Schroeven
Circuit Opzetten
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". Deze kon ik niet doen vanwege de eerder benoemde redenen. Maar ik kan wel uitleggen hoe ik het gedaan zou hebben. Deze designs niet zijn getest en uitgewerkt, dus er is veel ruimte voor verbetering en fouten.
Downloads
Solderen
Solderen is iets anders waar ik weinig ervaring in heb en ik vind het jammer dat ik niet de kans kreeg om het te gebruiken. Dus een groot gedeelte wat ik hier uitleg is alleen theorie en niet een concrete planning.
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) of met soldeertin een pad maken waar de elektriciteit doorheen zal gaan.
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 kortsluiten kunnen veroorzaken.
Plan Solderen
Sommige componenten kunnen direct aan elkaar verbonden worden zoals de LED's en de resistors. De LED's wilde ik namelijk los van het boord houden zodat ik ze makkelijker kon positioneren in de behuizing, ik ging de pinheaders gebruiken om de LED's met wat draad toch nog te verbinden met het boord zonder dat de LED's erop vast waren gesoldeerd. Pinheaders zijn ook wat makkelijker voor mij omdat je de draden altijd makkelijk kan loshalen en ik ze niet hoef te knippen.
Het boord moet verbonden zijn met de Arduino en dat wilde ik ook via pinheaders doen. Dus een pinheader op het boord solderen en die verbinden met draad vanuit de Arduino.
De knoppen wilde ik wel direct op het boord gesoldeerd worden. Net zoals op het breadboard wil ik ze parallel hebben met elkaar met alleen wat meer ruimte tussen de twee. Wanneer je de resisters op de juiste plek heb neergezet bij de knoppen draai je het boord om om te solderen en connecties te maken. De draden die vanuit de knoppen naar de Arduino gaan moeten wel met pinheaders worden gesoldeerd.
Behuizing
De behuizing is nog niet zo duidelijk voor mij. Ik had toevallig een aardig goed formaat, houten doosje wat ik kon gebruiken van ongeveer 18 cm x 9,5 cm.
Wat vooral belangrijk is is dat je de Arduino kwijt kan binnen de behuizing en deze nog steeds kan verbinden met een batterij of een laptop vanuit de behuizing. Ik heb geen batterij om aan te sluiten dus wilde ik de Arduino verbinden met mijn laptop. Dit betekent dat ik een gat in de behuizing moet snijden waar de verbindingskabel doorheen kan.
Ik wilde persoonlijk voor iets gaan dat je makkelijk kan vasthouden en meenemen. De knoppen en LED's zouden buiten de behuizing moeten zijn om het spel te kunnen spelen. Dit kan door het boord waar de knoppen op gesoldeerd zitten bovenop de behuizing te plaatsen, waardoor je de bedrading wel blootstelt. Je kunt ook gaten maken voor de knopjes en LED's en het boord met de bedrading zo plaatsen dat de knoppen en LED's deze gaten door kunnen.
Zoals je ziet is er nog veel speelruimte met de behuizing.
Conclusie
Ook al ben ik niet aan alles toegekomen heb ik nog steeds veel geleerd en toch nog iets kunnen maken wat werkt. Ik denk echter niet dat dit iets voor mij is, maar ik stel deze kennis en ervaring nog steeds erg op prijs.
Daarbij wil ik ook nog zeggen dat ik nog steeds aan het wachten ben op de spullen die ik had besteld en ik die misschien in de toekomst nog zal gebruiken.