This is an old revision of the document!
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.
Modulele proiectului si modul in care interactioneaza:
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:
Pentru fiecare tranzistor BD139:
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:
Pinii PWM au fost alesi pentru a permite efectul de fade (puls) al LED-urilor.
Schema logica pentru un canal de culoare este:
Senzor puls cardiac (Pulse Sensor)
Pinul ADC0 a fost ales deoarece senzorul ofera un semnal analogic citit prin convertorul analog-digital.
Display OLED 0.96” SSD1306
Pinii PC4 si PC5 sunt pinii hardware dedicati protocolului I2C (TWI) pe ATmega328P.
Buzzer pasiv
Pinul PB1 suporta PWM pe Timer1, necesar pentru generarea frecventelor sonore lub-dub.
Buton tactil
Pinul PD2 suporta intrerupere externa INT0 pentru detectarea apasarii cu debouncing.
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:
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.
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:
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:
Display-ul va afisa mesaje scurte, adaptate la dimensiunea sa:
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.
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.
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.
Resurse Hardware: