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/19 10:04]
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 aprinse ​pe acelasi canal:+Pentru 11 LED-uri ​verzi aprinse ​simultan:
  
-  11 x 3mA 33mA+  ​I_total_verde = 11 x 9.1mA 
 +  I_total_verde ​100.1mA 
 + 
 +Deci canalul verde consuma aproximativ 100mA. 
 + 
 +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 
 + 
 +Caz estimat cu verde activ: 
 + 
 +  100mA + 20mA + 4mA + 20mA = 144mA 
 + 
 +Daca s-ar aprinde simultan rosu si verde, consumul LED-urilor ar fi: 
 + 
 +  33mA + 100mA = 133mA 
 + 
 +Iar consumul total ar fi aproximativ:​ 
 + 
 +  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 ===== 
  
 ===== Software Design ===== ===== Software Design =====
  
-Partea software a proiectului este realizata pe ATmega328P ​folosind mediul ​Arduino/PlatformIOImplementarea este dezvoltata incrementalprin testarea separata ​fiecarui modul hardware, apoi integrarea lor intr-un comportament comun.+Partea software a proiectului este implementata in limbaj C pentru microcontrollerul ​ATmega328P ​Xplained Mini, fara utilizarea framework-ului ​Arduino. ​Programul foloseste direct registrele microcontrollerului pentru configurarea pinilor GPIO, a convertorului analog-digital, a comunicatiei I2C/TWI si a temporizarii prin Timer0.
  
-Pana in acest moment au fost implementate si testate functiile de baza pentru ​controlul LED-urilor si al buzzerului. Microcontrollerul controleaza canalele LED prin pinii PD5 si PD6. Acesti pini comanda tranzistoarele BD139, care functioneaza ​ca switch-uri pentru canalele de culoare ale LED-urilor. Canalul rosu este controlat de PD5, iar canalul verde este controlat de PD6.+Implementarea este organizata pe stari, ​pentru ca fiecare etapa a functionarii sa fie separata clarStarile folosite sunt:
  
-A fost implementata aprinderea simultana a tuturor ​LED-urilor pe canalul rosuapoi pe canalul verde. De asemeneaa fost testata alternarea intre rosu, verde si stins, pentru a verifica faptul ca ambele canale sunt comandate corect din software.+  * STATE_OFF - sistemul este oprit, ​LED-urile si buzzerul sunt dezactivateiar 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.
  
-Buzzerul a fost conectat la pinul PD1 si a fost testat prin generarea unui sunet scurt sincronizat cu aprinderea canalului rosu. In aceasta etapa, LED-urile rosii se aprind scurt, iar buzzerul reda un sunet in acelasi timp, simuland o bataie a inimii. Dupa acest impuls, LED-urile se sting, iar ulterior se aprinde canalul verde pentru a simula o stare normala a pulsului.+==== Initializarea sistemului ====
  
-Pinii folositi in implementarea curenta sunt+La pornire, programul initializeaza toate modulele necesare
-  * PD5 control canal rosu +  * pinii pentru LED-urile rosii si verzi sunt configurati ca iesiri; 
-  * PD6 - control canal verde +  * pinul pentru ​buzzer ​este configurat ca iesire; 
-  * PD1 - control ​buzzer +  * pinul butonului este configurat ca intrare cu rezistenta pull-up interna; 
-  * PD2 buton de activare, propus pentru etapa urmatoare +  * ADC-ul este initializat ​pentru citirea semnalului analogic ​de la senzorul de puls conectat pe ADC0 / PC0; 
-  * PC0 / ADC0 senzor de puls, pentru citirea semnalului analogic +  * interfata TWI/I2C este initializata pentru comunicatia cu display-ul OLED SSD1306; 
-  * PC4 SDA si PC5 / SCL - display OLED prin I2C+  * Timer0 este configurat in mod CTC pentru a genera un contor de timp in milisecunde.
  
-Pentru etapa urmatoare, software-ul va fi extins cu citirea senzorului ​de puls de pe ADC0. Semnalul analogic primit ​de la senzor va fi analizat pentru detectarea batailor inimii. La fiecare bataie detectata, LED-urile rosii vor pulsa scurt, iar buzzerul va reda un sunet. Pe baza intervalului de timp dintre doua batai consecutive se va calcula valoarea BPM.+Timer0 este folosit pentru functia ​de timp de tip millis(), care permite masurarea duratelor fara a depinde doar de delay-uri software.
  
