This shows you the differences between two versions of the page.
|
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 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ă. | + | 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 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 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 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ă ===== | ===== 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: | + | **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 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. | + | * **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:** | ||
| - | 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. | + | 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ă a scorurilor și a 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 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. | + | Arhitectura hardware a 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ă 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:** 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 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 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ș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 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):** 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. Astfel, putem 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 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). | + | * **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.// | ||