This is an old revision of the document!
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.
3. Hardware Design
Lista de piese:
Placă de dezvoltare Arduino UNO (microcontroler ATmega328P)
Modul Bluetooth HC-05 (pentru conexiunea wireless cu telefonul)
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). Această decizie demonstrează stăpânirea a două sisteme complet diferite de întreruperi pe arhitectura AVR.
LED-urile (PB0, PB1, PB2): Sunt grupate intenționat pe același port logic (Portul B). Asta ne permite să le aprindem sau să le stingem pe toate simultan cu o singură operație matematică, fiind mult mai eficient decât modificarea unor pini împrăștiați pe toată placa.
Fără rezistențe externe: S-a renunțat la rezistențele clasice de pull-down pentru butoane, folosind în schimb rezistențele interne de Pull-Up ale ATmega328P pentru a curăța design-ul fizic de pe breadboard.
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
Această secțiune va fi completată după asamblarea și testarea hardware-ului final.
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