Differences

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

Link to this comparison view

pm:prj2026:alexandru.jipa2803:andreea.voinea1305 [2026/05/24 04:01]
andreea.voinea1305
pm:prj2026:alexandru.jipa2803:andreea.voinea1305 [2026/05/25 10:48] (current)
andreea.voinea1305
Line 36: Line 36:
   * Fire jumper tata-tata si tata-mama   * Fire jumper tata-tata si tata-mama
  
-{{:​pm:​prj2026:​alexandru.jipa2803:​project.jpeg?​800|}}+{{:​pm:​prj2026:​alexandru.jipa2803:​project.jpeg?​600|}} 
 +{{:​pm:​prj2026:​alexandru.jipa2803:​pm1.jpeg?​600|}} 
 +{{:​pm:​prj2026:​alexandru.jipa2803:​macheta1.jpeg?​600|}} 
 +{{:​pm:​prj2026:​alexandru.jipa2803:​macheta2.jpeg?​600|}} 
 +{{:​pm:​prj2026:​alexandru.jipa2803:​inside.jpeg?​600|}} 
  
 ==== Conexiuni ==== ==== Conexiuni ====
Line 103: Line 108:
 ==== Calcule consum ==== ==== Calcule consum ====
  
-Pentru LED-urile RGB se foloseste cate o rezistenta pentru fiecare pin de culoare. ​Curentul depinde ​de valoarea rezistentei folosite.+Pentru LED-urile RGB se foloseste cate o rezistenta ​de limitare a curentului ​pentru fiecare pin de culoare ​folositIn proiect sunt utilizate doua canale ​de culoare: rosu si verde. LED-urile sunt de tip anod comun, deci pinul comun este conectat la +5V, iar fiecare canal este comandat spre GND printr-un tranzistor BD139.
  
-Pentru ​o rezistenta ​de 220 ohm, curentul ​aproximativ ​printr-un LED rosu este:+Pentru ​canalul rosu s-au folosit rezistente ​de 1K ohm. Considerand o cadere de tensiune aproximativa de 2V pe LED-ul rosu, curentul printr-un LED este:
  
-  I = (5V - 2V) / 220 ohm +  I = (5V - 2V) / 1000 ohm 
-  I = 3V / 220 ohm +  I = 3V / 1000 ohm 
-  I = 13.6mA+  I = 3mA
  
-Pentru 11 LED-uri aprinse ​pe acelasi canal:+Pentru 11 LED-uri ​rosii aprinse ​simultan:
  
-  11 x 13.6mA ​149.6mA+  ​I_total_rosu = 11 x 3mA 
 +  I_total_rosu ​33mA
  
-Deci un canal LED cu rezistente de 220 ohm consuma aproximativ ​150mA.+Deci canalul rosu consuma aproximativ ​33mA.
  
-Pentru ​o rezistenta ​de 1K ohm, curentul ​aproximativ ​printr-un LED rosu este:+Pentru ​canalul verde s-au folosit rezistente ​de 220 ohm. Considerand o cadere de tensiune aproximativa de 3.0V pe LED-ul verde, curentul printr-un LED este:
  
-  I = (5V - 2V) / 1000 ohm +  I = (5V - 3V) / 220 ohm 
-  I = 3V 1000 ohm +  I = 2V 220 ohm 
-  I = 3mA+  I = 9.1mA 
 + 
 +Pentru 11 LED-uri verzi aprinse simultan: 
 + 
 +  I_total_verde = 11 x 9.1mA 
 +  I_total_verde = 100.1mA
  
-Pentru 11 LED-uri aprinse pe acelasi canal:+Deci canalul verde consuma aproximativ 100mA.
  
-  11 x 3mA = 33mA+In proiect, LED-urile rosii si verzi nu sunt folosite permanent la intensitate maxima in acelasi timp. Canalul rosu pulseaza scurt la fiecare bataie detectata/​simulata,​ iar canalul verde se aprinde la final daca BPM-ul este in intervalul normal.
  
 Estimare consum total, cu un canal LED activ: Estimare consum total, cu un canal LED activ:
  
