This is an old revision of the document!
Edit
Edit
Edit
e ok kit ul acesta?
asta e bun?
Edit
Imaginea arata cum ar arata proiectul tau pe breadboard folosind o banda WS2812B indoita in forma de inima, conectata la senzorul de puls, OLED si buzzer.
Daca vrei sa incerci alte directii, pot:
sa iti fac o schema exacta de wiring pentru toate componentele
sa iti desenez layout-ul optim pe breadboard
sa iti scriu lista finala de conexiuni pin-cu-pin pentru ATmega328P
si daca as vrea sa fac asa ce piese mi ar trb ? e complicat sa pun asta in carcasa?
52bd39ef-3b3c-4d01-8af4-8073732f16d9.png 7a2f42ac-adf3-4af7-86ae-33b8f8d77e9e.png e buna?
pot sa iau asa si sa iau 3?
771da4b0-3ffc-409d-8701-3b7ba720f540.png 8b7dde87-4f3e-445c-bab5-984c5232390e.png
90b2d07e-c70a-47f6-8ab3-5726fc1ea2f5.png ededc456-2598-43c2-ac45-264301db7cba.png
Uita te doar la rezostente daca s ok
Deci, aici sunt două breadboard-uri lipite. Am pus LED-urile în formă de inimă, patru în A, B, C, D, E, deci deasupra șanțului și restul sub șanț, sunt nouă, în total. Bun, am legat fiecare pin cel mai lung al LED-ului la linia roșie, numai că pe primele de sus, deasupra șanțului, am legat la linia roșie de sus de pe breadboard și pe cele de jos, de sub șanț, le-am legat la linia roșie de sub șanț. E ok?
Nu inteleg nimic ce fac acum? Zi mi pasul 1
Asa?
Pai aici e
Daca l asez asa e bn?
Are ceva daca am dat cele 2 lunii de la breadboard jos si le am unit?
Așa e bine, gen trag o rezistență de la pinul roșu în linia apoi un fir de la lung roșu pe linia albastră până în ground și apoi un ground de la ground-ul becului până pe linia roșie și din linia roșie un fir lung care merge în 5V pe placă.
S au aprins doua simulan cu 1k
Ledurile de sus nu merg daca le bag rezistenta tot sus, doar daca i bag jos
Cele de sus nu merg chiar daca le pun rezistenta
Acum merge unul in plus si atat
Le am testat cu rezistenta de 1k pot folosi 1k pe rosu si 220 pe verde?
E bine asa?
Nu se aprinde ala
S-a gândit timp de 13s Ok. Pentru LED-ul ăla care nu se aprinde prin tranzistor, fă testul ăsta în ordine. Nu modifica restul.
Test 1: verifică dacă LED-ul + rezistența sunt bune Scoate tranzistorul din ecuație temporar.
La LED-ul care nu merge, fă:
pin lung LED → +5V
pin roșu LED → rezistență 1kΩ → GND Adică exact cum îl aprindeai înainte, direct la GND.
Rezultat: dacă se aprinde: LED-ul și rezistența sunt bune;
dacă nu se aprinde: problema e la LED / pin greșit / rezistență pusă greșit.
Test 2: verifică tranzistorul Dacă LED-ul merge direct, atunci îl bagi iar prin BD139.
Schema trebuie să fie:
pin lung LED → +5V
pin roșu LED → rezistență 1kΩ → C tranzistor
E tranzistor → GND
B tranzistor → rezistență 1kΩ → +5V Pentru BD139, cu scrisul spre tine:
stânga = E mijloc = C dreapta = B Deci:
LED-ul intră în pinul din mijloc GND intră în pinul din stânga +5V prin rezistență intră în pinul din dreapta Test 3: foarte important Scoate rezistența care merge în B și atinge direct cu un fir prin rezistență de 1kΩ la +5V.
Adică:
B → rezistență 1kΩ → +5V Dacă LED-ul nu se aprinde nici așa, ai una din astea:
E/C/B sunt inversate rezistența LED-ului nu intră de fapt în C E nu e conectat la GND real pinul lung al LED-ului nu e la +5V Cel mai probabil la tine Din poză pare posibil ca tranzistorul să fie rotit sau să fi pus rezistența de comandă în pinul greșit.
Ține regula asta:
C = primește rezistența de la LED E = merge la GND B = merge la +5V prin rezistență Nu conecta B direct la +5V fără rezistență.
Introducere 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 amplifica semnalul de pe pinii microcontrollerului pentru a comanda cele 13 LED-uri RGB simultan 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 catod comun x13 Display OLED 0.96” SSD1306 I2C x1 Buzzer pasiv 5V x1 Buton tactil 12x12mm x1 Tranzistor NPN BD139 x3 Rezistente 220 ohm x39 (3 per LED x 13 LED-uri) Rezistente 1K ohm x3 (pentru baza tranzistoarelor) Rezistente 10K ohm x1 (pull-up buton) Breadboard 830 puncte x2 Fire jumper tata-tata si tata-mama Conexiuni LED-uri RGB (13 bucati, catod comun)
Toate LED-urile au pinii R, G, B conectati prin cate o rezistenta de 220 ohm la colectorul tranzistoarelor BD139 corespunzatoare. Pinii GND (catod comun) sunt legati impreuna la masa circuitului. Tranzistoarele BD139 sunt necesare deoarece 13 LED-uri depasesc curentul maxim suportat de un pin al microcontrollerului (20mA). Fiecare tranzistor are baza conectata printr-o rezistenta de 1K ohm la un pin digital PWM:
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.
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 Pinul PD2 suporta intrerupere externa INT0 pentru detectarea apasarii cu debouncing.
Calcule consum Consum per canal LED (cu rezistenta 220 ohm): I = (5V - 2V) / 220 = 13.6mA per LED
13 LED-uri pe un canal: 13 x 13.6mA = 177mA Display OLED: ~20mA Senzor puls: ~4mA Buzzer: ~30mA ATmega328P: ~20mA Total maxim (1 canal LED activ): ~251mA Alimentare USB 5V / 500mA — consum in limite sigure.
Software Design Mediu de dezvoltare: PlatformIO + VSCode, framework AVR, cod C cu avr-gcc.
Algoritmi si structuri planificate:
Citire ADC in mod Free Running 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 Librarii 3rd-party planificate:
Librarie SSD1306 pentru OLED (adaptata pentru ATmega328P)
asta e ce am eu pe pagina proeictului, acum am 11 noturi, e ceva ce tre sa modific? sau nu e bn?
Thought for 12s Da, trebuie să modifici. Acum pagina ta nu mai corespunde cu montajul real.
Cele mai importante greșeli:
1. Ai scris „catod comun”, dar tu folosești anod comun Schimbă peste tot:
LED-uri RGB 5mm catod comun în:
LED-uri RGB 5mm anod comun Și schimbă descrierea conexiunii.
Acum la tine corect este:
Pinul comun/anodul comun al fiecărui LED este conectat la +5V. Pinii R, G, B sunt conectați prin rezistențe la colectoarele tranzistoarelor BD139. Tranzistoarele comută conexiunea către GND. Nu scrie că pinii comuni merg la GND, pentru că la tine merg la +5V.
2. Ai 11 LED-uri, nu 13 Schimbă peste tot:
13 LED-uri RGB în:
11 LED-uri RGB Lista de componente devine:
LED-uri RGB 5mm anod comun x11 3. Rezistențele nu mai sunt 39 pentru 13 LED-uri Pentru 11 LED-uri RGB complete:
11 LED-uri × 3 culori = 33 rezistențe Deci schimbă:
Rezistente 220 ohm x39 (3 per LED x 13 LED-uri) în una dintre variantele astea:
Dacă documentezi varianta finală ideală cu RGB complet: Rezistente pentru LED-uri x33 (3 per LED x 11 LED-uri) Dacă folosești valori diferite:
Rezistențe 1kΩ pentru canalul roșu x11 Rezistențe 220Ω pentru canalele verde/albastru, după testare Dar ca să fie simplu în proiect, eu aș scrie:
Rezistențe pentru LED-uri: 220Ω / 1kΩ, câte una pentru fiecare pin de culoare 4. Descrierea BD139 trebuie modificată pentru anod comun În loc de textul tău actual:
Toate LED-urile au pinii R, G, B conectati prin cate o rezistenta de 220 ohm la colectorul tranzistoarelor BD139 corespunzatoare. Pinii GND (catod comun) sunt legati impreuna la masa circuitului. Scrie:
LED-urile RGB folosite sunt de tip anod comun. Pinii comuni ai LED-urilor sunt legați la +5V. Pentru fiecare culoare, pinii corespunzători R, G și B sunt conectați prin rezistențe individuale la câte un canal comun. Fiecare canal comun este conectat la colectorul unui tranzistor NPN BD139. Emitorul fiecărui tranzistor este conectat la GND, iar baza este comandată de un pin PWM al microcontrollerului printr-o rezistență de 1kΩ. Asta este corect pentru schema ta.
5. Calculele de consum trebuie refăcute Tu ai calculat pentru 13 LED-uri cu 220Ω. Acum ai 11 LED-uri și pe roșu ai testat cu 1kΩ.
Pentru roșu cu 1kΩ:
I = (5V - 2V) / 1000Ω ≈ 3mA per LED Pentru 11 LED-uri:
11 × 3mA ≈ 33mA pe canalul roșu Dacă pentru verde/albastru folosești 220Ω, poți păstra calcul aproximativ:
I = (5V - 2V) / 220Ω ≈ 13.6mA per LED 11 × 13.6mA ≈ 150mA pe canal Deci schimbă consumul:
13 LED-uri pe un canal: 177mA în:
11 LED-uri pe un canal cu 220Ω: aproximativ 150mA 11 LED-uri pe un canal cu 1kΩ: aproximativ 33mA Totalul tău cu un canal activ devine aproximativ:
cu 220Ω: 150mA + 20mA OLED + 4mA senzor + 30mA buzzer + 20mA ATmega ≈ 224mA cu 1kΩ pe roșu: 33mA + restul ≈ 107mA 6. În schema din poză schimbă etichetele În diagramă apare:
13x LED RGB Catod Comun 220R Trebuie să fie:
11x LED RGB Anod Comun rezistențe individuale pe R/G/B Și sus la LED-uri, comunul nu merge la GND. Trebuie să meargă la +5V.
Varianta corectată pentru secțiunea LED-uri Poți pune asta direct:
LED-uri RGB (11 bucăți, anod comun)
LED-urile RGB sunt de tip anod comun. Pinii comuni ai LED-urilor sunt conectați la +5V. Pinii R, G și B ai fiecărui LED sunt conectați prin rezistențe individuale la câte un canal comun pentru fiecare culoare. Fiecare canal comun este comandat printr-un tranzistor NPN BD139.
Pentru fiecare tranzistor: - colectorul este conectat la canalul de culoare corespunzător; - emitorul este conectat la GND; - baza este conectată printr-o rezistență de 1kΩ la un pin PWM al microcontrollerului.
Tranzistoarele sunt necesare deoarece toate LED-urile aprinse simultan pe un canal pot depăși curentul maxim suportat de un pin al microcontrollerului. Concluzie Nu e rău ce ai pe pagină, dar acum trebuie schimbate obligatoriu:
catod comun → anod comun 13 LED-uri → 11 LED-uri 39 rezistențe → 33 rezistențe pentru RGB complet pinii comuni la GND → pinii comuni la +5V calculul de consum pentru 11 LED-uri schema hardware din imagine Restul — senzor puls, OLED, buton, buzzer, pinii PWM — este ok ca idee.
da mi tu tot textul , fara diacritice
Thought for 14s Mai jos ai textul corectat, fara diacritice, adaptat la varianta ta actuala cu 11 LED-uri RGB anod comun si tranzistoare BD139.
Introducere 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 pulsului: verde pentru BPM normal, in intervalul 60-100 BPM, si rosu pentru BPM in afara intervalului. La apasarea butonului, masurarea porneste, iar 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 un semnal analogic catre ADC.
ATmega328P proceseaza semnalul, calculeaza BPM si controleaza celelalte module.
Tranzistoarele BD139 amplifica semnalul de pe pinii microcontrollerului pentru a comanda cele 11 LED-uri RGB simultan.
LED-urile RGB pulseaza in ritmul detectat si isi schimba culoarea in functie de BPM: verde pentru puls normal, rosu pentru puls 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 - 1 bucata
LED-uri RGB 5mm anod comun - 11 bucati
Display OLED 0.96” SSD1306 I2C - 1 bucata
Buzzer pasiv 5V - 1 bucata
Buton tactil 12x12mm - 1 bucata
Tranzistor NPN BD139 - 3 bucati
Rezistente pentru LED-uri - cate una pentru fiecare pin de culoare folosit
Rezistente 1k ohm - pentru baza tranzistoarelor
Rezistenta 10k ohm - pentru pull-up buton, daca nu se foloseste pull-up intern
Breadboard 830 puncte - 2 bucati
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 al LED-urilor, astfel incat inima sa poata pulsa gradual.
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 Senzorul de puls trimite un semnal analogic catre microcontroller. Acesta este citit prin convertorul analog-digital al ATmega328P.
Conexiuni:
S / Semnal → PC0 (ADC0) VCC → 5V GND → GND Pinul PC0 a fost ales deoarece corespunde canalului ADC0 si permite citirea semnalului analogic de la senzor.
Display OLED 0.96” SSD1306 I2C Display-ul OLED este folosit pentru afisarea valorii BPM in timp real. Comunicatia se face prin protocolul I2C.
Conexiuni:
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 Buzzerul pasiv este folosit pentru redarea unui sunet scurt de tip lub-dub la fiecare bataie detectata.
Conexiuni:
Pin pozitiv → PB1 (OC1A) Pin negativ → GND Pinul PB1 suporta PWM pe Timer1, ceea ce permite generarea frecventelor sonore necesare pentru buzzer.
Buton tactil Butonul este folosit pentru pornirea si oprirea masurarii pulsului.
Conexiuni:
Un pin → PD2 (INT0) Celalalt pin → GND Se poate folosi o rezistenta externa de pull-up de 10k ohm intre PD2 si 5V sau pull-up-ul intern al microcontrollerului. Pinul PD2 a fost ales deoarece suporta intreruperea externa INT0, utila pentru detectarea apasarii butonului.
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.6 mA Pentru 11 LED-uri aprinse pe acelasi canal:
11 x 13.6 mA = 149.6 mA Deci un canal LED cu rezistente de 220 ohm consuma aproximativ 150 mA.
Pentru o rezistenta de 1k ohm, curentul aproximativ printr-un LED rosu este:
I = (5V - 2V) / 1000 ohm I = 3V / 1000 ohm I = 3 mA Pentru 11 LED-uri aprinse pe acelasi canal:
11 x 3 mA = 33 mA Estimare consum total, cu un canal LED activ:
LED-uri, 11 bucati, canal cu 220 ohm: aproximativ 150 mA OLED SSD1306: aproximativ 20 mA Senzor puls: aproximativ 4 mA Buzzer: aproximativ 30 mA ATmega328P: aproximativ 20 mA Total: aproximativ 224 mA Alimentarea prin USB 5V / 500 mA 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 prin peak detection, folosind praguri calibrate experimental.
Calcul BPM in timp real cu formula:
BPM = 60000 / intervalul dintre doua batai consecutive in milisecunde Timer0 si Timer2 genereaza PWM pe pinii PD5, PD6 si PD3 pentru efectul de fade al LED-urilor RGB.
Timer1 genereaza semnal PWM pe PB1 pentru sunetul buzzerului.
Comunicatie I2C cu display-ul OLED SSD1306 folosind interfata TWI a microcontrollerului.
Intrerupere externa INT0 pe PD2 pentru buton, cu debouncing software.
Masina de stari pentru functionarea proiectului:
IDLE → MEASURING → 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 display-ul OLED, adaptata pentru ATmega328P.
Eventual functii auxiliare pentru I2C/TWI si afisarea textului pe OLED.
Rezumat pini ATmega328P PD5 (OC0B) → tranzistor canal Rosu, PWM PD6 (OC0A) → tranzistor canal Verde, PWM PD3 (OC2B) → tranzistor canal Albastru, PWM
PC0 (ADC0) → senzor puls
PC4 (SDA) → OLED SDA PC5 (SCL) → OLED SCL
PD2 (INT0) → buton tactil
PB1 (OC1A) → buzzer pasiv, PWM
5V → alimentare LED-uri, OLED, senzor GND → masa comuna circuit Observatii LED-urile RGB sunt de tip anod comun, deci pinii comuni sunt conectati la +5V. Tranzistoarele BD139 sunt folosite ca switch-uri pe partea de GND, cate unul pentru fiecare canal de culoare. Astfel, microcontrollerul nu alimenteaza direct LED-urile, ci doar comanda tranzistoarele prin semnale PWM.
Pasted text.txt Document in formatul asta te rog
Thought for 14s Da. Iti dau textul in acelasi format ca pagina ta, cu ====, *, link-uri etc. Am pastrat structura din fisierul tau si am corectat partea cu 11 LED-uri, anod comun, BD139. Am folosit formatul din pagina ta initiala.
Autor: Voinea Andreea, Grupa: 333CB
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.
Mediu de dezvoltare: PlatformIO + VSCode, framework AVR, cod C cu avr-gcc.
Algoritmi si structuri planificate:
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:
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.
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:
Autor: Voinea Andreea, Grupa: 333CB
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:
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 amplifica semnalul de pe pinii microcontrollerului pentru a comanda cele 13 LED-uri RGB simultan
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
ATmega328P Xplained Mini - unitatea de procesare
Senzor de puls cardiac (Pulse Sensor) x1
LED-uri RGB 5mm catod comun x13
Display OLED 0.96” SSD1306 I2C x1
Buzzer pasiv 5V x1
Buton tactil 12x12mm x1
Tranzistor NPN BD139 x3
Rezistente 220 ohm x39 (3 per LED x 13 LED-uri)
Rezistente 1K ohm x3 (pentru baza tranzistoarelor)
Rezistente 10K ohm x1 (pull-up buton)
Breadboard 830 puncte x2
Fire jumper tata-tata si tata-mama
LED-uri RGB (13 bucati, catod comun)
Toate LED-urile au pinii R, G, B conectati prin cate o rezistenta de 220 ohm la colectorul tranzistoarelor BD139 corespunzatoare. Pinii GND (catod comun) sunt legati impreuna la masa circuitului. Tranzistoarele BD139 sunt necesare deoarece 13 LED-uri depasesc curentul maxim suportat de un pin al microcontrollerului (20mA). Fiecare tranzistor are baza conectata printr-o rezistenta de 1K ohm la un pin digital PWM:
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.
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 Pinul PD2 suporta intrerupere externa INT0 pentru detectarea apasarii cu debouncing.
Consum per canal LED (cu rezistenta 220 ohm): I = (5V - 2V) / 220 = 13.6mA per LED
13 LED-uri pe un canal: 13 x 13.6mA = 177mA
Display OLED: ~20mA
Senzor puls: ~4mA
Buzzer: ~30mA
ATmega328P: ~20mA
Total maxim (1 canal LED activ): ~251mA Alimentare USB 5V / 500mA — consum in limite sigure.
Mediu de dezvoltare: PlatformIO + VSCode, framework AVR, cod C cu avr-gcc.
Algoritmi si structuri planificate:
Citire ADC in mod Free Running 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
Librarii 3rd-party planificate:
Librarie SSD1306 pentru OLED (adaptata pentru ATmega328P)
Saptamana 1: alegerea temei si documentare
Saptamana 2: achizitie piese si testare componente individuale