Table of Contents

Joc Testare Reflexe

Introducere

Proiectul este un joc interactiv de testare a reflexelor, ce masoare timpul de reactie al jucatorului. Jocul incepe dupa ce cele 4 LED-uri se sting si se termina atunci cand jucatorul apasa pe buton. Jocul ofera si un feedback sonor, atat la aprinderea LED-urilor cat si la apasarea butonului. Jocul comunica prin Bluetooth cu o aplicatie externa, catre care trimite date dar de pe care se pot da si comenzi pentru joc.

Scopul jocului este de a testa capacitatea jucatorului de a reactiona la o schimbare, tinand cont de faptul ca LED-urile se sting mereu dupa un numar aleatoriu de secunde, pentru a evita invatarea unui timp prestabilit, urmarind astfel o reactie reala si nu una mecanica.

Ideea de la care am plecat provine din motorsport, in special Formula 1, unde timpul de reactie este foarte important pentru startul cursei. In acelasi timp, nevoia de a avea reflexe rapide este esentiala si in viata de zi cu zi, acest joc putand fi folosit pentru antrenarea reflexelor la modificarea unui stimul vizual.

Utilitatea proiectului provine din cazurile in care poate fi utilizat: poate fi folosit pentru antrenarea reflexelor intr-un context sportiv, dat fiind faptul ca timpul de stingere al LED-urilor este aleator, dar poate fi folosit si ca un simplu joc de atentie.

Descriere Generala

Proiectul este gandit si construit in jurul microcontrolerului ATmega328P-XMINI, ce preia datele de la buton sau modulul Bluetooth, dar care gestioneaza si logica jocului, trimitand instructiuni celorlalte componente.

Modul de interactiune a modulelor

Schema bloc a proiectului

Hardware Design

Componente folosite

Componenta Model Interfata Link Datasheet
Microcontroller ATmega328P-XMINI UART Datasheet ATmega328P XMINI
Modul Bluetooth HC-05 Bluetooth Datasheet HC-05
Buton HW-504 Intreruperi Externe(INT0) Datasheet Joystick
Buzzer KY-006 Timer2 in Fast PWM -
LED-uri 4 LED-uri 5mm GPIO -
Rezistente 4x220Ohmi, 1x1kOhm, 1x2kOhmi - -

Schema electrica

Diagrame de semnal

Software Design

Mediu de Dezvoltare

Librarii folosite

Algoritmi si Structuri

1) Automatul de stari: Logica principala a proiectului este data de un automat de stari, starea 0, cand jocul asteapta sa fie pornit(practic el sta intr-o stare de idle), stare 1, care se declanseaza cand se primeste comanda de start, cele 4 LED-uri incepand sa se aprinda treptat, si in final starea 2, atunci cand playerul apasa pe buton dupa stingerea LED-urilor iar timerul se opreste fiind afisat timpul scos(timerul incepe din momentul in care LED-urile se sting).

2) Timerul pentru cronometru: Utilizez intreruperi hardware pentru a numara la fiecare 1 milisecunda, folosind Timer0. La fiecare intrerupere se actualizeaza o variabila globala de tip volatile. Citirea ei se face folosind cli() si sei() pentru a asigura ca este citita corect.

3) Generarea semnalului PWM: Pentru a genera semnalul PWM, folosesc Timer2 in modul FastPWM. Functia care prelucreaza cum se aude sunetul are doi parametrii: frecventa si volum_procent. Astfel, orice apel de functie cu unul din parametrii egali cu 0 opreste timerul. Rezultatul emis de buzzer este stocat in OCR2A, iar valoarea de TOP este calculata dupa formula FrecvCPU/(Prescaler*frecventa) - 1. Ulterior, in registrul OCR2B retine intensitatea sunetului, aplicand volum_procent valorii din OCR2A. Astfel, functia imi permite sa generez diferite sunete. In functie de timpul de reactie al jucatorului, emit diferite serii de sunete.

4) Transmiterea datelor: Folosesc interfata USART atat pentru a afisa rezultatul, cat si pentru a trimite comenzi. Folosesc un buffer ce retine carcaterele primite pana la \n sau \r. Folosind interfata USART si protocolul de Bluetooth trimit si afisez comnezi si rezultate de pe o aplicatie pe telefon.

Functii si fisiere folosite

Fisiere

Functii

Fisierul main.c este impartit in mai multe functii, astfel:

Rezultate obtinute

Am reusit sa construiesc un sistem care cronometreaza timpul pe care un jucator il inregistreaza atunci cand trebuie sa reactioneze la un stimul vizual, astfel:

Media pentru proiect

Link video proiect YouTube https://www.youtube.com/watch?v=rPKtpC0Egbc

Aplicatie Bluetooth

Concluzii

Codul implementat pentru proiect, alaturi de poze sunt pe acest repo de GitHub: https://github.com/Rares123121/ProiectPM