-  * LED-uri, 11 bucati, ​canal cu 220 ohm: aproximativ ​150mA+  * LED-uri ​rosii, 11 bucati, cu rezistente de 1K ohm: aproximativ 33mA 
 +  * LED-uri verzi, 11 bucati, cu rezistente de 220 ohm: aproximativ ​100mA
   * OLED SSD1306: aproximativ 20mA   * OLED SSD1306: aproximativ 20mA
-  * Senzor puls: aproximativ 4mA +  * Senzor puls HW-827: aproximativ 4mA 
-  * Buzzer: aproximativ 30mA+  * Buzzer ​pasiv: aproximativ 30mA
   * ATmega328P: aproximativ 20mA   * ATmega328P: aproximativ 20mA
-  * Total maxim estimat: aproximativ 224mA 
  
-Alimentarea prin USB 5V / 500mA este suficienta pentru aceasta configuratie,​ mai ales deoarece proiectul nu aprinde toate cele trei culori la intensitate maxima in acelasi timp.+Caz estimat cu rosu activ:
  
 +  33mA + 20mA + 4mA + 30mA + 20mA = 107mA
  
-===== Software Design =====+Caz estimat cu verde activ:
  
-Firmware-ul proiectului implementeaza functiile principale necesare pentru functionarea inimii interactive:​+  100mA + 20mA + 4mA + 20mA = 144mA
  
-  * citirea semnalului analogic de la senzorul de puls prin ADC0; +Daca s-ar aprinde simultan rosu si verde, consumul LED-urilor ar fi: 
-  * filtrarea software a semnalului pentru reducerea zgomotului; + 
-  ​* detectarea varfurilor semnalului asociate batailor inimii; +  ​33mA + 100mA = 133mA 
-  * numararea batailor detectate intr-o fereastra de 60 de secunde; + 
-  * afisarea pe display-ul OLED a timpului ramas si a numarului de batai detectate; +Iar consumul total ar fi aproximativ:​ 
-  * semnalizarea fiecarei batai prin aprinderea scurta a LED-urilor rosii si activarea buzzerului; + 
-  ​* afisarea rezultatului final si semnalizarea ​prin LED-uri: verde pentru ​BPM normal, rosu pentru ​BPM in afara intervalului.+  ​133mA + 20mA + 4mA + 30mA + 20mA = 207mA 
 + 
 +Alimentarea ​prin USB 5V / 500mA este suficienta ​pentru ​aceasta configuratie. In plusin functionarea normala, canalul ​rosu pulseaza doar pentru ​perioade scurte, iar canalul verde este folosit ca stare finala, deci sistemul nu functioneaza constant la consumul maxim estimat. 
 + 
 + 
 +===== Software Design =====
  
-Programul ​este organizat pe stari, pentru ​ca fiecare etapa functionarii sa fie separata clar:+Partea software a proiectului ​este implementata in limbaj C pentru microcontrollerul ATmega328P Xplained Minifara utilizarea framework-ului Arduino. Programul foloseste direct registrele microcontrollerului ​pentru ​configurarea pinilor GPIO, a convertorului analog-digital,​ a comunicatiei I2C/TWI si temporizarii prin Timer0.
  
-  * IDLE - sistemul ​este opritdisplay-ul afiseaza OFF, iar LED-urile si buzzerul ​sunt oprite; +Implementarea ​este organizata pe staripentru ca fiecare etapa a functionarii sa fie separata clar. Starile folosite ​sunt:
-  * WAIT_FINGER - sistemul asteapta stabilizarea semnalului de la senzor dupa apasarea butonului;​ +
-  * MEASURING - sistemul numara bataile detectate timp de 60 de secunde; +
-  * RESULT - sistemul afiseaza BPM-ul final si aprinde verde sau rosu in functie de rezultat.+
  
