Introduction: Whack a Mole Voor Beginners

Welkom bij mijn instructables pagina voor mijn project 'Whack A Mole voor beginners''. Dit is een simpel spel dat je reactievermogen op de proef stelt. Klik op tijd op de knop waarbij een lampje brandt, hierna zal een andere lamp aangaan. Doe je dit niet op tijd, dan verlies je. Hoe lang kan jij het volhouden?


Ik kwam op dit idee toen ik in de intertoys een kleine versie van whack a mole vond die ik vroeger had en erg leuk vond destijds. Ik besefte mij dat het wel te doen moest zijn om dit als arduino-werk te maken en vanaf dat punt ben ik aan de slag gegaan.

Supplies

Dit is de volledige lijst met materialen die ik heb gebruikt:

De arduino onderdelen:

  • ARDUINO UNO
  • • https://www.bitsandparts.nl/product/FUNDUINO_ARDUINO_UNO_R3
  • 3 X Push button | 12x12x7,3mm
  • https://elektronicavoorjou.nl/product/push-button-12x12x7/
  • Prototyping Board 6x8cm - Dubbelzijdig
  • https://elektronicavoorjou.nl/product/prototyping-board-6x8cm-dubbelzijdig/
  • 3 X 10K ohm weerstand
  • https://elektronicavoorjou.nl/product/10k-ohm-weerstand/
  • 3 X 330 ohm weerstand
  • https://elektronicavoorjou.nl/product/330-ohm-weerstand/
  • 3 X condensator 220UF 16V
  • https://elektronicavoorjou.nl/product/condensator-220uf-16v/
  • 5 MM LED blauw
  • https://elektronicavoorjou.nl/product/5mm-led-blauw/
  • 16 kabels (waarvan 3 in het wit, 6 oranje, 4 geel, 1 blauw, 1 rood, 1 groen)

Overigen:

  • Soldeerkit
  • Hout
  • houtlijm
  • Lasersnijder
  • Siliconekit

Step 1: Eerst Oefenen

Voordat ik aan de slag ging met mijn eigen werk te maken, besloot ik om eerst een simpel reactiespel te maken die ik vond op het internet, om meer gewend te raken aan het coderen en de bedrading. Ik heb dit project gemaakt: https://www.instructables.com/Arduino-Reaction-Timer/

Dit was een goede basis om vanuit te werken, het functioneerde als een Whack A Mole spel, maar dan met 1 knop. De code heb ik ook als startpunt gebruikt voor mijn project.


(Dit soort digitale layouts heb ik gemaakt in het programma Fritzing)

Step 2: Uitbreiden

Na het maken van het bovenstaande instructables project, ben ik het gaan uitbreiden naar mijn eigen werk. Ik heb met een schoolgenoot, Emily, ervoor gezeten om het in elkaar te zetten. Eerst hebben we de bedrading gedaan en daarna de code. Er moest veel van de code veranderd worden, eigenlijk de enige twee dingen uit het originele project die ik heb gehouden, is het gebruik van while loops. Deze functioneren als een soort van controlepunten, die de code pas door laten gaan tot aan een bepaalde voorwaarde voldaan werd. Ook heb ik het flitsende lampje in het begin die de speler te laat weten dat het spel klaar is om te beginnen gehouden.

Ik heb met Emily samen de code gemaakt om een willekeurige lamp aan te laten gaan en de juiste bijbehorende knop te activeren. Ik heb ook nog samen met Aiden, een andere schoolgenoot de timercode gemaakt, die zorgt dat je het spel ook kan verliezen.


Het verliep helaas niet helemaal vlekkeloos. Het grootste probleempunt was dat sommige lampen af en toe niet aan wilde gaan. Na uitgebreid te testen waardoor het kwam, zijn wij tot de conclusie gekomen dat het (hopelijk) aan de bedrading ligt en dat dat opgelost zou worden wanneer ik zou gaan solderen.

Step 3: De Code

Hier is de gebruikte code, inclusief uitleg wat het doet:



int CurrentPin = 0;

bool IsPlaying = false;

int timer = 60;
int timeleft = 0;
//Dit zorgt dat alle inputs bruikbaar zijn
void setup() {
 pinMode (4, OUTPUT);
 pinMode (5, OUTPUT);
 pinMode (6, OUTPUT);
 pinMode (8, INPUT);
 pinMode (9, INPUT);
 pinMode (10, INPUT);
 Serial.begin(9600);
}

