Introduction: Virtual Rope
Dit is een arcade box
waarmee je virtueel kan touwtje trekken met een tegenstander.
2 spelers zijn nodig.
Als jouw linker lamp brandt dan moet je de linker knop drukken en hetzelfde geld voor rechts. Als je de verkeerde knop indrukt krijg je strafpunten.
Het lampje gaat langzaam naar jou toe, en als je strafpunten krijgt gaat het lampje naar de tegenstander. Wanneer je het lampje aan jou kant krijgt heb je gewonnen.
Supplies
- 4 x arcade style knoppen nodig met een radius van 15mm
- 15 x ledverlichting (gekleurd optioneel)
- 1x arduino mega
- 2x breadboard
- 1x power switch
- 1x 9volt batterijen
- 1x Houten doos/ alternatieve behuizing
- 1x hete lijm pistool/secondelijm
- 3D printer (optioneel)
Step 1: Behuizing
In deze stap moeten we een behuizing maken.
De doos die ik heb ontworpen is 300mm x 200 mm en 150mm hoog.
De gaten zijn 25mm van de rand verwijderd en 40mm van de top maar de knoppen kan je zelf plaatsen op gevoel.
De bovenkant is als een deksel, zo kan je altijd makkelijk dingen aanpassen vanbinnen.
Als je geen speedboor hebt van 30mm kan je kleinere gaten boren in een cirkel en het achteraf rond schuren of vijlen.
Ook moeten er gaten aan de bovenkant komen voor de lampen, deze zijn bij mij 50 mm van de rand in lengte en om de 20mm een gat geboord met een diameter van 5mm.
Vervolgens moeten er nog 4 gaten geboord worden voor de spelers, een in de buurt van elke knop. Het plaatsen hiervan kan je ook op gevoel doen, die van mij zitten 40mm van de rand in lengte en 35mm van de rand in breedte.
Step 2: Verf
Het is het best als je de doos een kleurtje geeft voor wat
persoonlijkheid. Dit Hoeft natuurlijk niet als je van RAW UNADULTERATED WOOD houdt.
Zelf hou ik van een beetje houdt textuur met een kleur dus ik leg maar een laag aan zodat je het houdt nog kan zien.
(Vergeet niet de gaten af te tapen)
Step 3: Onderdelen
Maak een batterij houder voor je 9volt batterij, deze kan je
zelf ontwerpen of voorgemaakte modellen vinden op thingiverse.com.
Ook is het handig om een houder te hebben voor je arduino Mega als deze niet meegeleverd werd
Als je geen 3D printer hebt kan je ook 9Volt houders kopen voor ongeveer €1 per stuk.
De arduino is ook vast te schroeven maar dit wordt niet aangeraden.
Step 4: In Elkaar Zetten
Als de verf droog is kan je je led lampen in de behuizing zetten samen met je 2 breadboards.
ik heb mijn lampen in een groen naar rood effect met blauw in het midden en bij de randen voor de lijn, en 4 witte lampen voor de spelers. met een klein beetje 1 seconde lijm zitten deze stevig vast.
een breadboard wordt op de deksel geplakt en de ander op de bodem naast de arduino. dit zorgd ervoor dat de kabels vast blijven zitten als je de deksel open en dicht maakt.
Step 5: Knoppen
tijdens het maken van de doos ben ik vergeten een gat te maken voor de aan en uit knop. Deze kan je in de behuizing stoppen of je kan nog een klein onderdeel printen en deze vast lijmen.
Druk de knoppen in het gat en soldeer alles vast volgens het schema. Ik heb de pinns van de led lampjes uit elkaar gebogen om het makkelijker te maken deze vast te solderen.
Als lles gesoldeerd is kan je de batterij houder en de aan en uit knop vast lijmen met wat hetelijm of 1seconden.
Step 6: Arduino Code
Nu hoef je alleen nog je arduino bij te werken met je computer code.
hier kan je de code vinden. Zet de arduino IDE op Arduino/Genuino mega/Omega en check of de juiste ComPort geselecteerd is.
const int button_1 = 12; //controlls for player 1
const int button_2 = 11; const int button_21 = 3; //controlls for player 2 const int button_22 = 2; const int light_1 = 6; //lights for player 1 const int light_2 = 5; const int light_21 = 9; //lights for player 1 const int light_22 = 8; const int l1 = 32; // array of lights const int l2 = 34; const int l3 = 36; const int l4 = 38; const int l5 = 40; const int l6 = 42; const int l7 = 44; const int l8 = 46; const int l9 = 48; const int l10 = 50; const int l11 = 52;// integers int button1; //player 1 controlls int button2; int button21;//player 2 controlls int button22; //button statet is for anti-spam int buttonState; //checks if button is released for player 1 int buttonState2; //checks if button is released for player 2 //light randomizer int light; //randomizer for player 1 lights int light2; // randomizer for player 2 lights
int rope; //pozition of the rope int power; // player 1 combo multiply int power2; // player 2 combo multiply int multiplyLimit; //combo limit int game; //checks for start of game and game over. // game == 0 game hasnt started // game == 1 game has started // game == 2 player 1 wins // game == 3 player 2 wins // game == 4 start animation
void setup() { // all inputs pinMode(button_1,INPUT); pinMode(button_2,INPUT); pinMode(button_21,INPUT); pinMode(button_22,INPUT); // all outputs pinMode(light_1,OUTPUT); pinMode(light_2,OUTPUT); pinMode(light_21,OUTPUT); pinMode(light_22,OUTPUT); pinMode(l1, OUTPUT); pinMode(l2, OUTPUT); pinMode(l3, OUTPUT); pinMode(l4, OUTPUT); pinMode(l5, OUTPUT); pinMode(l6, OUTPUT); pinMode(l7, OUTPUT); pinMode(l8, OUTPUT); pinMode(l9, OUTPUT); pinMode(l10, OUTPUT); pinMode(l11, OUTPUT); Serial.begin(9600); light = random(1,3); // sets light at random for player 1 light2 = random(1,3); // sets light at random for player 2 rope = 50; // sets the rope in the middle multiplyLimit = 5; // combo limit game = 0; // game hasnt started yet, see above. }
void loop() { //game hasnt started yet
if (game == 0) { button1 = digitalRead(button_1); // reads if button is pressed for player 1 & 2 button2 = digitalRead(button_2); button21 = digitalRead(button_21); button22 = digitalRead(button_22); //blinks lights digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); delay(500); digitalWrite (l1,HIGH); digitalWrite (l2,HIGH); digitalWrite (l3,HIGH); digitalWrite (l4,HIGH); digitalWrite (l5,HIGH); digitalWrite (l6,HIGH); digitalWrite (l7,HIGH); digitalWrite (l8,HIGH); digitalWrite (l9,HIGH); digitalWrite (l10,HIGH); digitalWrite (l11,HIGH); delay(500);
// starts game if (button1 == 1 && button2 == 1 && button21 == 1 && button22 == 1) { rope = 50; game = 4; }
}
//game intro animation else if (game == 4) { button1 = digitalRead(button_1); button2 = digitalRead(button_2); button21 = digitalRead(button_21); button22 = digitalRead(button_22); digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); delay(100); digitalWrite (l1,HIGH); digitalWrite (l11,HIGH); delay(300); digitalWrite (l2,HIGH); digitalWrite (l10,HIGH); delay(300); digitalWrite (l3,HIGH); digitalWrite (l9,HIGH); delay(300); digitalWrite (l4,HIGH); digitalWrite (l8,HIGH); delay(300); digitalWrite (l5,HIGH); digitalWrite (l7,HIGH); delay(300); digitalWrite (l6,HIGH); digitalWrite (l6,HIGH);
game = 1; }
// game has begon
else if (game == 1) { button1 = digitalRead(button_1); button2 = digitalRead(button_2); button21 = digitalRead(button_21); button22 = digitalRead(button_22);
//player one lights if (light == 1) { digitalWrite(light_1, HIGH); digitalWrite(light_2, LOW); } else if (light == 2) { digitalWrite(light_2, HIGH); digitalWrite(light_1, LOW); }
//player two lights if (light2 == 1) { digitalWrite(light_21, HIGH); digitalWrite(light_22, LOW); } else if (light2 == 2) { digitalWrite(light_22, HIGH); digitalWrite(light_21, LOW); }
// player one buttons if (light == 1 && button1 == 1 && buttonState == 0 || light == 2 && button2 == 1 && buttonState == 0 ){ digitalWrite(light_1,LOW); digitalWrite(light_2,LOW); rope = rope + power; if (power < multiplyLimit){ power = power + 1; } delay(5); light = random(1,3); buttonState = 1; } else if (light == 1 && button2 == 1 && buttonState == 0 || light == 2 && button1 == 1 && buttonState == 0){ digitalWrite(light_1,LOW); digitalWrite(light_2,LOW); rope = rope - 1; power = 1; delay(5); light = random(1,3); buttonState = 1; }
if (button1 == 0 && button2 == 0) { buttonState = 0; }
//Player two buttons if (light2 == 1 && button21 == 1 && buttonState2 == 0 || light2 == 2 && button22 == 1 && buttonState2 == 0 ){ digitalWrite(light_21,LOW); digitalWrite(light_22,LOW); rope = rope - power2; if (power2 < multiplyLimit){ power2 = power2 + 1; } delay(5); light2 = random(1,3); buttonState2 = 1; } else if (light2 == 1 && button22 == 1 && buttonState2 == 0 || light2 == 2 && button21 == 1 && buttonState2 == 0){ digitalWrite(light_21,LOW); digitalWrite(light_22,LOW); rope = rope + 1; power2 = 1; delay(5); light2 = random(1,3); buttonState2 = 1; }
if (button21 == 0 && button22 == 0) { buttonState2 = 0; }
// rope code if (rope >= 0 && rope < 10){ digitalWrite (l1,HIGH); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 10 && rope < 20){ digitalWrite (l1,LOW); digitalWrite (l2,HIGH); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 20 && rope < 30){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,HIGH); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 30 && rope < 40){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,HIGH); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 40 && rope <50){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,HIGH); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 50 && rope <60){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,HIGH); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 60 && rope <70){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,HIGH); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 60 && rope <80){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,HIGH); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 80 && rope <90){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,HIGH); digitalWrite (l10,LOW); digitalWrite (l11,LOW); } if (rope >= 90 && rope <100){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,HIGH); digitalWrite (l11,LOW); } if (rope >= 100 && rope <110){ digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,HIGH); } if (rope <= 0) { game = 2; } // player 1 wins if (rope >= 109){ game = 3; } // player 2 wins }
//game over
else if(game == 2) { button1 = digitalRead(button_1); button2 = digitalRead(button_2); button21 = digitalRead(button_21); button22 = digitalRead(button_22); digitalWrite (light_1,LOW); digitalWrite (light_2,LOW); digitalWrite (light_21,LOW); digitalWrite (light_22,LOW); digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); delay(100); digitalWrite (l5,HIGH); delay(100); digitalWrite (l4,HIGH); delay(100); digitalWrite (l3,HIGH); delay(100); digitalWrite (l2,HIGH); delay(100); digitalWrite (l1,HIGH); delay(100); game = 0; }
else if (game == 3) { button1 = digitalRead(button_1); button2 = digitalRead(button_2); button21 = digitalRead(button_21); button22 = digitalRead(button_22); digitalWrite (light_1,LOW); digitalWrite (light_2,LOW); digitalWrite (light_21,LOW); digitalWrite (light_22,LOW); digitalWrite (l1,LOW); digitalWrite (l2,LOW); digitalWrite (l3,LOW); digitalWrite (l4,LOW); digitalWrite (l5,LOW); digitalWrite (l6,LOW); digitalWrite (l7,LOW); digitalWrite (l8,LOW); digitalWrite (l9,LOW); digitalWrite (l10,LOW); digitalWrite (l11,LOW); delay(100); digitalWrite (l7,HIGH); delay(100); digitalWrite (l8,HIGH); delay(100); digitalWrite (l9,HIGH); delay(100); digitalWrite (l10,HIGH); delay(100); digitalWrite (l11,HIGH); delay(100); game = 0; }
}
Step 7: Behold the Glory
Als je alle stappen heb gevolgd heb je nu een speldoos voor virtueel touwtje trekken.
Ik hoop dat je er veel plezier mee hebt