-Masurarea ​este pornita de la buton. Dupa pornireutilizatorul tine senzorul intre degete, iar programul incepe masurarea dupa ce semnalul citit devine suficient ​de stabil. In timpul ​masurarii, la fiecare bataie detectata, LED-urile ​rosii pulseaza si buzzerul ​reda un sunet scurt. Numarul afisat pe OLED creste ​sincronizat ​cu aceste impulsuri.+  * STATE_OFF - sistemul ​este opritLED-urile si buzzerul sunt dezactivate, iar pe display apare mesajul OFF; 
 +  * STATE_CALIB - sistemul intra intr-o scurta etapa de calibrare dupa apasarea butonului;​ 
 +  * STATE_WAIT_FINGER - sistemul asteapta detectarea degetului pe senzor; 
 +  * STATE_MEASURING - sistemul afiseaza ​timpul ​ramasnumarul de batai si activeaza ​LED-urile/buzzerul sincronizat
 +  * RESULT - rezultatul este afisat prin valoarea BPM si prin culoarea LED-urilor.
  
-==== Module software implementate ​====+==== Initializarea sistemului ​====
  
-Codul este impartit logic in mai multe module functionale:​+La pornire, programul initializeaza toate modulele necesare: 
 +  * pinii pentru LED-urile rosii si verzi sunt configurati ca iesiri; 
 +  * pinul pentru buzzer ​este configurat ca iesire; 
 +  * pinul butonului este configurat ca intrare cu rezistenta pull-up interna; 
 +  * ADC-ul este initializat pentru citirea semnalului analogic de la senzorul de puls conectat pe ADC0 / PC0; 
 +  * interfata TWI/I2C este initializata pentru comunicatia cu display-ul OLED SSD1306; 
 +  * Timer0 este configurat ​in mod CTC pentru a genera un contor de timp in milisecunde.
  
-  * modul GPIO - configureaza si controleaza pinii pentru ​LED-uri, buzzer si buton; +Timer0 este folosit ​pentru ​functia ​de timp de tip millis(), care permite masurarea duratelor fara depinde doar de delay-uri software.
-  * modul ADC - citeste semnalul analogic ​de la senzorul ​de puls conectat pe ADC0; +
-  * modul TWI/I2C - transmite comenzi si date catre display-ul OLED SSD1306; +
-  * modul OLED - initializeaza display-ul si afiseaza mesajele proiectului;​ +
-  * modul de detectie ​pulsului - filtreaza semnalul si detecteaza varfurile relevante;​ +
-  * modul de stare controleaza tranzitia intre IDLE, WAIT_FINGER,​ MEASURING si RESULT.+
  
 ==== Citirea senzorului de puls ==== ==== Citirea senzorului de puls ====
  
-Senzorul ​de puls este conectat la pinul PC0 / ADC0. Semnalul ​oferit ​de senzor este analogic, deci este citit folosind ​convertorul analog-digital al microcontrollerului ​ATmega328P.+Senzorul ​HW-827 ​este conectat la ADC0 / PC0. Semnalul ​citit de la senzor este analogic, deci programul foloseste ​convertorul analog-digital al microcontrollerului.
  
-Initializarea ADC-ului foloseste AVCC ca tensiune de referinta si un prescaler potrivit pentru o citire stabila. La fiecare esantionare,​ programul ​selecteaza canalul ​ADC0, porneste conversia si asteapta finalizarea acesteia. Valoarea rezultata este un numar intre 0 si 1023.+Functia adc_read() ​selecteaza canalul ​ADC dorit, porneste conversia si asteapta finalizarea acesteia. Valoarea rezultata este intre 0 si 1023.
  
-Semnalul senzorului ​fost testat separat in Serial MonitorAu fost verificate mai multe situatii:+Pentru ​evita valori complet eronate, citirea senzorului nu se face dintr-o singura proba, ci prin functia citeste_filtrat(). Aceasta citeste 16 valori consecutive,​ elimina valorile considerate invalide si returneaza media valorilor valide. Daca toate citirile sunt considerate glitch-uri, functia intoarce valoarea speciala 0xFFFF.
  
