Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 zerogâ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 ​banalconsola asta are 6 jocuri diferite ​pe care le alegi dintr-un meniu folosind un singur buton. Mai multca 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 ​clasicsistemul aduce elemente de noutate prin implementarea unui modul Bluetooth HC-05 pentru afișarea wireless a rezultatelor ​pe un smartphoneprecum ​ș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 ​(delaypentru a preveni anticipareaDupă expirarea timpuluisistemul 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știte 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 rapidApăsarea va declanșîntrerupere hardware ​(External Interruptcare va opri Timer-ul pentru ​precizie maximă. Timpul scurs este calculat în milisecundetrimis prin UART către modulul Bluetoothiar dacă timpul este mai mic decât recordul precedentacesta 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ă ​secvență de culori ​(tip Simon Says). Tu trebuie să 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 buzzerDacă e liniștee 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 luminiiignorâ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 ​(buzzerva 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 rapidAceastă 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 consoleide 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
-  * x LED-uri 5mm (pentru stimul vizual ​și status+  * 1 x Buzzer ​Piezo (pentru ​stimuli auditivi
-  * x Butoane tactile 6x6x6 (Start și Reacție+  * 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)+  * 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 (DDRxPORTx, 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ătoriloroverhead-ul rutinei ​de tratare a întreruperii ​(ISRtrebuie să fie minimEvaluarea performanței (profilarease va face setând ​un pin GPIO pe HIGH la intrarea ​în ISR și pe LOW la ieșirea din aceastaSe va 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 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 ​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 ​timpului: rezoluție de ±1 ms. +Pentru a preveni înregistrările multiple mecanice ale aceluiași buton (ghost-clicks),​ s-implementat un algoritm de software debouncing neblocant, evaluând diferenț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)
pm/prj2026/alexandru.jipa2803/mihail_devid.mecu.1778273428.txt.gz · Last modified: 2026/05/08 23:50 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