-Formula folosita pentru calculul BPM va fi:+==== Citirea senzorului de puls ====
  
-  BPM = 60000 intervalul_dintre_batai_in_ms+Senzorul HW-827 este conectat la ADC0 PC0. Semnalul citit de la senzor este analogic, deci programul foloseste convertorul analog-digital al microcontrollerului.
  
-Logica finala a programului va fi organizata pe stari: +Functia adc_read() selecteaza canalul ADC doritporneste conversia ​si asteapta ​finalizarea acesteia. Valoarea rezultata este intre 0 si 1023.
-  * IDLE - sistemul este oprit sau in asteptare +
-  * READY - utilizatorul a apasat butonuliar inima este aprinsa rosu constant ​si asteapta ​degetul pe senzor +
-  * MEASURING - senzorul detecteaza bataile, LED-urile pulseaza sincronizat cu pulsul, iar buzzerul suna la fiecare bataie +
-  * RESULT - sistemul afiseaza BPM-ul ​si indica starea prin culoare+
  
-Display-ul va afisa mesaje scurteadaptate la dimensiunea sa: +Pentru a evita valori complet eronate, citirea senzorului nu se face dintr-o singura probaci 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.
-  * WAIT asteapta degetul pe senzor +
-  * PULS - masurare in curs +
-  * P075 - exemplu pentru 75 BPM +
-  * OK - BPM normal +
-  * HIGH - BPM prea mare +
-  * LOW - BPM prea mic+
  