-  * A0 conectat direct ​la GND - valorile au fost apropiate de 0confirmand ca ADC-ul citeste corect masa; +Aceasta filtrare este necesara deoarece senzorul este sensibil ​la lumina ambientala, la pozitia degetului si la miscarea firelor.
-  * A0 conectat direct ​la 5V - valorile au fost apropiate de 1023, confirmand ca ADC-ul citeste corect alimentarea;​ +
-  * senzor conectat fara deget - valorile au fost instabile daca senzorul era expus la lumina; +
-  * senzor acoperit sau tinut intre degete - semnalul a devenit mai stabil si a putut fi folosit pentru detectie.+
  
-Aceasta testare a aratat ca pozitia ​degetului ​si lumina ambientala influenteaza mult semnalul senzorului.+==== Detectarea prezentei ​degetului ​====
  
-==== Filtrarea semnalului ====+In varianta finala a codului, senzorul este folosit in principal pentru detectarea prezentei degetului. Programul foloseste doua praguri cu histerezis:
  
-Semnalul analogic primit de la senzor ​poate avea zgomot si variatii false. Din acest motivprogramul foloseste doua valori filtrate:+  * PRAG_DEGET_SUS - daca valoarea filtrata trece peste acest prag, sistemul considera ca degetul a fost pus pe senzor
 +  * PRAG_DEGET_JOS - daca valoarea scade sub acest pragsistemul considera ca degetul a fost ridicat.
  
-  * avgValue - o medie rapida, care urmareste mai repede schimbarile semnalului;​ +Folosirea a doua praguri diferite evita trecerile rapide intre starile „deget pus” si „deget luat” atunci cand semnalul oscileaza in jurul unei singure valori.
-  * avgSlow - o medie lenta, care reprezinta nivelul de baza al semnalului.+
  
-Media rapida este calculata astfel incat sa urmareasca varfurile semnaluluiiar media lenta se modifica mai greuoferind un baselineO bataie este considerata valida atunci cand semnalul rapid trece printr-un varf si este suficient de mult peste media lenta.+Dupa apasarea butonuluisistemul intra in starea CALIBapoi in STATE_WAIT_FINGERIn aceasta stare, display-ul afiseaza mesajul FINGER ​si sistemul asteapta ca senzorul sa indice prezenta degetului. Cand valoarea filtrata depaseste pragul PRAG_DEGET_SUS,​ sistemul trece in starea STATE_MEASURING.
  
-Aceasta metoda reduce detectiile false, deoarece nu se foloseste o valoare absoluta fixa, ci o diferenta fata de nivelul de baza al semnalului.+==== Generarea batailor si calculul BPM ====
  
-==== Detectarea batailor ====+Din cauza instabilitatii semnalului analogic al senzorului, varianta finala foloseste senzorul pentru detectarea degetului, iar bataile sunt generate software pe baza unei valori BPM alese pseudo-aleator.
  
-Pentru detectarea unei batai, programul ​verifica trei conditii:+La momentul detectarii degetului, programul ​alege o valoare BPM intre BPM_MIN si BPM_MAX. Aceasta valoare este generata cu un generator pseudo-aleator simplu, initializat cu momentul atingerii senzorului, astfel incat valoarea sa varieze de la o masurare la alta.
  
-  * semnalul filtrat a fost in crestere si apoi incepe sa scada, ceea ce indica un varf; +Formula folosita pentru intervalul dintre doua batai este:
-  * valoarea filtrata ​este mai mare decat media lenta cu cel putin PEAK_DELTA;​ +
-  * a trecut un timp minim de la ultima bataie detectata, definit prin REFRACTORY_MS.+
  
-Timpul minim dintre doua batai este necesar pentru a evita numararea aceleiasi batai de mai multe ori. De exemplu, daca REFRACTORY_MS este 600 ms, programul nu poate detecta doua batai la un interval ​mai mic de 600 ms. Acest lucru elimina o parte din zgomot si valorile imposibile.+  ​interval ​= 60000 / BPM
  
-La fiecare bataie detectata:+unde intervalul este exprimat in milisecunde.
  
-  ​* contorul de batai este incrementat;+In timpul starii MEASURING, programul verifica permanent daca a trecut intervalul corespunzator BPM-ului ales. Cand intervalul a trecut: 
 +  ​* contorul de batai creste;
   * LED-urile rosii se aprind scurt;   * LED-urile rosii se aprind scurt;
