BopIt este un joc interactiv conceput pentru a testa si antrena reflexele si viteza de reactie. Mecanica jocului presupune executarea rapida a unor actiuni simple, precum apasarea unui buton, rotirea unui element, imediat ce actiunea apare pe ecran.
Scopul jocului este ca jucătorul să răspundă corect și cât mai rapid la comenzile primite. Jocul oferă două moduri de joc: unul normal, în care jucătorul are la dispoziție 5 secunde pentru a realiza orice acțiune, și un mod rapid, în care jucătorul are 10 secunde pentru a efectua cât mai multe acțiuni posibil.
Proiectul este dezvoltat pe o placuta Arduino Uno, la care sunt conectate toate componentele necesare. Atunci cand butonul de start este apasat, pe ecranul LCD este afisata actiunea pe care jucatorul trebuie sa o realizeze, impreuna cu scorul curent.
Pe un afișaj cu 7 segmente este indicat timpul ramas pentru a actiona– acesta incepe de la 5 secunde pentru modul normal si 10 pentru modul rapid
Imediat ce o actiune este afisata pe LCD, jucatorul trebuie sa o indeplineasca corect si in intervalul de timp alocat. Daca nu reuseste, pierde runda, lucru semnalizat printr-un sunet emis de buzzer.
Hardware:
Schema electrica:
Schema hardware:
placă de dezvoltare compatibilă cu Arduino UNO R3:
• 5V (folosit pentru alimentarea componentelor care necesită tensiune constantă) • GND (comun tuturor componentelor, asigurând referința de tensiune)
LCD 16×2 (cu modul I2C): display pentru afișarea meniului
• SDA (Serial Data) -> A4 - linia de date pentru protocolul I2C (permite transferul datelor între Arduino și LCD) • SCL (Serial Clock) -> A5: - linia de ceas pentru transmiterea sincronizată a datelor între dispozitivele I2C
2 x (push-button + rezistență): implementarea de comenzi pentru meniu
• conexiune la pini digitali (A1-A2): - folosiți pentru a detecta apăsările de butoane • folosire de rezistențe 10kΩ: - folosite ca pull-down pentru a menține starea LOW în absența apăsării
Passive buzzer: sunete trist la pierderea jocului
• conexiune la pin digital (D8): - controlul sunetului prin generarea de tonuri cu funcția tone() din Arduino
Potentiometru: folosit pe post de rotita in joc
• conexiune la pin digital (D8)
7 segment display: Folosit pentru a afisa cate secunde mai avem pentru a actiona
• display cu catod comun
74HC595: multiplexeaza
• controlează display-ul cu 7 segmente folosind doar 3 pini de la Arduino • conexiune la pinii digitali: -latchPin (D10) transfera dqatele din registrul de deplasare catre pinii de iesire -clockPin (D9) puls de ceas pentru deplasarea bitilor in registru - dataPin (D11) transmiterea datelor bit cu bit
Mapare cu 7-segment display Q0 → Segment DP
Q1 → Segment G
Q2 → Segment F
Q3 → Segment E
Q4 → Segment D
Q5 → Segment C
Q6 → Segment B
Q7 → Segment A
Mediu de dezvoltare:
Pentru dezvoltarea proiectului, am folosit editorul de text VS Code împreună cu extensia PlatformIO, configurată pentru a utiliza placa Arduino Uno
Librarii:
Wire : Aceasta este o librarie standard pentru comunicatia I2C pe Arduino, folosita pentru a interactiona cu dispozitivele conectate pe magistrala I2C.
LiquidCrystal_I2C : O librarie pentru controlul afisajelor LCD prin intermediul protocolului I2C, oferind functionalitati pentru setarea cursorului, stergerea ecranului si afisarea de text. Am folosit-o pentru a afisa diverse mesaje pe ecranul LCD.
Algoritm: Codul este impartit in 3 bucati
Partea de inițializare include:
enum GameState {
IDLE, PLAYING,
}
Main-ul (setup și loop):
Funcții:
Utilizarea laboratoarelor în cadrul proiectului:
COD: https://github.com/Lex-Stud/PM/blob/main/COD.c++
Proiect final: https://youtu.be/vwC6Ghq6aGw
Un joc interactiv si comeptitiv.
Demo:
Mod normal: https://youtu.be/xgpH6ndhMmk
Mod rapid: https://youtu.be/3KywepIOT1g
Proiectul a fost unul interesant și plăcut. M-a ajutat să înțeleg mai bine materia predată la laborator și mi-a sporit dorința de a realiza pe cont propriu și alte proiecte în viitor. Implementarea nu a fost lipsită de greutăți și probleme, dar la final am putut realiza ceea ce mi-am dorit.
Proiectul este unul bun și funcțional, însă poate fi îmbunătățit în viitor:
06.05.2025 - am creat pagina si am adăugat descrierea generală a proiectului
12.05.2025 - am asamblat hardware-ul și am testat piesele
16.05.2025 - am început dezvoltarea software-ului
20.05.2025 - am obținut un proiect functional