Consolă de Evaluare Psihotehnică și Timp de Reacție (6-în-1)
1. Introducere
Proiectul ăsta e o consolă interactivă „6-în-1” făcută de la zero, gândită să îți testeze nu doar viteza de reacție, ci și cum îți merge mintea sub presiune (memoria, atenția la capcane, confuzia culorilor). Practic, îmbină partea de hardware (butoane, LED-uri, buzzer) cu un soft scris “bare-metal” (direct pe regiștrii procesorului, fără funcții Arduino prefabricate).
Spre deosebire de un cronometru banal, consola asta are 6 jocuri diferite pe care le alegi dintr-un meniu folosind un singur buton. Mai mult, ca să o facem cu adevărat modernă, am adăugat un modul Bluetooth care trimite scorurile și timpii de reacție (în milisecunde) direct pe telefon, în timp ce pe placă se salvează automat recordurile (High-Scores) în memoria internă (EEPROM).
2. Descriere generală
Cum funcționează: Sistemul rulează un “automat de stări” (State Machine). Când îl pornești, te bagă direct în Meniu. Apeși scurt pe butonul de START ca să treci prin cele 6 jocuri (LED-urile îți arată la ce joc ești). Când te-ai hotărât, ții apăsat lung pe START, auzi un BEEP de confirmare și începe nebunia:
Jocul 1 (Reflex Pur - LED Albastru): Aștepți să se aprindă LED-ul și apeși cât poți de repede. Testează reflexul brut.
Jocul 2 (Duel - LED Verde): Joci cu un prieten (Jucător 1 pe butonul de sus, Jucător 2 pe cel de jos). Primul care apasă când se face Verde, câștigă.
Jocul 3 (Memorie - LED Roșu): Consola îți cântă și îți arată o secvență de culori (tip Simon Says). Tu trebuie să o repeți din butoane.
Jocul 4 (Atenție Selectivă - Albastru+Verde): Apeși butonul doar dacă lumina vine însoțită de un sunet de la buzzer. Dacă e liniște, e o capcană și pierzi.
Jocul 5 (Stroop Test - Verde+Roșu): Pe telefon îți scrie “VERDE”, dar pe placă se aprinde LED-ul ROȘU. Tu trebuie să apeși butonul pentru culoarea luminii, ignorând textul.
Jocul 6 (Survival - Toate LED-urile): LED-urile se aprind aleatoriu și trebuie să “lovești” butonul corect. Viteza crește constant până când greșești.
Ipoteza proiectului:
Vrem să demonstrăm clar, pe bază de milisecunde, că timpul de reacție al unui om scade drastic atunci când creierul trebuie să proceseze și o informație logică (cum e la Stroop Test sau la Capcană), comparativ cu un simplu reflex vizual.
2.1. Arhitectura Sistemului (Block Diagram)
Schema de mai jos ilustrează fluxul datelor în cadrul consolei, de la preluarea input-ului fizic până la generarea reacțiilor și transmisia telemetriei.
3. Hardware Design
Lista de piese:
Placă de dezvoltare Arduino UNO (microcontroler ATmega328P)
Modul Bluetooth HC-05 (pentru conexiunea wireless cu telefonul)
1 x Ecran LCD/OLED I2C (pentru afișarea locală a scorurilor și a meniului)
1 x Buzzer Piezo (pentru stimuli auditivi)
3 x LED-uri 5mm (Albastru, Verde, Roșu - mapate pentru cele 3 butoane de reacție)
4 x Butoane tactile 6x6x6 (1 x START/Meniu și 3 x REACȚIE jucători)
Rezistențe: 3 x 220Ω (pentru protecția LED-urilor)
Fire Dupont și Breadboard
Schema electrică și Justificarea Pinilor:
Arhitectura hardware a fost aleasă strategic pentru a scoate maximul de viteză și eficiență din microcontroler, evitând conexiunile la întâmplare:
Buzzer-ul pe Pinul PD5 (OC0B): Acest pin este legat fizic la Timer-ul 0 intern al procesorului. Folosind acest pin, generăm sunetele pur hardware (modul CTC / Fast PWM), lăsând procesorul 100% liber să citească butoanele și să ruleze jocul în timp ce buzzerul cântă pe fundal.
Butoanele TOP (PD2) și MID (PD3): Aceștia sunt pinii de Întreruperi Externe Hardware (INT0 și INT1). La jocurile de reflexe ai nevoie de o viteză instantanee. Orice apăsare pe ele oprește instant procesorul și înregistrează scorul, fără nicio întârziere.
Butoanele BOT (PD4) și START (PC0): Pentru că INT0 și INT1 erau deja ocupate, am folosit pentru restul butoanelor sistemul PCINT (Pin Change Interrupts).
LED-urile (PB0, PB1, PB2): Sunt grupate intenționat pe același port logic (Portul B). Asta ne permite să le aprindem/stingem simultan cu o singură operație matematică.
Ecranul LCD/OLED (SDA pe A4, SCL pe A5): Folosește magistrala I2C (Inter-Integrated Circuit). Am ales această interfață deoarece necesită doar 2 pini de date (SDA și SCL), lăsând restul pinilor liberi. Comunicarea este gestionată eficient de modulul TWI (Two Wire Interface) integrat în ATmega328P.
Modulul Bluetooth HC-05 (TX pe RX-0, RX pe TX-1): Este conectat direct la hardware-ul USART al microcontrolerului. Comunicarea la 9600 baud se face asincron, permițând trimiterea datelor de telemetrie către telefon în fundal, fără a bloca interfața de joc.
Fără rezistențe externe la butoane: S-a renunțat la rezistențele clasice de pull-down, folosind în schimb rezistențele interne de Pull-Up ale ATmega328P pentru un circuit mai curat.
4. Software Design
Mediu de dezvoltare: PlatformIO IDE / framework nativ AVR-GCC (fără funcții de nivel înalt Arduino gen digitalWrite, accesând direct registrele ATmega).
Pentru realizarea acestui proiect s-au integrat funcționalități complexe, adaptate direct din modulele studiate în laboratoarele de PM:
Laboratorul 0 & GPIO: Configurarea directă a registrilor (DDRx, PORTx, PINx) pentru managementul stimulilor vizuali și activarea logică a rezistențelor de PULL-UP interne. Logica de navigare folosește un Finite State Machine (FSM).
Laboratorul 2 & 3 (Timere și Uptime): Abandonarea funcțiilor blocante (tip _delay_ms()) în favoarea unei arhitecturi bazate pe evenimente. S-a implementat un sistem propriu de millis() bazat pe un Timer (Timer2) în modul CTC, esențial pentru calcularea exactă a timpului de reacție.
Laboratorul 2 (Întreruperi): Pentru a garanta precizia de măsurare fără latențe de polling, butoanele declanșează direct rutine ISR (INT0, INT1, PCINT1, PCINT2).
Laboratorul 1 & 3 (USART & Bluetooth): Configurarea magistralei seriale (UBRR0, UCSR0, UDR0) și folosirea funcției FDEV_SETUP_STREAM pentru a redirecționa stdout. Astfel, putem folosi printf() pentru a trimite scorurile formatate direct prin modulul Bluetooth HC-05.
Laboratorul 3 (PWM / Buzzer): Folosirea Timer0 pentru a genera semnale hardware direct pe pinul aferent buzzer-ului.
*(Extra)* Memoria EEPROM: Utilizarea bibliotecii standard <avr/eeprom.h> pentru salvarea high-score-urilor.
Profilarea codului și Debouncing:
Pentru a preveni înregistrările multiple mecanice ale aceluiași buton (ghost-clicks), s-a implementat un algoritm de software debouncing neblocant, evaluând diferența de timp între două declanșări consecutive ale aceleiași întreruperi.
5. Planificare (Gantt)
Activitățile au fost împărțite astfel pentru a urmări un progres incremental:
Săptămâna 1: Proiectarea schemei electrice, asamblarea componentelor fizice pe breadboard și configurarea mediului PlatformIO. Validarea pinilor (Test de bază GPIO).
Săptămâna 2: Implementarea arhitecturii de tip State Machine (FSM). Scrierea logicii pentru navigarea în meniu și debouncing software stabil.
Săptămâna 3: Implementarea algoritmilor cognitivi pentru cele 6 jocuri folosind Timere și Întreruperi Hardware (INT și PCINT).
Săptămâna 4: Integrarea modulului Bluetooth HC-05 (UART), ajustarea modulelor PWM, teste finale de stabilitate și redactarea documentației Wiki.
6. Rezultate Obținute
Mai jos se poate observa asamblarea inițială pe breadboard a componentelor (placa de dezvoltare cu microcontrolerul ATmega328P, butoanele tactile, LED-urile și buzzer-ul), folosită pentru testarea și validarea conexiunilor și a primelor module de cod.
7. Concluzii
Această secțiune va conține sumarul experienței, dificultățile întâmpinate și posibile dezvoltări viitoare.
8. Jurnal (Repository)
9. Bibliografie/Resurse