Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:cezar_andrei.enciu [2026/05/09 14:13]
cezar_andrei.enciu
pm:prj2026:bianca.popa1106:cezar_andrei.enciu [2026/05/18 18:25] (current)
cezar_andrei.enciu
Line 8: Line 8:
 ==== Descriere generala ==== ==== Descriere generala ====
  
-Reflex Analyzer este un sistem embedded pentru masurarea precisa a timpului de reactie uman. Placa ATmega324P ​primeste ​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 (buzzersi 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 realAplicatia centralizeaza rezultatele si prezinta statistici: medieminimmaxim si un grafic al evolutiei ​pe sesiune.+Reflex Analyzer este un sistem embedded pentru masurarea precisa a timpului de reactie uman. Placa ESP32 DevKit V1 primeste comanda de start prin USB-Serial, genereaza un interval de asteptare pseudo-aleator intre 1 si 4 secunde, dupa care emite simultan un semnal sonor prin buzzer si un semnal ​luminos ​prin LED. La apasarea butonului de catre utilizator, cronometrul se opreste, iar rezultatul — exprimat in milisecunde — este afisat pe display-ul LCD 2004 I2C si transmis ​in Monitorul Serial. 
 + 
 +Sistemul functioneaza independentfara aplicatie desktop externafolosind doar firmware-ul incarcat ​pe ESP32 si componentele hardware conectate.
  
 ==== Scop ==== ==== Scop ====
  
-Crearea unui instrument simplu, precis si portabil care sa masoare obiectiv reflexele unui utilizator ​si sa permita urmarirea progresului in timpcu precizie superioara aplicatiilor software pure (care sunt limitate de latenta sistemului de operare).+Crearea unui instrument simplu, precis si portabil care sa masoare obiectiv reflexele unui utilizator, ​folosind componente hardware accesibile si implementare embedded bazata pe ESP32.
  
 ==== Ideea de baza ==== ==== Ideea de baza ====
  
-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 evolutieUn display ​**OLED I2C (SSD1306)** ofera feedback local fara a fi nevoie de calculator.+Microcontrollerul **ESP32 DevKit V1** cronometreaza timpul de reactie folosind ​functia ​**millis()** cu rezolutie ​de 1ms. Cronometrul porneste ​in momentul ​activarii ​semnalului ​luminos ​si sonor, iar oprirea se face prin intreruperea ​de pe **GPIO4**, declansata ​la apasarea butonului. 
 + 
 +Rezultatul este afisat local pe display-ul ​**LCD 2004 I2C (0x27)** si este transmis prin **USB-Serial (115200 baud)** pentru debugging ​si verificareBuzzer-ul pasiv este controlat prin modulul ​**LEDC (PWM hardware)** al ESP32.
  
 ==== Utilitate practica ==== ==== Utilitate practica ====
  
-  * **Sportivi** care vor sa isi masoare si imbunateasca ​reflexele in antrenament +  * **Sportivi** care vor sa isi masoare si imbunatateasca ​reflexele in antrenament 
-  * **Utilizatori generali** curiosi sa isi testeze timpul de reactie cu precizie reala, nu estimata de browser +  * **Utilizatori generali** curiosi sa isi testeze timpul de reactie cu precizie reala 
-  * **Demonstratii educationale** — proiectul ilustra ​concret ​cum functioneaza timerele hardwareintreruperile ​si comunicatia ​seriala+  * **Demonstratii educationale** — ilustreaza ​concret ​timere, intreruperi,​ PWMI2C si comunicatie ​seriala
  
 ==== De ce e util ==== ==== De ce e util ====
  
-  * Precizie hardware reala (~4μs rezolutievs. aplicatii web/mobile cu latenta de zeci de ms +  * Precizie hardware reala, cu rezolutie de 1ms folosind millis() 
-  * Detectie **false start** — apasare buton inainte de semnal, tratata ​si raportata ​separat +  * Detectie **false start** — apasare buton inainte de semnal, tratata separat 
-  * Delay **pseudo-aleator** ​(LFSR) — nu se poate anticipa momentul ​semnalului +  * Delay **pseudo-aleator** ​intre 1 si 4 secunde, pentru a evita anticiparea ​semnalului 
-  * **Display local** ​(OLED I2C) — feedback instant ​fara a privi spre ecranul PC-ului +  * **Display local LCD 2004 I2C** — afiseaza starea sistemului si rezultatul ​fara a depinde de o aplicatie externa 
-  * **Export CSV** din aplicatie pentru analiza ulterioara+  * Feedback dublu: semnal luminos prin LED si semnal sonor prin buzzer 
 +  ​Implementare clara folosind automat de stari, intreruperi si PWM hardware
  
 ===== Descriere generala ===== ===== Descriere generala =====
Line 36: Line 41:
 Schema bloc a sistemului: Schema bloc a sistemului:
  
-{{ :​pm:​prj2026:​bianca.popa1106:​schema_bloc_cezar.png?direct&700 |Schema bloc Reflex Analyzer}}+{{ :​pm:​prj2026:​bianca.popa1106:​schema_bloc_cezar_1.png?700 |Schema bloc Reflex Analyzer}}
  
-Fluxul de date pe scurt:+Fluxul de functionare ​pe scurt:
  
-  - Aplicatia desktop ​trimite comanda ​''​S''​ (start) ​prin portul serial ​catre ATmega324P+  - Utilizatorul ​trimite comanda ​START prin Monitorul Serial ​catre ESP32
-  - Microcontrollerul genereaza un delay aleator ​(1–4s) cu LFSR, dupa care activeaza LED-ul ​si buzzer-ul simultan+  - Microcontrollerul genereaza un delay aleator ​intre 1 si 4 secunde cu random()
-  - Display-ul ​OLED trece de la Gata..."​ la GO!" ​la momentul semnalului. +  - Display-ul ​LCD trece de la "​Asteptare"​ la "Gata..." ​si apoi la "GO!"
-  - Utilizatorul apasa butonul ​— intreruperea ​externa **INT0** opreste Timer1 si calculeaza diferenta ​de timp+  - La momentul semnalului, ESP32 activeaza simultan LED-ul si buzzer-ul
-  - Rezultatul ​in milisecunde ​este trimis prin USART aplicatiei si afisat pe OLED+  - Utilizatorul apasa butonul, iar intreruperea de pe GPIO4 opreste cronometrul
-  - Daca butonul ​apasat inainte de semnal, sistemul ​semnalizeaza **false start** si se reseteaza.+  - Timpul de reactie este calculat ​in milisecundeafisat pe LCD si trimis prin Serial
 +  - Daca butonul ​este apasat inainte de semnal, sistemul ​detecteaza ​false start, emite 3 beep-uri scurte ​si se reseteaza ​automat.
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 51: Line 57:
 ==== Lista de piese ==== ==== Lista de piese ====
  
-^ Componenta ​                       ^ Cantitate ^ Rol                                          +^ Componenta ^ Cantitate ^ Rol ^ 
-ATmega324P-PU ​(DIP-40           | 1         ​| Microcontroller principal ​                   | +ESP32 DevKit V1 (38 pini) | 1 | Microcontroller principal ​cu WiFi/BT integrat ​
-| USBasp Programmer ​                | 1         | Programare firmware prin ISP                 | +| LED rosu 5mm | 1 | Stimul vizual de start | 
-| Crystal 16MHz                     | 1         | Sursa de ceas externa ​                       | +| Rezistor 220 Ohm | 1 | Limitare curent LED | 
-| Condensator 22pF                  | 2         | Stabilizare crystal ​                         | +| Buzzer pasiv | 1 | Stimul sonor de start, controlat prin PWM (LEDC) ​
-| Condensator 100nF                 | 1         | Decuplare alimentare ​                        +| Buton tactil ​12x12mm ​| 1 | Input reactie utilizator | 
-| LED rosu 5mm                      | 1         ​| Stimul vizual de start                       ​+| Display ​LCD 2004 I2C | 1 | Afisare stare sistem si timp de reactie ​(20x4 caractere) ​
-| Rezistor 220Ω                     | 1         ​| Limitare curent LED                          +Breadboard 830 puncte ​| 1 | Prototipare circuit ​
-| Buzzer pasiv 5V                   | 1         ​| Stimul sonor de start, controlat prin PWM    +Fire jumper ​M-M | 1 set | Conexiuni intre componente ​
-| Buton tactil ​6×6mm ​               ​| 1         ​| Input reactie utilizator ​                    ​+Cablu micro-USB | 1 | Programare + alimentare ESP32 | 
-| Display ​OLED I2C 0.96" SSD1306 ​   ​| 1         ​| Afisare stare sistem si timp de reactie ​     + 
-Convertor USB-UART (CP2102/​CH340) ​| 1         ​Comunicare seriala cu PC                     +==== Schema electrica ==== 
-Breadboard + fire jumper ​         | 1 set     ​Conectica si prototipare ​                    + 
-Sursa alimentare 5V (USB)         | 1         ​Alimentare circuit ​                          |+{{ :​pm:​prj2026:​bianca.popa1106:​schema_electrica_czr.png?​700 ​|Schema electrica Reflex Analyzer}}
  
 ==== Schema de conexiuni ==== ==== Schema de conexiuni ====
  
-^ Pin ATmega324P ​   ​^ Componenta ​                             +^ Pin ESP32 ^ Componenta ^ 
-PB0               | Anod LED rosu (prin 220Ω → GND)         +GPIO5 | Anod LED rosuprin rezistor ​220 Ohm 
-PD5 / OC0B        ​| Buzzer pasiv (semnal PWM)               +GPIO18 ​| Buzzer pasiv + pin, semnal PWM prin LEDC 
-PD2 / INT0        ​| Buton (pull-up intern, cealalta latura GND+GPIO4 | Buton tactil, configurat INPUT_PULLUP, cealalta latura ​la GND | 
-PC0 / SCL         | SCL display OLED SSD1306 ​               | +GPIO21 ​/ SDA | SDA display ​LCD 2004 I2C 
-| PC1 / SDA         ​| SDA display ​OLED SSD1306 ​               ​+GPIO22 ​SCL SCL display LCD 2004 I2C 
-PD1 TXD         TX convertor USB-UART ​                  +VIN (5V) VCC display LCD 2004 I2C 
-PD0 / RXD         RX convertor USB-UART ​                  +GND | GND comun pentru LED, buzzer, buton si LCD 
-XTAL1 / XTAL2     Crystal 16MHz (cu 2× 22pF la GND)      ​+ 
-| VCC AVCC / GND  | Alimentare ​5V + 100nF decuplare ​        |+**Nota:** ESP32 lucreaza la 3.3V logic. LCD-ul este alimentat din VIN/5V, iar comunicatia I2C se face prin liniile SDA si SCL. Modulul I2C al LCD-ului foloseste de obicei adresa **0x27**, dar unele module pot folosi **0x3F**.
  
 ===== Software Design ===== ===== Software Design =====
Line 83: Line 89:
 ==== Mediu de dezvoltare ==== ==== Mediu de dezvoltare ====
  
-  * **avr-gcc + avrdude** — compilare si incarcare firmware in limbaj C +  * **Arduino IDE 2.x** cu suport ESP32 prin pachetul Espressif ESP32 
-  * **VS Code** — editare ​cod firmware +  * **VS Code + PlatformIO** — alternativa pentru ​editare ​si incarcare ​firmware 
-  * **Python 3.11 + PyQt5** — aplicatie desktop +  * **Monitor Serial ​(115200 baud)** — trimitere comenzi si verificare mesaje de stare
-  * **Monitor Serial** — debugging USART in timp real+
  
 ==== Librarii folosite ==== ==== Librarii folosite ====
  
-=== Firmware (C / avr-gcc) === +^ Librarie ^ Sursa ^ Rol ^ 
- +Wire.h | Arduino ​built-in | Comunicare I2C intre ESP32 si LCD 
-^ Librarie ​             ^ Sursa              ^ Rol                                        +LiquidCrystal_I2C ​Library Manager ​Control display LCD 2004 I2C 
-''​avr/​io.h'' ​         ​avr-libc (built-in)Acces la registrele I/O ale ATmega324P ​    +Arduino ESP32 LEDC ESP32 built-in | Generare PWM hardware pentru buzzer ​
-''​avr/​interrupt.h'' ​  avr-libc (built-in)Gestionarea intreruperilor hardware ​       ​+attachInterrupt() | Arduino built-in Intrerupere ​pe GPIO4 pentru detectarea apasarii butonului ​|
-''​util/​delay.h'' ​     ​avr-libc (built-in)Delay-uri de initializare ​                 ​+
-Driver SSD1306 I2C    | open-source adaptat| Initializare display si afisare text       | +
- +
-=== Aplicatie Desktop ​(Python=== +
- +
-^ 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                            ​|+
  
 ==== Algoritm de functionare ==== ==== Algoritm de functionare ====
  
-<code c> +Programul ruleaza pe ESP32 si este organizat sub forma unui automat finit de stari. Sistemul porneste in starea **IDLE**, unde asteapta comanda START primita prin USB-SerialDupa primirea comenzii, intra in starea **WAITING**,​ unde genereaza un delay pseudo-aleator intre 1 si 4 secundeIn aceasta perioada, daca utilizatorul apasa butonul, sistemul detecteaza un **false start**.
-setup(): +
-    initializeaza USART (9600 baud) +
-    initializeaza I2C + display OLED SSD1306 +
-    configureaza PB0 ca OUTPUT (LED) +
-    configureaza PD5 ca OUTPUT (buzzer PWM) +
-    configureaza PD2 ca INPUT cu pull-up intern (buton) +
-    activeaza intreruperea externa INT0 (front descrescator) +
-    activeaza intreruperile globale (sei) +
-    oled_print("​Asteptare...")+
  
-loop()+Dupa expirarea delay-ului, sistemul intra in starea **SIGNAL**, activeaza LED-ul si buzzer-ul si salveaza momentul de start folosind functia **millis()**. Cand utilizatorul apasa butonul, intreruperea ​pe GPIO4 seteaza un flagiar in loop() se calculeaza timpul de reactie ca diferenta dintre momentul apasarii si momentul semnalului.
-    daca s-a primit '​S' ​pe USART: +
-        fsm_state = WAITING +
-        delay_ms = lfsr_rand(10004000) +
-        timer1_start() +
-        oled_print("​Gata...")+
  
-    daca fsm_state == WAITING ​si timer1_get_ms() ​>= delay_ms: +Rezultatul este afisat pe LCD 2004 I2C si transmis prin Serial sub forma `RESULT:<​ms>`. Dupa cateva secundesistemul revine automat in starea IDLE.
-        led_on() +
-        pwm_buzzer_beep(1000,​ 200)    // ton 1kHz200ms +
-        oled_print("​GO!"​) +
-        timer1_restart() ​             // restart pentru masurare reactie +
-        fsm_state = SIGNAL+
  
-    daca fsm_state ​== RESULT: +==== Automat de stari ====
-        usart_send_int(reaction_time_ms) +
-        oled_print_time(reaction_time_ms) +
-        fsm_state ​IDLE+
  
-    daca fsm_state == FALSE_START: +{{ :pm:​prj2026:​bianca.popa1106:​fsm.png?​700 |Automat de stari}}
-        pwm_buzzer_beep(400,​ 100)     // ton eroare +
-        pwm_buzzer_beep(400,​ 100) +
-        oled_print("​False start!"​) +
-        usart_send_char('​F'​) +
-        fsm_state = IDLE+
  
-ISR(INT0_vect): +Sistemul are 5 stari:
-    daca fsm_state == SIGNAL: +
-        reaction_time_ms = timer1_get_ms() +
-        led_off() +
-        fsm_state = RESULT +
-    daca fsm_state == WAITING: +
-        led_off() +
-        fsm_state = FALSE_START +
-</​code>​+
  
-==== Automat ​de stari ====+  * **IDLE** — asteapta comanda START prin Serial; LCD afiseaza mesajul ​de asteptare 
 +  * **WAITING** — genereaza delay aleator 1-4s; LCD afiseaza "​Gata..."​ si "Nu apasa inca!"​ 
 +  * **SIGNAL** — activeaza LED-ul si buzzer-ul; LCD afiseaza "​GO!"​ 
 +  * **RESULT** — calculeaza timpul de reactie, il afiseaza pe LCD si il trimite prin Serial 
 +  * **FALSE_START** — detecteaza apasarea prea devreme a butonului, emite 3 beep-uri si afiseaza mesaj de eroare
  
-{{ :​pm:​prj2026:​bianca.popa1106:​fsm.png?​direct&​700 |Automat de stari Reflex Analyzer}}+==== Comenzi Serial ====
  
-Sistemul are **5 stari**: +^ Comanda ^ Directie ^ Efect ^ 
- +| START | Utilizator -> ESP32 | Porneste o runda noua | 
-  * **IDLE** — asteapta comanda ''​S''​ de la aplicatie prin USART +| RESET | Utilizator -> ESP32 | Reseteaza sistemul in starea ​IDLE | 
-  * **WAITING** — genereaza delay aleator cu LFSR, Timer1 numara; INT0 activ (detectie false start) +RESULT:<ms> | ESP32 -> Serial Monitor | Trimite ​timpul ​de reactie in milisecunde | 
-  * **SIGNAL** — emite LED + buzzer, Timer1 restartat pentru masurare; asteapta apasare buton (INT0) +FALSE_START ​| ESP32 -> Serial Monitor | Semnaleaza apasarea butonului ​inainte de semnal ​
-  * **RESULT** — calculeaza si trimite ​timpul ​prin USART, afiseaza pe OLED +| STATE:<​stare>​ | ESP32 -> Serial Monitor | Afiseaza starea curenta a sistemului |
-  * **FALSE_START** — buton apasat ​inainte de semnal; avertisment sonor + USART + revenire la IDLE+
  
 ==== Surse si functii principale ==== ==== Surse si functii principale ====
  
-  * ''​usart_init(uint16_t ubrr)'' ​— configurare registre UBRRactivare TX/RX +  * **setup()** — initializeaza Serialpini, LED, buzzer, I2C, LCD si intreruperea pe buton 
-  * ''​usart_send_int(uint16_t val)'' ​— trimite numarul ca sir de caractere prin USART +  * **loop()** — citeste comenzile Serial si gestioneaza tranzitiile automatului ​de stari 
-  * ''​timer1_start()''​ / ''​timer1_restart()''​ / ''​timer1_get_ms()'' ​— control cronometru hardware +  * **showIdle()** — trece sistemul in starea IDLE si afiseaza mesajul initial pe LCD 
-  * ''​pwm_buzzer_beep(uint16_t hz, uint16_t ​ms)'' ​— ton PWM pe buzzer la frecventa data +  * **startWaiting()** — genereaza delay-ul aleator si pregateste sistemul pentru semnal 
-  * ''​i2c_init()''​ / ''​oled_clear()''​ / ''​oled_print(const char *text)'' ​— driver display I2C +  * **startSignal()** — activeaza LED-ul si buzzer-ul si porneste cronometrul 
-  * ''​lfsr_rand(uint16_t min, uint16_t max)'' ​— generator pseudo-aleator pe 16 biti +  * **showResult(ms)** — afiseaza timpul de reactie ​pe LCD si il trimite prin Serial 
-  * ''​ISR(INT0_vect)'' ​— intrerupere ​buton: oprire timer (RESULT) sau false start (FALSE_START)+  * **goFalseStart()*— trateaza cazul in care butonul este apasat prea devreme 
 +  * **onButtonPress()** — rutina de intrerupere pentru buton, cu debounce software de 50ms 
 +  * **resetToIdle()** — reseteaza sistemul la starea initiala 
 + 
 +==== Detalii de implementare ==== 
 + 
 +Butonul este conectat pe **GPIO4** si este configurat cu **INPUT_PULLUP**,​ astfel incat pinul este in stare HIGH in repaus si trece in LOW cand butonul este apasat. Detectia se face prin intrerupere ​pe front descrescator,​ folosind `attachInterrupt(digitalPinToInterrupt(PIN_BUTTON),​ onButtonPress,​ FALLING)`.
  
-==== Aplicatie Desktop ​(Python + PyQt5====+Pentru evitarea citirilor multiple cauzate de zgomotul mecanic al butonului, in rutina de intrerupere se foloseste un debounce software de 50ms. Variabila `buttonPressed` este declarata `volatile`, deoarece este modificata in ISR si citita in functia `loop()`.
  
-Interfata grafica ofera butoanele ​**Start proba**, **Stop sesiune** si **Export CSV**. Comunicarea seriala ruleaza pe un thread separat (''​QThread''​) ​pentru ​a nu bloca UI-ul. La fiecare proba finalizataaplicatia:+Buzzer-ul pasiv este controlat cu PWM hardware prin modulul ​**LEDC** al ESP32. Pentru semnalul de start se foloseste o frecventa de 1000Hziar pentru ​false start se emit 3 beep-uri scurte la 300Hz. La finalizarea unei probe validesistemul emite un beep scurt la 1500Hz.
  
-  ​Citeste rezultatul de pe portul serial (''​pyserial''​) +Display-ul LCD 2004 I2C este controlat prin magistrala I2C folosind pinii **GPIO21** pentru SDA si **GPIO22** pentru SCL. Pe LCD sunt afisate mesajele corespunzatoare fiecarei stari: asteptarepregatiresemnal, rezultat ​si false start.
-  - Il adauga in tabelul sesiunii +
-  - Actualizeaza statisticile (medieminimmaxim) in timp real +
-  - Actualizeaza graficul ''​matplotlib''​ integrat in fereastra PyQt5 +
-  - Detecteaza ​si marcheaza probele de tip false start (codul ''​F''​)+
  
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
  
-  * Sistem functional end-to-end: buton → ATmega324P → USART → aplicatie desktop +  * Sistem functional end-to-end: buton -> ESP32 -> LCD 2004 I2C / Serial Monitor 
-  * Precizie masurare timp de reactie: **±4μs** ​(limitata de rezolutia Timer1 la 16MHz/64) +  * Masurare a timpului ​de reactie ​cu rezolutie de 1 milisecunda folosind millis() 
-  * Latenta USART sub **5ms** intre apasare buton si afisarea rezultatului in aplicatie +  * Detectie false start functionala ​prin intreruperea de pe GPIO4 
-  * Detectie false start functionala ​in toate scenariile testate +  * Feedback vizual prin LED si feedback sonor prin buzzer pasiv controlat PWM 
-  * Display ​OLED afiseaza ​stari stabil, fara artefacte vizuale +  * Display-ul LCD 2004 I2C afiseaza ​starile sistemului si rezultatul final pe 4 randuri 
-  * Aplicatie Python stabila pe sesiuni de peste 50 de probe consecutive+  * Reset automat dupa afisarea rezultatului sau dupa detectarea unui false start
  
 ===== Concluzii ===== ===== Concluzii =====
  
-  * Utilizarea ​**Timer1 ​pe 16 biti** cu prescaler 1/64 ofera o rezolutie de ~4μs — suficienta pentru masurarea timpului de reactie uman (tipic 150–300ms),​ cu o eroare relativa sub 0.003%+  * Utilizarea ​functiei millis() ​pe ESP32 ofera o rezolutie de 1ms, suficienta pentru masurarea timpului de reactie uman. 
-  * Arhitectura ​**FSM (automat de stari)** s-a dovedit ​esentiala — o implementare liniara cu ''​delay()''​ ar fi ratat evenimentele de intrerupere sau ar fi blocat comunicatia USART+  * Arhitectura FSM (automat de stari) s-a dovedit ​utila pentru separarea clara a etapelor: asteptare, semnal, rezultat si false start
-  * Generatorul **LFSR** este simplu ​de implementat in C pur fara librarii externe ​si produce o distributie uniform imprevizibila a delay-ului de start+  * ISR-ul pe GPIO4 cu debounce software ​de 50ms permite detectarea rapida a apasarii butonului ​si reduce efectul zgomotului mecanic
-  ​* **Display-ul ​OLED I2C** cu doar 4 fire (VCCGND, SDA, SCL) este net superior oricarei solutii cu LCD paralel+  * Display-ul ​LCD 2004 I2C permite afisarea locala a starilor si rezultatuluifara a depinde de o aplicatie externa
-  * **Provocarea principala** a fost sincronizarea corecta intre ISR si FSM — variabilele partajate intre main loop si ISR necesita declarare ''​volatile''​ si dezactivarea temporara a intreruperilor la citire.+  * PWM-ul hardware LEDC al ESP32 permite controlul buzzer-ului fara a bloca permanent executia programului. 
 +  ​* Provocarea principala a fost sincronizarea corecta intre intreruperea butonului ​si logica principala din loop(), prin folosirea variabilelor ​volatile.
  
 ===== Jurnal ===== ===== Jurnal =====
  
-^ Data       ​^ Activitate ​                                                                     +^ Data ^ Activitate ^ 
-| 2026-05-05 | Alegerea temei, documentare ​datasheet ATmega324P (Timer1, INT0, TWI, USART) ​   ​+| 2026-05-05 | Alegerea temei, documentare ​ESP32 DevKit V1 
-| 2026-05-07 | Achizitie componente ​(ATmega324P,​ USBasp, OLED, buzzer, buton, LED)            ​+| 2026-05-07 | Achizitie componente | 
-| 2026-05-09 | Montaj breadboard, testare ​USART (trimitere/​primire caractere pe Serial ​Monitor) ​+| 2026-05-09 | Montaj breadboard, testare Serial | 
-| 2026-05-11 | Implementare ​Timer1 + INT0, masurare timp de reactie, testare precizie ​          +| 2026-05-11 | Implementare ​FSM, masurare timp de reactie ​cu millis() ​
-| 2026-05-13 | Implementare PWM buzzer + LED, generare delay LFSR, testare false start           ​+| 2026-05-13 | Implementare PWM buzzer ​(LEDC) ​+ LED, testare false start | 
-| 2026-05-15 | Implementare driver I2C + OLED SSD1306, integrare FSM complet ​                  ​+| 2026-05-15 | Implementare driver ​LCD 2004 I2C, integrare FSM complet | 
-| 2026-05-17 | Scriere aplicatie Python + PyQt5, grafic matplotlib, export CSV                  ​+| 2026-05-17 | Testare comenzi Serial START/RESET si afisare rezultat pe LCD 
-| 2026-05-19 | Testare end-to-end, ​debuggingcalibrare parametri ​                              +| 2026-05-19 | Testare end-to-end: LEDbuzzerbuton, LCD si Serial Monitor ​
-| 2026-05-21 | Documentatie OCW, scheme ​bloc, poze montaj final                                 ​|+| 2026-05-21 | Documentatie OCW, scheme, poze montaj final |
  
 ===== Bibliografie / Resurse ===== ===== Bibliografie / Resurse =====
  
-  - [[https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega324P.pdf|Datasheet ATmega324P — Microchip]] +  - [[https://docs.espressif.com/projects/​esp-idf/en/latest/​esp32/|ESP32 Technical Reference Manual]] 
-  - [[https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf|Datasheet SSD1306 OLED Controller — Solomon Systech]] +  - [[https://github.com/espressif/arduino-esp32|Arduino ESP32 GitHub]] 
-  ​[[https://​pyserial.readthedocs.io|pyserial — documentatie oficiala]] +  - [[https://github.com/johnrickman/LiquidCrystal_I2C|LiquidCrystal_I2C librarie]] 
-  - [[https://www.riverbankcomputing.com/software/​pyqt/|PyQt5 — documentatie oficiala]] +  - Cursurile PM Lab 1 USART, Lab 2 Intreruperi Timere, Lab 3 PWM, Lab 6 I2C
-  - [[https://​en.wikipedia.org/​wiki/​Linear-feedback_shift_register|Linear-feedback shift register — Wikipedia]] +
-  - Cursurile PM — Lab 1 (USART), Lab 2 (Intreruperi ​Timere), Lab 3 (PWM), Lab 6 (I2C)+
pm/prj2026/bianca.popa1106/cezar_andrei.enciu.1778325182.txt.gz · Last modified: 2026/05/09 14:13 by cezar_andrei.enciu
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