This is an old revision of the document!
Autor: Enciu Cezar-Andrei, grupa 332CA
Asistent: Bianca Popa
Reflex Analyzer este un sistem embedded pentru masurarea precisa a timpului de reactie uman. Placa ATmega324P primeste o comanda de start dintr-o aplicatie desktop, genereaza un interval de asteptare pseudo-aleator intre 1 si 4 secunde, dupa care emite simultan un semnal sonor (buzzer) si unul luminos (LED). La apasarea butonului de catre utilizator, cronometrul hardware se opreste, iar rezultatul — exprimat in milisecunde — este trimis aplicatiei prin USART. Display-ul OLED I2C afiseaza starea sistemului in timp real. Aplicatia centralizeaza rezultatele si prezinta statistici: medie, minim, maxim si un grafic al evolutiei pe sesiune.
Crearea unui instrument simplu, precis si portabil care sa masoare obiectiv reflexele unui utilizator si sa permita urmarirea progresului in timp, cu o precizie superioara aplicatiilor software pure.
Microcontrollerul ATmega324P cronometreaza timpul de reactie folosind Timer1 pe 16 biti (rezolutie ~4μs), activat in momentul emiterii semnalului si oprit prin intreruperea externa INT0 la apasarea butonului. Rezultatul este trimis prin USART catre o aplicatie desktop Python + PyQt5. Un display OLED I2C (SSD1306) ofera feedback local.
Schema bloc a sistemului:
Fluxul de date pe scurt:
| Componenta | Cantitate | Rol |
|---|---|---|
| ATmega324P-PU (DIP-40) | 1 | Microcontroller principal |
| USBasp Programmer | 1 | Programare firmware prin ISP |
| Crystal 16MHz | 1 | Sursa de ceas externa |
| Condensator 22pF | 2 | Stabilizare crystal |
| Condensator 100nF | 1 | Decuplare alimentare |
| LED rosu 5mm | 1 | Stimul vizual de start |
| Rezistor 220 Ohm | 1 | Limitare curent LED |
| Buzzer pasiv 5V | 1 | Stimul sonor de start, controlat prin PWM |
| Buton tactil 6x6mm | 1 | Input reactie utilizator |
| Display OLED I2C 0.96” SSD1306 | 1 | Afisare stare sistem si timp de reactie |
| Convertor USB-UART CP2102 | 1 | Comunicare seriala cu PC |
| Breadboard + fire jumper | 1 set | Conectica si prototipare |
| Sursa alimentare 5V USB | 1 | Alimentare circuit |
| Pin ATmega324P | Componenta |
|---|---|
| PB0 | Anod LED rosu (prin 220 Ohm la GND) |
| PD5 / OC0B | Buzzer pasiv (semnal PWM) |
| PD2 / INT0 | Buton (pull-up intern, cealalta latura GND) |
| PC0 / SCL | SCL display OLED SSD1306 |
| PC1 / SDA | SDA display OLED SSD1306 |
| PD1 / TXD | TX convertor USB-UART |
| PD0 / RXD | RX convertor USB-UART |
| XTAL1 / XTAL2 | Crystal 16MHz (cu 2x 22pF la GND) |
| VCC / AVCC / GND | Alimentare 5V + 100nF decuplare |
| Librarie | Sursa | Rol |
|---|---|---|
| avr/io.h | avr-libc (built-in) | Acces la registrele I/O ale ATmega324P |
| avr/interrupt.h | avr-libc (built-in) | Gestionarea intreruperilor hardware |
| util/delay.h | avr-libc (built-in) | Delay-uri de initializare |
| Driver SSD1306 I2C | open-source adaptat | Initializare display si afisare text |
| Librarie | Rol |
|---|---|
| pyserial | Comunicare seriala cu microcontrollerul prin USB-UART |
| PyQt5 | Interfata grafica (ferestre, butoane, tabele) |
| matplotlib | Grafic evolutie timp de reactie pe sesiune |
| csv | Export rezultate in format CSV |
Sistemul functioneaza pe baza unui automat cu 5 stari. La primirea comenzii S pe USART, se genereaza un delay aleator (LFSR 1-4s). Dupa expirarea delay-ului, LED-ul si buzzer-ul sunt activate simultan, Timer1 porneste cronometrarea. Intreruperea externa INT0 (buton) opreste timer-ul si calculeaza timpul de reactie. Daca butonul e apasat inainte de semnal, se detecteaza false start.
Sistemul are 5 stari:
Interfata grafica ofera butoanele Start proba, Stop sesiune si Export CSV. Comunicarea seriala ruleaza pe un thread separat pentru a nu bloca UI-ul. La fiecare proba finalizata, aplicatia adauga rezultatul in tabel, actualizeaza statisticile (medie, minim, maxim) si graficul matplotlib.
| Data | Activitate |
|---|---|
| 2026-05-05 | Alegerea temei, documentare datasheet ATmega324P |
| 2026-05-07 | Achizitie componente |
| 2026-05-09 | Montaj breadboard, testare USART |
| 2026-05-11 | Implementare Timer1 + INT0, masurare timp de reactie |
| 2026-05-13 | Implementare PWM buzzer + LED, testare false start |
| 2026-05-15 | Implementare driver I2C + OLED SSD1306, integrare FSM |
| 2026-05-17 | Scriere aplicatie Python + PyQt5, grafic matplotlib |
| 2026-05-19 | Testare end-to-end, debugging |
| 2026-05-21 | Documentatie OCW, scheme bloc, poze montaj final |