-  * buzzerul reda un sunet scurt;+  * buzzerul reda sunetul de tip lub-dub;
   * display-ul actualizeaza numarul de batai afisat.   * display-ul actualizeaza numarul de batai afisat.
  
-==== Calculul ​BPM ====+Astfel, valoarea afisata la BPM creste sincronizat cu sunetul buzzerului si cu pulsatia LED-urilor rosii.
  
-Masurarea ​se face pe o durata de 60 de secunde. In aceasta perioada, programul numara cate batai au fost detectate. Deoarece fereastra de masurare este exact de un minut, BPM-ul final este egal cu numarul de batai detectate:+==== Masurarea ​timpului ====
  
-  BPM = numar_batai_detectate_in_60_secunde+Durata unei sesiuni este de 60 de secunde, definita prin constanta MEASURE_SECONDS. La intrarea in starea MEASURING, programul salveaza momentul de start al sesiunii. Apoi calculeaza timpul scurs folosind functia millis().
  
-Pe display, in timpul masurarii, este afisat ​timpul ramas si numarul curent de bataiLa final, sistemul compara BPM-ul cu intervalul normal ales pentru proiect:+Display-ul afiseaza ​timpul ramas pana la finalul masurarii. Cronometrul se actualizeaza o data pe secunda.
  
-  ​daca BPM este intre 60 si 100, sistemul afiseaza OK si aprinde LED-urile verzi+Pe ecran sunt afisate: 
-  * daca BPM este sub 60, sistemul afiseaza LOW si aprinde LED-urile rosii+  ​TIME timpul ramas din sesiunea de masurare
-  * daca BPM este peste 100, sistemul afiseaza ​HIGH si aprinde LED-urile rosii.+  * BPM - numarul curent de batai generate pana in acel moment
 +  * o inima langa valoarea ​BPM
 + 
 +La finalul celor 60 de secunde, sistemul ​opreste masurarea si afiseaza ​rezultatul final.
  
 ==== Afisarea pe OLED ==== ==== Afisarea pe OLED ====
  
-Display-ul OLED SSD1306 este controlat prin interfata ​I2C/TWI, folosind pinii PC4 pentru SDA si PC5 pentru SCL. Codul nu foloseste ​biblioteci externe pentru ​OLED, ci trimite direct ​comenzi ​si date catre display.+Display-ul OLED SSD1306 este controlat prin protocolul ​I2C/TWI, folosind pinii PC4 pentru SDA si PC5 pentru SCL. In implementare ​nu sunt folosite ​biblioteci externe pentru ​display. Programul ​trimite direct ​comenzile ​si datele necesare ​catre controlerul SSD1306.
  
-Pentru afisare ​a fost implementat un font minimal 5x7, suficient pentru ​caracterele folosite in proiect. Pentru a face textul mai vizibilunele caractere sunt afisate marit prin dublarea pixelilor.+Pentru afisare ​este implementat un font minimal 5x7, stocat in memoria program prin PROGMEM. Sunt definite doar caracterele ​necesare pentru mesajele proiectului:​ cifre, literele ​folosite in OFFCALIB, FINGER, TIME, BPM, OK si ANORMAL.
  
-In timpul functionarii,​ display-ul poate afisa:+Display-ul poate afisa urmatoarele ecrane: 
 +  * OFF - sistem oprit; 
 +  * CALIB - etapa scurta de calibrare;​ 
 +  * FINGER - asteptarea pozitionarii degetului pe senzor; 
 +  * TIME si BPM - masurare in curs; 
 +  * BPM si OK / ANORMAL - rezultat final.
  
-  * OFF sistemul este oprit; +==== Controlul LED-urilor si al buzzerului ====
-  * WAIT - sistemul asteapta pozitionarea senzorului;​ +
-  * TIME: xx - timpul ramas din masurare; +
-  * BPM xx - numarul de batai detectate pana in acel moment; +
-  * OK - puls in interval normal; +
-  * LOW - puls sub intervalul normal; +
-  * HIGH - puls peste intervalul normal.+
  
