Table of Contents

Puzzle Box

Introducere

Puzzle Box se adresează pasionaților de puzzle-uri logice care vor să își testeze capacitățile și să găsească soluții inedite.

Proiectul poate fi folosit atât pentru a te distra cu prietenii, cât și în cadrul activităților de tip escape room. Fiind inspirat de jocuri video de tip puzzle (The Witness, Portal, Keep Talking and Nobody Explodes), proiectul va fi o sursă de divertisment alternativă sau chiar complementară.

Funcționalitățile incluse sunt diverse probe (quest-uri) ce trebuie rezolvate până la scurgerea timpului și explozia comorii, iar odată rezolvate, vor debloca cufărul cu o recompensă secretă. Probele se folosesc de elemente inedite ca sunet, lumini și altele ce așteaptă să fie descoperite.

Descriere generală

Utilizatorul interacționează cu senzorii și butoanele pentru a rezolva quest-urile în timpul limită. Acesta primește feedback vizual (prin display) și auditiv (prin buzzer), iar dacă rezolvă ghicitorile, cufărul se va deschide.

Hardware Design

Tip componentă Număr piese
Arduino Uno 1
Piezo Buzzer 1
LCD I2C 16×2 1
Buton 3
LED 3
Micro Servo SG90 1

Software Design

Mediul folosit este Arduino IDE, cu bibliotecile: Servo.h și LiquidCrystal_I2C.h.

Programul va genera un cod pe care il va sugera ori prin aprinderea beculețelor, ori prin hint-uri offline.

User-ul va trebui să deslușească codul din indicii, apoi dacă va apăsa secvența corectă cu ajutorul butoanelor va rezolva una dintre provocări și avansează la urmatorul nivel. Este folosit în loop-ul programului o mașină de stări în funcție de nivelul la care a ajuns jucătorul. Printr-o variabilă de tip bool, se va afișa o singură dată setup-ul pentru fiecare nivel. De asemenea, input-ul este afișat pe LCD, iar greșelile sunt semnalate de buzzer, dar și trecerea la nivelul următor. Când se apasă un buton, acesta e verificat să fie cel corect din secvență.

Acest nivel hint-uiește că utilizatorul are un mesaj, iar acesta trebuie să înțeleagă sa verifice PC-ul, adică monitorul serial. De acolo, deslușește misterul și apasă butonul corect. Acesta are 2 încercări pentru a nimeri răspunsul corect, altfel buzzer-ul va cânta o melodie de eșec, iar jocul se va reseta.

Nivelul 3 reprezintă folosirea motorașului pentru a indica ultimele indicii. Acesta este comandat folosing Fast PWM și biblioteca Servo.

Dacă eșuează, și pierde toate viețile, jocul se va reseta. Toate mesajele principale sunt afișate pe un LCD prin I2C. Pe ecran când se așteaptă input de la jucător, e afișat un cursor care blink-uiește intermitent. Acesta folosește funcția millis() pentru a se afișa doar la un anumit interval de timp. Mesajul secundar din nivelul 2 este afișat în monitorul serial folosing UART. Melodiile sunt create folosind funcția tone() și secvențele de note preluate din referința [1] (figurată în secțiunea aferentă).

Dacă provocările sunt terminate în timp util, motorașul se va roti pentru a deschide cufărul.

Rezultate Obţinute

https://drive.google.com/file/d/1ZSNrAF6WNEsDdbHpyQNS_if4fDLmGUMT/view?usp=sharing (video simulare flow)

Concluzii

Proiectul mi-a trezit o curiozitate sporită acum ca se vede ca posibilitățile sunt infinite. Au fost unele idei care nu au putut fi implementate de data aceasta, însă rezultatul este satisficător și l-aș putea vedea folosit în Escape Rooms de specialitate sau în evenimente de tip Treasure Hunt.

Am fost concentrat mai mult pe integrarea câtor mai multe medii diferite de provocări, acest fapt fiind ideal pentru activitățile engaging de tip puzzle, și, din păcate, nu a fost timp pentru un afișaz mai prietenos, dar am idei despre încapsularea proiectului în cutiuțe pe diferite module și integrarea unui cufăr care să reprezinte recompensa finală.

Download

puzzle_box.zip (sursa)

Bibliografie/Resurse