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

Mediu de dezvoltare: PlatformIO + VSCode, framework AVR, cod C cu avr-gcc.

Algoritmi si structuri planificate:

  • Citire ADC pentru senzorul de puls
  • Detectare varfuri de semnal (peak detection) cu praguri UPPER si LOWER calibrate experimental
  • Calcul BPM in timp real: BPM = 60000 / intervalul dintre doua batai consecutive (in ms)
  • Timer0 si Timer2 genereaza PWM pe pinii PD5, PD6, PD3 pentru efectul de fade al LED-urilor
  • Timer1 genereaza frecventele sonore pe PB1 pentru sunetul lub-dub al buzzerului
  • Comunicatie I2C cu display-ul OLED SSD1306 folosind registrele TWI (TWBR, TWCR, TWSR, TWDR)
  • Intrerupere externa INT0 pe PD2 pentru buton cu debouncing software (~50ms)
  • Masina de stari: IDLE (LED-uri statice) → MEASURING (puls activ, LED-uri pulseaza, BPM pe display) → IDLE

In starea IDLE, masurarea este oprita. La apasarea butonului, sistemul intra in starea MEASURING. In aceasta stare, senzorul citeste pulsul, LED-urile pulseaza, buzzerul reda sunetul la fiecare bataie detectata, iar OLED-ul afiseaza BPM. La o noua apasare a butonului, sistemul revine in IDLE.

Librarii 3rd-party planificate:

  • Librarie SSD1306 pentru OLED (adaptata pentru ATmega328P)

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.

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

  • Saptamana 1: alegerea temei si documentare
  • Saptamana 2: achizitie piese si testare componente individuale
  • Saptamana 3: testarea LED-urilor RGB pe breadboard si verificarea conexiunilor pentru anod comun
  • Saptamana 4: testarea comenzii canalului rosu prin tranzistor BD139

Bibliografie/Resurse

pm/prj2026/alexandru.jipa2803/andreea.voinea1305.1778967354.txt.gz · Last modified: 2026/05/17 00:35 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