This is an old revision of the document!


Consolă de Evaluare Psihotehnică și Timp de Reacție (6-în-1)

1. Introducere

Proiectul constă în realizarea unei console interactive “6-în-1”, un dispozitiv hardware complex capabil să evalueze nu doar viteza de reacție pură a unui utilizator, ci și funcțiile cognitive superioare (atenția selectivă, memoria pe termen scurt, inhibiția cognitivă). Scopul acestui proiect este de a îmbina arhitecturile de tip Finite State Machine (FSM) în software cu interacțiunea hardware directă (matrice de butoane, stimuli vizuali multicromatici și auditivi cu PWM), comunicare wireless și stocare non-volatilă.

Aplicația servește drept instrument demonstrativ avansat pentru măsurarea reflexelor umane în condiții de stres cognitiv, datele și statisticile fiind transmise în timp real către un smartphone sau terminal serial.

Elemente de noutate: Spre deosebire de un cronometru clasic reactiv, sistemul introduce o arhitectură modulară cu 6 moduri de joc distincte. Aduce elemente de noutate prin implementarea unui meniu navigabil cu un singur buton (Start), utilizarea unui modul Bluetooth HC-05 pentru afișarea wireless a telemetriei și partiționarea memoriei interne EEPROM a microcontrolerului pentru salvarea permanentă a celor mai bune scoruri (High-Score) independente pentru fiecare din cele 6 module de testare.

2. Descriere generală

Mod de funcționare: Sistemul operează pe baza unui automat de stări (State Machine). La pornire, consola intră în starea de “Meniu”. Utilizatorul folosește butonul START (A0) pentru a naviga ciclic prin cele 6 moduri de evaluare (confirmate vizual prin combinații specifice de LED-uri). O apăsare lungă (>1 secundă) confirmă selecția și declanșează jocul ales:

  • Jocul 1 (Reflex Pur - LED Roșu): Măsurarea reacției de bază la un stimul vizual simplu.
  • Jocul 2 (Duel - LED Galben): Mod competitiv local (Jucător 1 vs Jucător 2), validat prin timpi concurențiali.
  • Jocul 3 (Memorie - LED Verde): Secvențe generate pseudo-aleatoriu care trebuie reproduse din butoane (tip Simon Says).
  • Jocul 4 (Atenție Selectivă - Roșu+Galben): Jucătorul trebuie să reacționeze la stimuli vizuali DOAR dacă sunt însoțiți de un trigger auditiv (buzzer). Testează capacitatea de filtrare a stimulilor falși.
  • Jocul 5 (Stroop Test - Galben+Verde): Test de disonanță cognitivă. Se transmite prin Bluetooth numele unei culori, dar se aprinde un LED diferit; reacția trebuie să corespundă stimulului vizual.
  • Jocul 6 (Survival - Toate LED-urile): Frecvența stimulilor crește logaritmic până la înregistrarea unei erori.

În timpul jocurilor, apăsarea butoanelor declanșează întreruperi hardware (pentru precizie), opritul Timer-ului și calcularea timpului scurs în milisecunde. Datele sunt trimise prin UART către Bluetooth și evaluate local pentru scrierea în EEPROM.

Ipoteza proiectului: Ne propunem să demonstrăm că timpul mediu de reacție al unui utilizator va fi semnificativ mai lent în scenariile cu încărcare cognitivă (Stroop Test, Atenție Selectivă - estimat la o latență de +150-300ms) comparativ cu reflexul motor de bază (Jocul 1). De asemenea, presupunem că stimulul multimodal (vizual + auditiv) va genera timpi de reacție cu 10-15% mai rapizi decât stimulul strict vizual.

3. Hardware Design

