Introduction: Escape Room Game

Voor dit project heb ik vitrine gemaakt met puzzels voor het open maken van de deur bovenop. De vitrine is als spel element bedoel binnen een kamer met de sfeer van een museum beroving.

Aan de zijkanten van de box zitten verschillende puzzel elementen die opgelost moeten worden om de deur en de inhoud daarvan te openen.

Het concept is bedoeld als element binnen een grotere escape room, Er zitten verschillende soorten puzzels in. Deze puzzels rijken van een labyrint waar je de inhoud van moet krijgen tot een encryptie code die snel gevonden kan worden.

Het labyrint is 3D geprint en als de sloten die gebruikt worden om sommige platen vast te houden. De encryptie is met een lazersnijder gegrafeerd op MDF platen.

Supplies

Elektronische componenten

·      Arduino UNO                                                                     1x

·      USB 2.0 Cable type A/B                                                    1x

·      Keypad 4x4                                                                        1x

·      Relay                                                                                  1x

·      12V Power Adapter                                                           1x

·      Electromagnetic lock                                                          1x

·      Jumper Wires                                        Zo veel als nodig is

·      Ethernet cable                                                                    1x

·      YwRobot Breadboard 420 points Experiment PCB         1x

·      LCD I2C                                                                             2x

Materialen voor de behuizing

·      63x93x3mm MDF-plaat 1x

·      50x50x3mm MDF-plaat 1x

·      35x35x3 Acryl-plaat       6x

·      Schroeven                    Zo veel als nodig is

·      Houtlijm                        Zo veel als nodig is

·      Secondelijm                 Zo veel als nodig is

·      3D print Labyrint          1x

·      3D print slot                  2x

·      Cijferslot                       2x

Gereedschap

·      Soldeerbuit met soldeer

·      Kruiskopschroevendraaier

·      Lazersnijder

·      3D printer (Merk Ultimaker)

·      Striptang

·      lijmpistool

Step 1: Testen

Bij deze testen zag ik dat de joystick een leuk onderdeel was om mee te spelen maar niet veel functioneel zou zijn om een goede puzzel mee te maken. De keypad daarentegen zou juist heel goed gebruikt kunnen worden om data in te verwerken en inputs te gebruiken om verder te komen.

Wat ik overal geleerd heb van dit project is dat je op veel verschillende en best simpele wijzen puzzels kan bedenken die leuk zijn om op te lossen. De research hielp mij ook meer kijken naar het gebruik van het ontwerp en zorgen dat de samenhang daarvan goed op elkaar past.

Step 2: Het Bouwen

De behuizing van de vitrine is gemaakt van MDF platen, het overkoepelende gedeelte is gemaakt van plexiglas. In het onderste gedeelte zit het arduino gedeelte met de 3D geprinte elementen aan de buiten kant.

Ik begon te kijken met welke afmeting ik wilde hebben voor mijn vitrine, het moest niet al te klein zijn omdat het een volledig spel moest kunnen bevatten aan de binnen kant.

Daarom begon ik met de doos waar de onderdelen in zouden zitten. Ik had uit geschetst hoe groot ik het ongeveer wilde hebben. Maar om een beter beeld te krijgen pakten ik wat kartonnen dozen en ging op meten hoe groot ze zouden zijn voor een goed gevoel van de doos.

Nadat ik een goed ruimtelijk inzicht had over hoe ik de doos wilde hebben had ik platen uitgesneden van MDF en die in elkaar gezet zonder te lijmen. Dit in het geval ik nog aanpassingen wilde maken met elke individuele plaat.

Na de 30cm X 30cm doos aan de onderkant goed was heb ik hetzelfde proces gedaan met de overkoepeling. Maar omdat ik al een referentie had van de onderste doos ging dat een stuk sneller.

Het enige waar ik tegen aan liep was het goed vast zetten van de overkoepeling met de onderste doos. Hierop bedacht ik, als ik een kleinere doos maar en die boven op de doos zet zou het overkoepelende gedeelte niet meer kunnen schuiven.

Dit had ik gemaakt, het zal alleen wel iets kleiner moeten zijn want het moet de dikte van de overkoepelende kap wel mee berekenen. Daarna had ik dit vastgezet met spijkers. Er zat geen beweging meer in.

Alle platen heb ik gesneden met fingers zodat ze goed inelkaar zouden passen en dit dan later gelijmd. Ook voor het 3D labyrint heb ik een koker gepakt die ik over had en die bevestigd aan de binnen kant met lijm zodat de persoon die speelt niet aan de elektronica kan zitten die binnen zit.

Step 3: Bevestigen

