This is an old revision of the document!


Inima Interactiva

Proiectul consta intr-o inima formata din LED-uri RGB pe breadboard care pulseaza in ritmul batailor reale ale utilizatorului. Utilizatorul isi pune degetul pe senzorul de puls, care masoara BPM-ul in timp real. LED-urile pulseaza in ritmul detectat, iar display-ul OLED afiseaza valoarea BPM. Culoarea LED-urilor indica starea: verde pentru BPM normal (60-100 BPM), rosu pentru BPM in afara intervalului. La apasarea butonului masurarea porneste, la o noua apasare se opreste. La fiecare bataie detectata, buzzerul reda un sunet scurt de tip lub-dub.

Descriere generala

Modulele proiectului si modul in care interactioneaza:

  • Senzorul de puls citeste bataile inimii de pe deget si trimite semnal analogic catre ADC
  • ATmega328P proceseaza semnalul, calculeaza BPM si controleaza celelalte module
  • Tranzistoarele BD139 comanda cele 11 LED-uri RGB simultan, fara ca pinii microcontrollerului sa alimenteze direct toate LED-urile
  • LED-urile RGB pulseaza in ritmul detectat si isi schimba culoarea in functie de BPM (verde = normal, rosu = in afara intervalului)
  • Display-ul OLED afiseaza BPM in timp real prin protocolul I2C
  • Butonul porneste/opreste masurarea prin intrerupere externa INT0
  • Buzzerul reda sunetul lub-dub la fiecare bataie detectata prin PWM

Hardware Design

Lista de componente

  • ATmega328P Xplained Mini - unitatea de procesare
  • Senzor de puls cardiac (Pulse Sensor) x1
  • LED-uri RGB 5mm anod comun x11
  • Display OLED 0.96” SSD1306 I2C x1
  • Buzzer pasiv 5V x1
  • Buton tactil 12x12mm x1
  • Tranzistor NPN BD139 x3
  • Rezistente pentru LED-uri: cate una pentru fiecare pin de culoare folosit
  • Rezistente 1K ohm x3 (pentru baza tranzistoarelor)
  • Rezistenta 10K ohm x1 (pull-up buton, daca nu se foloseste pull-up intern)
  • Breadboard 830 puncte x2
  • Fire jumper tata-tata si tata-mama

Conexiuni

LED-uri RGB (11 bucati, anod comun)

LED-urile RGB folosite sunt de tip anod comun. Pinul comun al fiecarui LED este conectat la +5V. Pinii R, G si B ai fiecarui LED sunt conectati prin rezistente individuale la cate un canal comun pentru fiecare culoare.

Fiecare canal comun este comandat printr-un tranzistor NPN BD139:

  • canalul rosu este conectat la colectorul tranzistorului BD139 pentru rosu
  • canalul verde este conectat la colectorul tranzistorului BD139 pentru verde
  • canalul albastru este conectat la colectorul tranzistorului BD139 pentru albastru

Pentru fiecare tranzistor BD139:

  • colectorul este conectat la canalul de culoare corespunzator
  • emitorul este conectat la GND
  • baza este conectata printr-o rezistenta de 1K ohm la un pin PWM al microcontrollerului

Tranzistoarele sunt necesare deoarece 11 LED-uri aprinse simultan pe acelasi canal pot depasi curentul maxim suportat de un pin al microcontrollerului. Astfel, pinii microcontrollerului comanda doar baza tranzistoarelor, iar curentul pentru LED-uri trece prin tranzistoare.

Pinii PWM folositi pentru LED-uri sunt:

  • PD5 (OC0B) → rezistenta 1K → baza BD139 → canal Rosu
  • PD6 (OC0A) → rezistenta 1K → baza BD139 → canal Verde
  • PD3 (OC2B) → rezistenta 1K → baza BD139 → canal Albastru

Pinii PWM au fost alesi pentru a permite efectul de fade (puls) al LED-urilor.

Schema logica pentru un canal de culoare este:

  • +5V → pin comun LED RGB
  • pin culoare LED → rezistenta → canal comun culoare → colector BD139
  • emitor BD139 → GND
  • baza BD139 → rezistenta 1K → pin PWM microcontroller

Senzor puls cardiac (Pulse Sensor)

  • Pinul S (semnal) → PC0 (ADC0)
  • VCC → 5V
  • GND → GND

Pinul ADC0 a fost ales deoarece senzorul ofera un semnal analogic citit prin convertorul analog-digital.

Display OLED 0.96” SSD1306

  • SDA → PC4 (SDA)
  • SCL → PC5 (SCL)
  • VCC → 5V
  • GND → GND

