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/09 10:19]
mihail_devid.mecu
pm:prj2026:alexandru.jipa2803:mihail_devid.mecu [2026/05/12 12:25] (current)
mihail_devid.mecu
Line 2: Line 2:
  
 ===== 1. Introducere ===== ===== 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 scurtinhibiț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ă. +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 capcaneconfuzia culorilor). Practicîmbină partea ​de hardware ​(butoane, LED-uri, buzzer) cu un soft scris "​bare-metal"​ (direct ​pe regiștrii procesoruluifără funcții Arduino prefabricate)
  
-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. +Spre deosebire de un cronometru ​banalconsola asta are 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 ​clasic reactivsistemul introduce o arhitectură modulară cu 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-Scoreindependente pentru fiecare din cele 6 module de testare.+
  
 ===== 2. Descriere generală ===== ===== 2. Descriere generală =====
-**Mod de funcționare:** Sistemul ​operează pe baza unui automat de stări (State Machine). ​La pornireconsola 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 șdeclanșează jocul ales: +**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:
-  * **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 jocurilorapăsarea butoanelor declanșează întreruperi hardware ​(pentru precizie), opritul Timer-ului și calcularea timpului scurs în milisecundeDatele sunt trimise prin UART către Bluetooth ​și evaluate local pentru ​scrierea în 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 susJucă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ștee o capcană și pierzi. 
 +  * **Jocul 5 (Stroop Test Verde+Roșu):** Pe telefon îțscrie "​VERDE",​ dar pe placă se aprinde LED-ul ROȘUTu 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:​**
-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 + auditivva genera timpi de reacție cu 10-15% mai rapizi decât stimulul strict vizual.+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 Arduino UNO (ATmega328P) +  * Placă de dezvoltare Arduino UNO (microcontroler ​ATmega328P) 
-  * Modul Bluetooth HC-05 (pentru ​transmiterea ​wireless a telemetriei ​și meniului) +  * Modul Bluetooth HC-05 (pentru ​conexiunea ​wireless ​cu telefonul) 
-  * 1 x Buzzer Piezo (pentru stimuli auditivi ​și confirmări de stare/erori+  * 1 x Ecran LCD/OLED I2C (pentru afișarea locală ​scorurilor ​și meniului) 
-  * 3 x LED-uri 5mm (Roșu, Galben, Verde - mapate pentru cele 3 butoane de reacție) +  * 1 x Buzzer Piezo (pentru stimuli auditivi) 
-  * 4 x Butoane tactile 6x6x6 (1 x START/​Meniu ​sistem ​și 3 x REACȚIE jucători) +  * 3 x LED-uri 5mm (Albastru, Verde, ​Roșu - mapate pentru cele 3 butoane de reacție) 
-  * Rezistențe:​ 3 x 220Ω (divizor curent ​pentru protecția LED-urilor)+  * 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:** 
-Pentru ​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. +Arhitectura hardware ​fost aleasă strategic pentru a scoate maximul de viteză și eficiență din microcontroler,​ evitând conexiunile la întâmplare:​ 
-{{:​pm:​prj2026:​alexandru.jipa2803:​smooth_maimu_1_.png?800|Schema Electrica Consola 6-in-1}}+ 
 +  * **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ă scorulfă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:​** PlatformIO IDE / framework nativ AVR-GCC (fără funcții de nivel înalt Arduino gen digitalWrite,​ accesând direct registrele ATmega). **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:+Pentru realizarea acestui proiect ​s-au integrat ​funcționalități complexeadaptate 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 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. ​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 & 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 ​o precizie ​de măsurare fără latențe de polling ​în funcția main(), butoanele ​de reacție vor declanș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 2 (Întreruperi):​** Pentru a garanta ​precizia ​de măsurare fără latențe de polling, butoanele declanșează direct rutine ISR (INT0INT1, PCINT1, PCINT2). 
-  * **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 1 & 3 (USART & Bluetooth):​** ​Configurarea magistralei seriale (UBRR0, UCSR0, UDR0) și folosirea ​funcției FDEV_SETUP_STREAM pentru a redirecționa stdout. Astfelputem folosi ​printf() pentru a trimite scorurile formatate direct prin modulul Bluetooth HC-05. 
-  * **Laboratorul 3 (PWM / Buzzer):** Folosirea ​unui Timer adițional (ex: Timer1 sau Timer0pentru 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)+  * **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 ​ș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.+  * *(Extra)* **Memoria EEPROM:** Utilizarea bibliotecii standard <​avr/​eeprom.h>​ pentru salvarea high-score-urilor.
  
 **Profilarea codului și Debouncing:​** **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.+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) ===== ===== 5. Planificare (Gantt) =====
-Activitățile au fost împărțite astfel pentru a urmări un progres incremental ​de tip "​Agile"​:+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 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 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 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.+  * **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.//
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