Lista de piese:

  • Placă de dezvoltare Arduino UNO (ATmega328P)
  • Modul Bluetooth HC-05 (pentru transmiterea wireless a telemetriei și meniului)
  • 1 x Buzzer Piezo (pentru stimuli auditivi și confirmări de stare/erori)
  • 3 x LED-uri 5mm (Roșu, Galben, Verde - mapate pentru cele 3 butoane de reacție)
  • 4 x Butoane tactile 6x6x6 (1 x START/Meniu sistem și 3 x REACȚIE jucători)
  • Rezistențe: 3 x 220Ω (divizor curent pentru protecția LED-urilor)
  • Fire Dupont și Breadboard

Schema electrică: Pentru a eficientiza design-ul și a preveni zgomotul electromagnetic (bouncing), s-a renunțat la rezistențele externe de tip pull-down. Toate butoanele utilizează rezistențele interne de Pull-Up ale microcontrolerului ATmega328P. Schema Electrica Consola 6-in-1

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 se vor integra 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. Activarea logică a rezistențelor de PULL-UP interne pentru matricea de butoane (stare implicită HIGH, active LOW). Logica de navigare a meniului și a modurilor de joc va folosi o arhitectură de tip Finite State Machine (FSM), extinzând conceptul automatului de stări studiat la exercițiul cu semaforul.
  • Laboratorul 2 & 3 (Timere și Uptime): Abandonarea funcțiilor blocante (tip _delay_ms()) în favoarea unei arhitecturi bazate pe evenimente. Se va implementa o funcție de tip uptime_ms() bazată pe generarea unei întreruperi la fiecare milisecundă (folosind un Timer în modul CTC, ex: Timer2 cu Compare Match). Acest sistem va fi folosit pentru calcularea exactă a timpului de reacție și ca seed entropic pentru funcția random().
  • Laboratorul 2 (Întreruperi): Pentru a garanta o precizie de măsurare fără latențe de polling în funcția main(), butoanele de reacție vor declanșa direct rutine ISR. Se vor folosi atât întreruperi externe dedicate (ex: INT0/INT1), cât și întreruperi pe schimbare de stare a portului (PCINT configurând PCICR și PCMSKx).
  • Laboratorul 1 & 3 (USART & Bluetooth): Reutilizarea bibliotecii proprii usart.c pentru configurarea registrilor UBRR0, UCSR0 și UDR0. Se va implementa funcția de FDEV_SETUP_STREAM studiată în Lab 3 pentru a redirecționa fluxul standard stdout, permițând utilizarea nativă a funcției printf() pentru a trimite scorurile formatate și datele de telemetrie direct prin modulul Bluetooth HC-05.
  • Laboratorul 3 (PWM / Buzzer): Folosirea unui Timer adițional (ex: Timer1 sau Timer0) pentru a genera semnale hardware de tip Fast PWM sau CTC pe pinul aferent buzzer-ului, controlând frecvența tonurilor emise în funcție de starea jocului (alerte, erori sau succese).
  • *(Extra)* Memoria EEPROM: Utilizarea bibliotecii standard <avr/eeprom.h> pentru salvarea și citirea celor 6 high-score-uri (câte unul pentru fiecare mod de joc), asigurând persistența datelor la deconectarea consolei de la alimentare.

Profilarea codului și Debouncing: Pentru a preveni înregistrările multiple mecanice (ghost-clicks), se va implementa un algoritm de software debouncing neblocant, evaluând diferența de timp (uptime_ms()) între două declanșări consecutive ale aceleiași întreruperi (metodă exersată în Lab 2 / Ex3). Overhead-ul rutinelor ISR va fi menținut minim pentru a nu decala numărătoarea milisecundelor.

5. Planificare (Gantt)

Activitățile au fost împărțite astfel pentru a urmări un progres incremental de tip “Agile”:

  • 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 (modurile 1-6) și debouncing software.
  • 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), scrierea/citirea EEPROM pentru stocarea scorurilor, teste finale de stabilitate și documentarea proiectului.

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

  • Documentația oficială PlatformIO și AVR Libc.
  • Laboratoarele de PM (Universitatea Politehnica din București)
pm/prj2026/alexandru.jipa2803/mihail_devid.mecu.1778311154.txt.gz · Last modified: 2026/05/09 10:19 by mihail_devid.mecu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0