void loop() {
 //Zet Alle LEDS uit
 digitalWrite (4, LOW);
 digitalWrite (5, LOW);
 digitalWrite (6, LOW);

 //Dit laat de speler weten dat het spel klaar is om te spelen, door een lampje laten flitsen tot je op de knop drukt
 while (digitalRead (8) == LOW){
  digitalWrite (4, HIGH);
  delay (50);
  digitalWrite (4, LOW);
  delay (50);
  Serial.println ("Ready to play");
   //(alle serial print lines zijn niet nodig om te functioneren,
  //maar zijn handig om te kijken waar je code vastloopt, mocht je nog problemen krijgen)
 }

 //Hier begint het werkelijke spel
 while (digitalRead (8) == HIGH) { 
   IsPlaying = true;

   Serial.println(IsPlaying);

 //Dit zet alle lampen uit
   digitalWrite (4, LOW);
 digitalWrite (5, LOW);
 digitalWrite (6, LOW);
Serial.println ("Game started");
  }
 //Dit geeft een delay aan het lampje die aan wordt gezet. Als je het spel moeilijker wilt maken, dan verklein je de delay.
 while (IsPlaying == true){

 delay (random (1000, 1500));

 //Dit roept een willekeurige lamp op
 CurrentPin = random (4,7);
 Serial.println (CurrentPin);
 
 //Hier wordt die willekeurige lamp aangezet
 digitalWrite (CurrentPin, HIGH);
 Serial.println ("Lamp brandt");
 Serial.println (CurrentPin);
 
 //Hier leest het spel of de knop wordt ingedrukt & telt ondertussen af.
 while (digitalRead (CurrentPin + 4) == LOW && timer > 0) {
  
  Serial.println("Waiting for input");
  Serial.println(timer);
  timer--;
  
 }


 //Dit reset de timer
 Serial.println ("ja je bent hier");
 timeleft = timer;
 timer = 60;
 //Dit zet de lampen weer uit
 digitalWrite (4, LOW);
 digitalWrite (5, LOW);
 digitalWrite (6, LOW);
 //Indien de knop op tijd is ingedrukt, wordt de code weer opnieuw gelezen

 //Als de juiste knop niet op tijd is ingedrukt, dan houdt het spel op en moet je weer opnieuw beginnen
 if (timeleft < 1) {
  IsPlaying = false;

 //Dit laat de lampen flitsen om de speler te laten weten dat ze hebben verloren
  digitalWrite (4, HIGH);
  digitalWrite (5, HIGH);
  digitalWrite (6, HIGH);
  delay (500);
  digitalWrite (4, LOW);
  digitalWrite (5, LOW);
  digitalWrite (6, LOW);
  delay (500);
  digitalWrite (4, HIGH);
  digitalWrite (5, HIGH);
  digitalWrite (6, HIGH);
  delay (500);
  digitalWrite (4, LOW);
  digitalWrite (5, LOW);
  digitalWrite (6, LOW);
  delay (500);
  digitalWrite (4, HIGH);
  digitalWrite (5, HIGH);
  digitalWrite (6, HIGH);
  delay (500);
  digitalWrite (4, LOW);
  digitalWrite (5, LOW);
  digitalWrite (6, LOW);
  
 }
 }

}

Step 4: Solderen

Hier te zien is hoe ik het gesoldeerd heb. Op de layout foto is het linkerbord de bovenkant en het rechterbord de onderkant. De lampen zijn zichtbaar aan de rechterkant, om te helpen met oriënteren waar alles moet als het omgedraaid is. Alle grijze kabels moeten soldeertin voorstellen. Het is een beetje een chaos, maar hopelijk kom je er uit!

Step 5: Behuizing

Met het programma Makercase Heb ik deze behuizing ontworpen en vervolgens laten lasersnijden. Wat in deze behuizing NIET zit, zijn gaten voor de lampen, knoppen en de USB-kabel, die heb ik na het snijden met een bijtel eruit moeten hakken, omdat ik vergeten was die te laseren. De gaten voor de lampen en knoppen zitten aan de bovenkant en het gat voor de USB-kabel zit aan de zijkant. Wees niet zoals ik en zorg dat je in je ontwerp al de gaten hebt staan. Meet ze af op je gesoldeerde werk en voeg ze toe aan je behuizingontwerp.

Step 6: In Elkaar Zetten

De laatste stap is het in elkaar zetten van je prachtige werk. Begin met het vastlijmen van de bodem aan de twee korte zijkanten en één lange zijkant, zoals op de foto. De laatste zijde laten we nog open, om binnen de doos te kunnen. (Ik heb op dit punt de bovenkant nog voorzien van een laag verf, maar dat is zeker niet verplicht) Terwijl dat droogt, kan je aan de bovenkant van je gesoldeerde werk, de kant met de knoppen en lampen dus, een laag siliconekit toevoegen. Deze plak je vervolgens aan de bovenkant van je behuizing. Als die eraan zit, voeg ook nog een laag aan de buitenrand van je prototype bord toe, tussen het hout en de plaat in. Wanneer dat gedroogd is, kan je je kabels verbinden aan de arduino zoals in stap 4 wordt laten zien en kan je vervolgens de bovenkant aan de rest van de behuizing plakken. De zijkant die niet geplakt is, kan je nu in je behuizing zetten. Deze zou zonder de lijm ook goed op zijn plek moeten blijven, zolang je het niet te wild beweegt en je kan het er weer af halen om bij de binnenkant te komen.

Step 7: Klaar Om Te Spelen!

Nu je klaar bent is het tijd om je prachtige creatie te gaan gebruiken. Verbind je ARDUINO met je computer, upload de code en spelen maar!

Step 8: Reflectie

Dit was echt een hel van mijn eigen makelij zeg. Zoals je al hebt gelezen, ben ik een hoop dingen vergeten te doen, waardoor het alleen maar moeilijker was voor mijzelf. Ik ben wel tevreden met mijn eindwerk, al weet ik niet of ik ooit nog in mijn leven een ARDUINO wil aanraken. Het uitvogelen van het coderen was mijn favoriete deel, als je eenmaal doorhebt wat alles doet, dan is je code werkende krijgen net als het oplossen van een soort puzzel. De bedrading en het solderen is een stuk minder mijn ding. Het maken van de behuizing zou leuk zijn geweest, als ik mijzelf niet constant belemmerde. Ik heb geleerd om eerst goed na te denken voordat ik een stap maak, in plaats van gelijk op volle toeren aan de slag gaan. Slow but steady wins the race. Een ander ding dat ik heb geleerd is meer tijd voor dit soort zaken te nemen, vooral als je met andere mensen samenwerkt. Want er is altijd wel iets dat foutloopt, iemand is te laat, er is een miscommunicatie, er komt iets tussen waardoor het verplaatst moet worden etc. Ik zal voortaan zorgen dat ik daar meer rekening mee houd, door meer tijd in te plannen