-O inima este afisata langa valoarea BPM pentru a indica vizual faptul ca numarul se refera la bataile inimii.+LED-urile sunt controlate prin pinii PD5 si PD6: 
 +  * PD5 controleaza canalul rosu; 
 +  * PD6 controleaza canalul verde.
  
-==== Semnalizare vizuala si sonora ====+Acesti pini nu alimenteaza direct LED-urile, ci comanda tranzistoarele BD139. Tranzistoarele functioneaza ca switch-uri pe partea de GND, permitand aprinderea simultana a mai multor LED-uri fara a depasi curentul maxim suportat de pinii microcontrollerului.
  
-LED-urile ​RGB sunt controlate prin doua canale folosite in proiect: rosu si verde. Deoarece ​LED-urile ​sunt de tip anod comun, pinii comuni sunt conectati la +5V, iar canalele de culoare sunt comandate pe partea de GND prin tranzistoare BD139.+La fiecare bataie generata: 
 +  * LED-urile ​rosii se aprind scurt; 
 +  * buzzerul reda un sunet scurt de tip lub-dub; 
 +  * LED-urile ​rosii se sting dupa impuls.
  
-La fiecare bataie detectata:+La final: 
 +  * daca BPM-ul ales este intre 60 si 100, se aprind LED-urile verzi; 
 +  * daca BPM-ul este in afara intervalului,​ se aprind LED-urile rosii si se afiseaza ANORMAL.
  
-  * canalul rosu este activat scurt; +==== Butonul ====
-  * buzzerul reda un sunet scurt; +
-  * contorul BPM de pe display creste.+
  
-La finalul masurarii:+Butonul este conectat la PD2 si foloseste pull-up intern. In repaus, pinul citeste nivel logic 1, iar la apasare este conectat la GND si citeste nivel logic 0.
  
-  ​verde indica BPM normal+Programul detecteaza tranzitia de la neapasat la apasat si foloseste un debounce software de 50 ms. La apasarea butonului:​ 
-  * rosu indica BPM prea mic sau prea mare.+  ​daca sistemul este in OFF, porneste secventa de calibrare
 +  * daca sistemul este in alta stare, se opreste si revine la OFF.
  
-==== Rolul butonului ​====+==== Fluxul final al programului ​====
  
-Butonul ​este conectat la PD2 si foloseste pull-up intern. Astfel:+Fluxul de functionare al programului ​este:
  
-  ​* cand butonul nu este apasat, pinul citeste ​logic; +  1. Sistemul porneste in starea OFF. 
-  ​* cand butonul este apasatpinul este conectat la GND si citeste 0 logic.+  ​2. Utilizatorul apasa butonul
 +  3. Sistemul intra in CALIB si citeste senzorul pentru o scurta perioada. 
 +  4. Sistemul intra in FINGER si asteapta pozitionarea degetului pe senzor. 
 +  5. Cand este detectat degetulse alege o valoare BPM pseudo-aleatoare. 
 +  6. Sistemul intra in MEASURING si porneste cronometrul de 60 de secunde. 
 +  7. La fiecare interval corespunzator BPM-ului ales, LED-urile rosii pulseaza si buzzerul suna. 
 +  8. Display-ul actualizeaza timpul ramas si numarul de batai. 
 +  9. La finalul celor 60 de secunde, sistemul afiseaza BPM-ul final. 
 +  10. Daca BPM-ul ​este intre 60 si 100, LED-urile verzi indica o stare normala. 
 +  11. Daca BPM-ul este in afara intervalului,​ LED-urile rosii indica o stare anormala.
  
-Programul detecteaza tranzitia de la neapasat la apasat si schimba starea sistemului. Prima apasare porneste masurarea, iar o alta apasare poate opri sistemul si reveni in starea IDLE. 
  
 ==== Integrarea functionalitatilor din laborator ==== ==== Integrarea functionalitatilor din laborator ====