Het bevestigen was niet extreem moeilijk, waar ik wel meer tegen aan liep was het werkende krijgen van meerdere LCD binnen 1 arduino. Ik heb verschillende LCD gekocht en getest, het zou of de hardware kunnen zijn maar ik kreeg maar 1 LCD aan de praat. Ik heb ook meerdere verschillende libraries gebruik im ze aan de praat te krijgen maar het wilde maar niet werken. Daarom heb ik in mijn schets een curcuit voor 2 LCD gemaakt. Toch wil ik het later wel aan de praat krijgen omdat het meer zal toevoegen binnen de escape room. Voor de stroom heb ik 2 verschillende stroombronnen voor het aansturen van de Arduino heb ik een 9V batterij en voor het magneetslot heb ik een 12V adapter gepakt die de stroom geeft.

In mijn schets is de arduino met jumperkabels en pinheaders verbonden met een gesoldeerd protoboard. De LCD en de relay zijn hier ook me verbonden, de keypad gaat direct in de arduino.

Step 4: Code

//Summery code

/*
  De code is niet extreem moeilijk maar krijg het voor elkaar. Het assigned eerst de pins van de relay en houd 8 pins over voor de rijen en kolommen.
  Ook worden er in het begin libraries ingeladen voor de keypad en het aansturen van de LCD.
  
*/

#include <Keypad.h>                 //Library voor de keypad
#include <LiquidCrystal_I2C.h>      //Library voor de LCD
const int RELAY_PIN  = A0;          // the Arduino pin, which connects to the IN pin of relay
const int ROW_NUM    = 4;           //four rows
const int COLUMN_NUM = 4;           //four columns

//assign the rows and collums
char keys[ROW_NUM][COLUMN_NUM] = {
  {'1','2','3', 'A'},
  {'4','5','6', 'B'},
  {'7','8','9', 'C'},
  {'*','0','#', 'D'}
};

//connect the rows and collums to the acording pins
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );//map the pins with the keypad rows and collums
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows

//different strings could be used for different passwords
const String password_1 = "1234ABC"; // change your password here
const String password_2 = "5642CD";  // change your password here
const String password_3 = "3548";   // change your password here
String input_password;

void setup(){
  Serial.begin(9600);
  input_password.reserve(32);    // maximum input characters is 33, change if needed
  pinMode(RELAY_PIN, OUTPUT);    // initialize pin as an output.
  digitalWrite(RELAY_PIN, HIGH); // lock the door
  lcd.init();                    // initialize the lcd
  lcd.backlight();
}

void loop(){
  char key = keypad.getKey();

  if (key){
    Serial.println(key);

    if(key == '*') {
      input_password = ""; // reset the input password
      lcd.clear();
    } else if(key == '#') {
      lcd.clear();
      if(input_password == password_1 || input_password == password_2 || input_password == password_3) {
        Serial.println("password is correct");
        lcd.setCursor(0, 0);
        lcd.print("CORRECT!");
        lcd.setCursor(0, 1);
        lcd.print("DOOR UNLOCKED!");

        digitalWrite(RELAY_PIN, LOW);  // unlock the door for 20 seconds
        delay(20000);
        digitalWrite(RELAY_PIN, HIGH); // lock the door
      } else {
        Serial.println("password is incorrect, try again");
        lcd.setCursor(0, 0);
        lcd.print("INCORRECT!");
        lcd.setCursor(0, 1);
        lcd.print("ACCESS DENIED!");
      }

      input_password = ""; // reset the input password
    } else {
      if(input_password.length() == 0) {
        lcd.clear();
      }

      input_password += key; // append new character to input password string
      lcd.setCursor(input_password.length(), 0); // move cursor to new position
      lcd.print('*');                 // print * key as hiden character
    }
  }
}

Step 5: Conclusie

Terug kijkende op dit project heb ik veel geleerd over het designen van een interactie instalatie. Het was zeer leuk om te doen maar soms ook frustreerend. 1 Groot ding wat mij bij zal blijven is dat ik meer tijd indeling zal moeten hebben en ook vaker nee moet zeggen tegen anderen als ze mijn hulp nodig hebben, of hulp bieden op een andere manier.

Ik heb extreem veel tijd mis gelopen vanwege het feit dat ik andere geholpen heb en niet veel aan mijn eigen project heb gezeten.

Ook heb ik gemerkt dat iets simpels als een puzzel bedenken nog moeilijker kan zijn als je het moet uitvoeren. Dus de groten takes die ik zal meenemen in het volgende project zal zijn, KISS. Maakt het mijzelf gemakkelijk en zorg ervoor dat ik vanuit een stabiele basis goed verder kan gaan, niet mijzelf omdompelen in extreem moeilijke gecompliceerde designs, maar beginnen van een goed design wat simpel is en daaruit opbouwen om leukere en interessante instatlaties te bouwen.