This shows you the differences between two versions of the page.
|
pm:prj2026:alexandru.jipa2803:mihail_devid.mecu [2026/05/08 23:50] mihail_devid.mecu [3. Hardware Design] |
pm:prj2026:alexandru.jipa2803:mihail_devid.mecu [2026/05/12 12:25] (current) mihail_devid.mecu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Wireless Reaction Time Tester ====== | + | ====== Consolă de Evaluare Psihotehnică și Timp de Reacție (6-în-1) ====== |
| ===== 1. Introducere ===== | ===== 1. Introducere ===== | ||
| - | Proiectul constă în realizarea unui "Reaction Time Tester", un dispozitiv hardware capabil să măsoare cu o precizie de milisecunde timpul de reacție uman la diferiți stimuli (vizuali și auditivi). Scopul acestui proiect este de a îmbina cunoștințele de bază de interacțiune hardware (butoane, LED-uri, semnale PWM) cu sisteme de comunicare wireless și stocare non-volatilă. | + | 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). |
| - | Aplicația este utilă atât ca un joc interactiv, cât și ca un instrument demonstrativ pentru măsurarea reflexelor, datele fiind trimise în timp real pe un smartphone. | + | 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). |
| - | + | ||
| - | **Elemente de noutate:** | + | |
| - | Spre deosebire de un cronometru clasic, sistemul aduce elemente de noutate prin implementarea unui modul Bluetooth HC-05 pentru afișarea wireless a rezultatelor pe un smartphone, precum și utilizarea memoriei interne EEPROM a microcontrolerului pentru salvarea permanentă a celui mai bun scor (High-Score), chiar și după deconectarea alimentării. | + | |
| ===== 2. Descriere generală ===== | ===== 2. Descriere generală ===== | ||
| - | **Mod de funcționare:** Jocul va aștepta o inițializare din partea utilizatorului (apăsarea butonului de "Start"). Microcontrolerul va genera un interval de timp aleatoriu (delay) pentru a preveni anticiparea. După expirarea timpului, sistemul va declanșa fie un stimul vizual (LED aprins), fie un stimul auditiv (Buzzer). În acel moment, un Timer intern pornește măsurătoarea. | + | **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: |
| - | Utilizatorul trebuie să apese butonul de "Reacție" cât mai rapid. Apăsarea va declanșa o întrerupere hardware (External Interrupt) care va opri Timer-ul pentru o precizie maximă. Timpul scurs este calculat în milisecunde, trimis prin UART către modulul Bluetooth, iar dacă timpul este mai mic decât recordul precedent, acesta este actualizat în memoria EEPROM. | + | * **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:** | **Ipoteza proiectului:** | ||
| - | Credem că timpul mediu de reacție al unui utilizator la stimulul auditiv (buzzer) va fi cu aproximativ 10-15% mai rapid decât reacția la stimulul vizual (LED), deoarece procesarea auditivă umană tinde să declanșeze reflexe motorii mai rapid. Această ipoteză va fi testată prin agregarea rezultatelor pe parcursul dezvoltării. | + | 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. | ||
| + | {{:pm:prj2026:alexandru.jipa2803:devid_block.png?900|}} | ||
| ===== 3. Hardware Design ===== | ===== 3. Hardware Design ===== | ||
| **Lista de piese:** | **Lista de piese:** | ||
| - | * Placă de dezvoltare ATmega328P-XMINI | + | * Placă de dezvoltare Arduino UNO (microcontroler ATmega328P) |
| - | * Modul Bluetooth HC-05 (pentru comunicare wireless) | + | * Modul Bluetooth HC-05 (pentru conexiunea wireless cu telefonul) |
| - | * 1 x Buzzer pasiv (pentru stimul auditiv) | + | * 1 x Ecran LCD/OLED I2C (pentru afișarea locală a scorurilor și a meniului) |
| - | * 2 x LED-uri 5mm (pentru stimul vizual și status) | + | * 1 x Buzzer Piezo (pentru stimuli auditivi) |
| - | * 2 x Butoane tactile 6x6x6 (Start și Reacție) | + | * 3 x LED-uri 5mm (Albastru, Verde, Roșu - mapate pentru cele 3 butoane de reacție) |
| - | * Rezistențe: 220Ω (pentru LED-uri), 10kΩ (pull-down butoane), 1kΩ și 2.2kΩ (divizor tensiune RX Bluetooth) | + | * 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 | * Fire Dupont și Breadboard | ||
| - | **Schema electrică:** | + | **Schema electrică și Justificarea Pinilor:** |
| - | {{:pm:prj2026:alexandru.jipa2803:smooth_maimu_1_.png?800|}} | + | 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. | ||
| + | |||
| + | {{:pm:prj2026:alexandru.jipa2803:smooth_maimu_2_.png?900|}} | ||
| ===== 4. Software Design ===== | ===== 4. Software Design ===== | ||
| - | **Mediu de dezvoltare:** Microchip Studio / AVR-GCC. | + | **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 îngloba funcționalități din următoarele laboratoare: | + | Pentru realizarea acestui proiect s-au integrat funcționalități complexe, adaptate direct din modulele studiate în laboratoarele de PM: |
| - | * **Laboratorul de GPIO:** Configurarea pinilor de I/O pentru aprinderea LED-urilor și citirea butoanelor. | + | |
| - | * **Laboratorul de Timere:** Utilizarea unui Timer pe 16 biți (ex: Timer1) configurat cu un prescaler adecvat pentru a număra milisecundele curse între stimul și reacție. | + | |
| - | * **Laboratorul de Întreruperi:** Utilizarea pinilor `INT0`/`INT1` pentru a detecta apăsarea butonului de reacție, garantând o latență software minimă față de metoda de *polling*. | + | |
| - | * **Laboratorul de UART:** Comunicarea serială cu modulul HC-05 pentru a transmite pachetele de date (timpul înregistrat) către aplicația de pe smartphone. | + | |
| - | * *(Extra)*: Citirea și scrierea regiștrilor EEPROM pentru persistența datelor. | + | |
| - | **Profilarea codului:** | + | * **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). |
| - | Pentru a asigura acuratețea măsurătorilor, overhead-ul rutinei de tratare a întreruperii (ISR) trebuie să fie minim. Evaluarea performanței (profilarea) se va face setând un pin GPIO pe HIGH la intrarea în ISR și pe LOW la ieșirea din aceasta. Se va măsura durata pulsului generat (numărul de cicli de ceas / microsecunde) pentru a demonstra eficiența codului. | + | * **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. | ||
| - | **Metrici de performanță:** | + | **Profilarea codului și Debouncing:** |
| - | * Precizia de măsurare a timpului: rezoluție de ±1 ms. | + | 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. |
| - | * Timp de latență la apăsarea butonului: < 1 ms (asigurat prin utilizarea hardware interrupts). | + | |
| - | * Comunicare wireless fără pierderi de pachete la un baud rate de 9600 bps. | + | |
| ===== 5. Planificare (Gantt) ===== | ===== 5. Planificare (Gantt) ===== | ||
| Activitățile au fost împărțite astfel pentru a urmări un progres incremental: | Activitățile au fost împărțite astfel pentru a urmări un progres incremental: | ||
| - | * **Săptămâna 1:** Achiziția componentelor și realizarea circuitului de bază (LED-uri și butoane). Setarea mediului de dev. | + | * **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 GPIO și a Timerelor pentru numărarea milisecundelor. | + | * **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:** Integrarea modulului Bluetooth prin UART și testarea recepției pe telefon. | + | * **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:** Implementarea rutinei EEPROM pentru High-Score, asamblarea finală (cablare curată) și testarea ipotezei. | + | * **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 ===== | ===== 6. Rezultate Obținute ===== | ||
| - | //Această secțiune va fi completată după asamblarea și testarea hardware-ului final.// | + | 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. |
| + | {{:pm:prj2026:alexandru.jipa2803:breadboard_devid.jpeg?900|}} | ||
| ===== 7. Concluzii ===== | ===== 7. Concluzii ===== | ||
| //Această secțiune va conține sumarul experienței, dificultățile întâmpinate și posibile dezvoltări viitoare.// | //Această secțiune va conține sumarul experienței, dificultățile întâmpinate și posibile dezvoltări viitoare.// | ||
| Line 66: | Line 82: | ||
| ===== 9. Bibliografie/Resurse ===== | ===== 9. Bibliografie/Resurse ===== | ||
| * [[https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf|Datasheet ATmega328P]] | * [[https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf|Datasheet ATmega328P]] | ||
| + | * Documentația oficială PlatformIO și AVR Libc. | ||
| * Laboratoarele de PM (Universitatea Politehnica din București) | * Laboratoarele de PM (Universitatea Politehnica din București) | ||