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 (care sunt limitate de latenta sistemului de operare).
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 care afiseaza statistici si un grafic de evolutie. Un display OLED I2C (SSD1306) ofera feedback local fara a fi nevoie de calculator.
Schema bloc a sistemului:
Fluxul de date pe scurt:
S (start) prin portul serial catre ATmega324P.| 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Ω | 1 | Limitare curent LED |
| Buzzer pasiv 5V | 1 | Stimul sonor de start, controlat prin PWM |
| Buton tactil 6×6mm | 1 | Input reactie utilizator |
| Display OLED I2C 0.96” SSD1306 | 1 | Afisare stare sistem si timp de reactie |
| Convertor USB-UART (CP2102/CH340) | 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Ω → 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 2× 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) |