-In varianta finala, daca BPM-ul ​calculat ​este intre 60 si 100, LED-urile ​vor indica ​starea normala ​prin culoarea verde. Daca BPM-ul este in afara acestui intervalsistemul va semnaliza ​starea prin culoarea rosie.+Aceasta filtrare este necesara deoarece senzorul este sensibil la lumina ambientala, la pozitia degetului si la miscarea firelor. 
 + 
 +==== Detectarea prezentei degetului ==== 
 + 
 +In varianta finala ​a coduluisenzorul este folosit in principal pentru detectarea prezentei degetului. Programul foloseste doua praguri cu histerezis:​ 
 + 
 +  * 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 prag, sistemul considera ca degetul a fost ridicat. 
 + 
 +Folosirea a doua praguri diferite evita trecerile rapide intre starile „deget pus” si „deget luat” atunci cand semnalul oscileaza in jurul unei singure valori. 
 + 
 +Dupa apasarea butonului, sistemul intra in starea CALIB, apoi in STATE_WAIT_FINGER. In 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. 
 + 
 +==== Generarea batailor si calculul ​BPM ==== 
 + 
 +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. 
 + 
 +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. 
 + 
 +Formula folosita pentru intervalul dintre doua batai este: 
 + 
 +  interval = 60000 / BPM 
 + 
 +unde intervalul este exprimat in milisecunde. 
 + 
 +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; 
 +  * buzzerul reda sunetul de tip lub-dub; 
 +  * display-ul actualizeaza numarul de batai afisat. 
 + 
 +Astfel, valoarea afisata la BPM creste sincronizat cu sunetul buzzerului si cu pulsatia LED-urilor rosii. 
 + 
 +==== Masurarea timpului ==== 
 + 
 +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(). 
 + 
 +Display-ul afiseaza timpul ramas pana la finalul masurarii. Cronometrul se actualizeaza o data pe secunda. 
 + 
 +Pe ecran sunt afisate: 
 +  * TIME - timpul ramas din sesiunea de masurare; 
 +  * 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 ==== 
 + 
 +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 este implementat un font minimal 5x7, stocat in memoria program prin PROGMEM. Sunt definite doar caracterele necesare pentru mesajele proiectului:​ cifre, literele folosite in OFF, CALIB, FINGER, TIME, BPM, OK si ANORMAL. 
 + 
 +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. 
 + 
 +==== Controlul LED-urilor si al buzzerului ==== 
 + 
 +LED-urile sunt controlate prin pinii PD5 si PD6: 
 +  * PD5 controleaza canalul rosu; 
 +  * PD6 controleaza canalul verde. 
 + 
 +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. 
 + 
 +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 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. 
 + 
 +==== Butonul ==== 
 + 
 +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. 
 + 
 +Programul detecteaza tranzitia de la neapasat la apasat si foloseste un debounce software de 50 ms. La apasarea butonului:​ 
 +  * daca sistemul este in OFF, porneste secventa de calibrare;​ 
 +  * daca sistemul este in alta stare, se opreste si revine la OFF. 
 + 
 +==== Fluxul final al programului ==== 
 + 
 +Fluxul de functionare al programului este: 
 + 
 +  1. Sistemul porneste in starea ​OFF. 
 +  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 degetul, se 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 intervaluluiLED-urile rosii indica o stare anormala. 
 + 
 + 
 +==== Integrarea functionalitatilor din laborator ==== 
 + 
 +Proiectul integreaza mai multe concepte studiate la laborator:​ 
 + 
 +  * GPIO - controlul LED-urilor, buzzerului si citirea butonului;​ 
 +  * ADC - citirea semnalului analogic de la senzorul de puls; 
 +  * I2C/TWI - comunicatia cu display-ul OLED SSD1306; 
 +  * temporizari software - generarea impulsurilor pentru buzzer si LED-uri; 
 +  * filtrare software - stabilizarea semnalului citit de la senzor; 
 +  * masina de stari - organizarea programului in IDLE, WAIT_FINGER,​ MEASURING si RESULT. 
 + 
 +==== Fluxul de functionare ==== 
 + 
 +Fluxul principal al programului este: 
 + 
 +  1. Sistemul porneste in starea ​IDLE si afiseaza OFF. 
 +  2. Utilizatorul apasa butonul. 
 +  3. Sistemul intra in starea WAIT_FINGER si asteapta stabilizarea semnalului de la senzor. 
 +  4. Dupa detectarea unui semnal valid, sistemul intra in MEASURING. 
 +  5. Timp de 60 de secunde, programul citeste senzorul, filtreaza semnalul si detecteaza bataile. 
 +  6. La fiecare bataie detectata, LED-urile rosii pulseaza si buzzerul suna. 
 +  7. Display-ul afiseaza timpul ramas si numarul de batai detectate. 
 +  8. La finalul celor 60 de secunde, BPM-ul este evaluat. 
 +  9. Sistemul afiseaza OK, LOW sau HIGH si aprinde verde sau rosu in functie de rezultat. 
 + 
 +==== Calibrarea si reglarea senzorului ==== 
 + 
 +O etapa importanta a proiectului a fost calibrarea senzorului de puls. Semnalul senzorului este influentat de lumina ambientala, de presiunea exercitata pe senzor si de pozitia degetului. 
 + 
 +Pentru calibrare au fost realizate teste in Serial Monitor: 
 + 
 +  * testarea pinului A0 direct la GND; 
 +  * testarea pinului A0 direct la 5V; 
 +  * testarea senzorului fara deget; 
 +  * testarea senzorului acoperit; 
 +  * testarea senzorului tinut intre degete. 
 + 
 +Prin aceste teste s-a observat ca senzorul devine mult mai stabil atunci cand partea optica este acoperita complet si cand degetul este tinut nemiscat. Cea mai buna pozitie obtinuta a fost tinerea senzorului intre degetul mare si aratator, cu partea optica acoperita, fara apasare puternica. 
 + 
 +Pentru reducerea detectiilor false au fost folosite: 
 + 
 +  * filtrare ​prin medii rapide si lente; 
 +  * prag relativ fata de baseline; 
 +  * timp minim intre doua batai detectate;​ 
 +  * pornirea masurarii doar dupa stabilizarea semnalului.
  
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
  
-Pana in acest moment au fost testate individual componentele principale ale proiectului. ​LED-urile RGB au fost montate ​pe breadboard ​si testate ​pe canalul ​rosu, folosind rezistente de limitare ​curentului. A fost verificata functionarea ​simultana a LED-urilor ​si a fost stabilita schema corecta pentru LED-uri RGB de tip anod comun.+LED-urile RGB au fost testate ​pe canalul rosu si pe canalul ​verde. S-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.
  