Line 315: Line 346:
  
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
- 
-Pana in acest moment au fost testate principalele componente hardware si software ale proiectului. 
  
 LED-urile RGB au fost testate pe canalul rosu si pe canalul verde. S-a confirmat ca toate LED-urile se aprind simultan prin comanda tranzistoarelor BD139. A fost verificata si functionarea LED-urilor de tip anod comun, unde pinul comun este conectat la +5V, iar fiecare canal de culoare este inchis spre GND prin tranzistor. LED-urile RGB au fost testate pe canalul rosu si pe canalul verde. S-a confirmat ca toate LED-urile se aprind simultan prin comanda tranzistoarelor BD139. A fost verificata si functionarea LED-urilor de tip anod comun, unde pinul comun este conectat la +5V, iar fiecare canal de culoare este inchis spre GND prin tranzistor.
Line 335: Line 364:
  
 Tranzistoarele BD139 s-au dovedit necesare pentru comanda simultana a mai multor LED-uri RGB, deoarece pinii microcontrollerului nu pot alimenta direct toate LED-urile. Display-ul OLED ofera feedback clar utilizatorului,​ iar buzzerul face interactiunea mai intuitiva prin sincronizarea sunetului cu fiecare bataie detectata. Tranzistoarele BD139 s-au dovedit necesare pentru comanda simultana a mai multor LED-uri RGB, deoarece pinii microcontrollerului nu pot alimenta direct toate LED-urile. Display-ul OLED ofera feedback clar utilizatorului,​ iar buzzerul face interactiunea mai intuitiva prin sincronizarea sunetului cu fiecare bataie detectata.
- 
-Proiectul poate fi extins prin imbunatatirea algoritmului de filtrare, prin calibrare automata mai avansata a senzorului si prin salvarea istoricului BPM. Chiar si in forma actuala, proiectul evidentiaza folosirea practica a conceptelor de ADC, GPIO, I2C, filtrare software si control al starilor intr-un sistem embedded. 
  
  
Line 342: Line 369:
  
 https://​youtube.com/​shorts/​KqERROrqigY?​feature=share https://​youtube.com/​shorts/​KqERROrqigY?​feature=share
 +
 +==== GitHub ====
 +
 +https://​github.com/​AndreeaV13/​Proiect_PM_2026/​tree/​main
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
Line 349: Line 380:
   * [[https://​cdn-shop.adafruit.com/​datasheets/​SSD1306.pdf|Datasheet SSD1306 OLED]]   * [[https://​cdn-shop.adafruit.com/​datasheets/​SSD1306.pdf|Datasheet SSD1306 OLED]]
   * [[https://​pulsesensor.com/​|Pulse Sensor - documentatie oficiala]]   * [[https://​pulsesensor.com/​|Pulse Sensor - documentatie oficiala]]
 +
 +Resurse Software:
 +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​ATmega328P-Data-Sheet-40002061A.pdf|ATmega328P Datasheet]]
 +  * [[https://​cdn-shop.adafruit.com/​datasheets/​SSD1306.pdf|SSD1306 OLED Controller Datasheet]]
 +  * [[https://​www.nongnu.org/​avr-libc/​user-manual/​|AVR Libc User Manual]]
 +  * [[https://​www.nongnu.org/​avr-libc/​user-manual/​group__avr__io.html|AVR Libc - avr/io.h]]
 +  * [[https://​www.nongnu.org/​avr-libc/​user-manual/​group__util__delay.html|AVR Libc - util/​delay.h]]
 +  * [[https://​www.nongnu.org/​avr-libc/​user-manual/​group__avr__interrupts.html|AVR Libc - avr/​interrupt.h]]
 +  * [[https://​www.nongnu.org/​avr-libc/​user-manual/​group__avr__pgmspace.html|AVR Libc - avr/​pgmspace.h]]
 +  * [[https://​docs.platformio.org/​en/​latest/​platforms/​atmelavr.html|PlatformIO - Atmel AVR Platform]]
pm/prj2026/alexandru.jipa2803/andreea.voinea1305.1779584473.txt.gz · Last modified: 2026/05/24 04:01 by andreea.voinea1305
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