Pinii PC4 si PC5 sunt pinii hardware dedicati protocolului I2C (TWI) pe ATmega328P.

Buzzer pasiv

  • Pin pozitiv → PB1 (OC1A)
  • Pin negativ → GND

Pinul PB1 suporta PWM pe Timer1, necesar pentru generarea frecventelor sonore lub-dub.

Buton tactil

  • Un pin → PD2 (INT0)
  • Celalalt pin → GND
  • Rezistenta pull-up 10K ohm intre PD2 si 5V sau pull-up intern activat software

Pinul PD2 suporta intrerupere externa INT0 pentru detectarea apasarii cu debouncing.

Calcule consum

Pentru LED-urile RGB se foloseste cate o rezistenta pentru fiecare pin de culoare. Curentul depinde de valoarea rezistentei folosite.

Pentru o rezistenta de 220 ohm, curentul aproximativ printr-un LED rosu este:

I = (5V - 2V) / 220 ohm
I = 3V / 220 ohm
I = 13.6mA

Pentru 11 LED-uri aprinse pe acelasi canal:

11 x 13.6mA = 149.6mA

Deci un canal LED cu rezistente de 220 ohm consuma aproximativ 150mA.

Pentru o rezistenta de 1K ohm, curentul aproximativ printr-un LED rosu este:

I = (5V - 2V) / 1000 ohm
I = 3V / 1000 ohm
I = 3mA

Pentru 11 LED-uri aprinse pe acelasi canal:

11 x 3mA = 33mA

Estimare consum total, cu un canal LED activ:

  • LED-uri, 11 bucati, canal cu 220 ohm: aproximativ 150mA
  • OLED SSD1306: aproximativ 20mA
  • Senzor puls: aproximativ 4mA
  • Buzzer: aproximativ 30mA
  • 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.

Software Design

Software Design

Partea software a proiectului este realizata pe ATmega328P folosind mediul Arduino/PlatformIO. Implementarea este dezvoltata incremental, prin testarea separata a fiecarui modul hardware, apoi integrarea lor intr-un comportament comun.

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.

A fost implementata aprinderea simultana a tuturor LED-urilor pe canalul rosu, apoi pe canalul verde. De asemenea, a fost testata alternarea intre rosu, verde si stins, pentru a verifica faptul ca ambele canale sunt comandate corect din software.

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.

Pinii folositi in implementarea curenta sunt:

  • PD5 - control canal rosu
  • PD6 - control canal verde
  • PD1 - control buzzer
  • PD2 - buton de activare, propus pentru etapa urmatoare
  • PC0 / ADC0 - senzor de puls, pentru citirea semnalului analogic
  • PC4 / SDA si PC5 / SCL - display OLED prin I2C

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.

Formula folosita pentru calculul BPM va fi:

BPM = 60000 / intervalul_dintre_batai_in_ms

Logica finala a programului va fi organizata pe stari:

  • IDLE - sistemul este oprit sau in asteptare
  • READY - utilizatorul a apasat butonul, iar 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 scurte, adaptate la dimensiunea sa:

  • 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 interval, sistemul va semnaliza starea prin culoarea rosie.

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 a curentului. A fost verificata functionarea simultana a LED-urilor si a fost stabilita schema corecta pentru LED-uri RGB de tip anod comun.

A fost testata si ideea de comanda prin tranzistor BD139, unde tranzistorul functioneaza ca un switch pe partea de GND. In aceasta configuratie, pinul comun al LED-ului este conectat la +5V, pinul de culoare trece printr-o rezistenta catre colectorul tranzistorului, emitorul este conectat la GND, iar baza este comandata printr-o rezistenta de 1K ohm.

Au fost testate si toate LED-urile pe canalul verde. Canalul rosu si canalul verde functioneaza corect prin comanda software, alternand intre rosu, verde si stins. A fost testat si buzzerul, conectat la PD1, care reda un sunet scurt sincronizat cu aprinderea LED-urilor rosii. Astfel, partea de feedback vizual si sonor a fost validata.

Concluzii

Proiectul combina citirea unui semnal biologic simplu cu feedback vizual si sonor. Folosirea LED-urilor RGB permite reprezentarea intuitiva a starii pulsului, iar 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.

O dificultate importanta a fost montarea LED-urilor RGB pe breadboard, deoarece fiecare LED are patru pini si trebuie respectata orientarea corecta a pinilor. De asemenea, a fost necesara conectarea corecta a liniilor de alimentare intre cele doua breadboard-uri.

Download

Jurnal

Bibliografie/Resurse

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