-fost testata si ideea de comanda prin tranzistor BD139unde tranzistorul functioneaza ca un switch pe partea de GND. In aceasta configuratiepinul comun al LED-ului este conectat la +5Vpinul de culoare trece printr-o rezistenta catre colectorul tranzistorului,​ emitorul ​este conectat la GND, iar baza este comandata printr-o rezistenta de 1K ohm.+Buzzerul a fost testat impreuna cu LED-urile rosii. La activarea unei batai detectatebuzzerul reda un sunet scurtiar LED-urile rosii pulseaza in acelasi timp. Astfelfeedback-ul vizual si sonor este sincronizat.
  
-Au fost testate ​si toate LED-urile pe canalul verdeCanalul rosu si canalul verde functioneaza corect ​prin comanda softwarealternand intre rosuverde si stinsfost testat ​si buzzerulconectat ​la PD1care reda un sunet scurt sincronizat cu aprinderea ​LED-urilor ​rosii. ​Astfelpartea de feedback vizual ​si sonor a fost validata.+Display-ul OLED SSD1306 a fost testat separat prin afisarea unor mesaje simple ​si apoi integrat in proiectAcesta afiseaza starea sistemului, timpul ramas din masurare ​si numarul de batai detectate. Textul a fost marit pentru a fi mai usor de citit, iar o inima este afisata langa valoarea BPM. 
 + 
 +Senzorul de puls a fost testat ​prin citirea valorilor analogice in Serial Monitor. Testele A0-GND si A0-5V au confirmat functionarea corecta a ADC-ului. Ulteriorsenzorul a fost testat in mai multe pozitii pentru a observa diferentele dintre semnalul fara degetsemnalul acoperit ​si semnalul cu degetS-a observat ca semnalul este sensibil la lumina si la miscare, motiv pentru care au fost introduse filtrare software ​si praguri relative. 
 + 
 +In forma curentasistemul poate porni masurarea de la butonpoate afisa informatii pe OLED, poate detecta varfuri ale semnalului de puls si poate semnaliza fiecare bataie prin LED-uri rosii si buzzerLa finalul masurariisistemul afiseaza valoarea BPM obtinuta ​si indica starea prin LED verde sau rosu.
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Proiectul ​combina citirea unui semnal biologic simplu cu feedback vizual si sonor. Folosirea LED-urilor RGB permite reprezentarea intuitiva a starii pulsuluiiar display-ul OLED ofera afisarea valorii BPM in timp real. Tranzistoarele BD139 sunt necesare pentru comanda simultana a mai multor ​LED-uri, ​deoarece pinii microcontrollerului nu pot furniza direct curentul necesar pentru toate LED-urile.+Proiectul ​demonstreaza integrarea mai multor module hardware intr-un sistem interactiv: senzor analogic, display OLED I2C, LED-uri ​RGBbuzzer, buton si tranzistoare de comanda. Microcontrollerul ATmega328P citeste semnalul de la senzor, controleaza feedback-ul vizual si sonor si afiseaza rezultatul final.
  
-O dificultate importanta a fost montarea LED-urilor RGB pe breadboarddeoarece fiecare LED are patru pini si trebuie respectata orientarea corecta a pinilorDe asemenea, ​fost necesara conectarea corecta a liniilor ​de alimentare intre cele doua breadboard-uri.+O dificultate importanta a fost stabilizarea semnalului de la senzorul de puls. Valorile citite depind mult de pozitia degetuluide lumina ambientala ​si de miscarea firelorPentru ​reduce aceste probleme, semnalul este filtrat software, iar detectarea batailor se face pe baza unui prag relativ fata de media semnalului, nu doar pe baza unei valori fixe.
  
-===== Download =====+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.
  
  
-===== Jurnal =====+==== Video demonstrativ ​====
  
 +https://​youtube.com/​shorts/​KqERROrqigY?​feature=share
 +
 +==== GitHub ====
 +
 +https://​github.com/​AndreeaV13/​Proiect_PM_2026/​tree/​main
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
Line 206: 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.1779174248.txt.gz · Last modified: 2026/05/19 10:04 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