This shows you the differences between two versions of the page.
pm:prj2022:avaduva:alexandru.necula01 [2022/04/30 16:15] alexandru.necula01 |
pm:prj2022:avaduva:alexandru.necula01 [2022/04/30 19:02] (current) alexandru.necula01 [Jurnal] |
||
---|---|---|---|
Line 48: | Line 48: | ||
==== Schema electrica ==== | ==== Schema electrica ==== | ||
- | TODO here insert schema Eagle | + | {{:pm:prj2022:avaduva:schematic_heartmonitor.png?700|}} |
<note> | <note> | ||
Placuta comandata care include senzorul are o problema de design, respectiv | Placuta comandata care include senzorul are o problema de design, respectiv | ||
Line 63: | Line 62: | ||
((https://simple-circuit.com/arduino-st7789-ips-tft-display-example/)) | ((https://simple-circuit.com/arduino-st7789-ips-tft-display-example/)) | ||
</note> | </note> | ||
- | |||
===== Software Design ===== | ===== Software Design ===== | ||
Line 85: | Line 83: | ||
Senzorul de puls are 3 stari: | Senzorul de puls are 3 stari: | ||
- | * **WAITING** → degetul nu se afla pe senzor | + | * **WAITING** → degetul nu se afla pe senzor; se afiseaza mesajul "Rest your finger on the sensor" |
- | * **INITIALIZING** -> frecventa cardiaca este in curs de calcul | + | * **INITIALIZING** → frecventa cardiaca este in curs de calcul; se afiseaza mesajul "Please wait..." |
- | * **WORKING** -> display-ul afiseaza datele colectate | + | * **WORKING** → display-ul afiseaza datele colectate; se afiseaza pulsul si oxigenarea sangelui pe display |
+ | |||
+ | **Initializari** - inainte de orice functie, initializam urmatoarele variabile: | ||
+ | * //pox// → clasa care defineste senzorul de puls-oximetru | ||
+ | * //tft// → clasa care defineste display-ul tft | ||
+ | * //lastState// → initializat cu WAITING, folosita pentru a tine cont cand actualizam display-ul | ||
+ | * //prevHeartRate// → initializat cu 0, folosita pentru a determina daca calculul pulsului este stabil | ||
+ | * //tsLastReport// → initializat cu 0, folosita pentru a actualiza display-ul la intervale determinate | ||
+ | |||
+ | <note> | ||
+ | Senzorul puls-oximetru trebuie interogat cat mai rapid, altfel datele din buffer-ul sau se pierd. | ||
+ | Conform bibliotecii utilizate, actualizarea ar trebui facuta la aproximativ 100Hz. | ||
+ | De aceea, in majoritatea functiilor implementate am apelat //pox.update()// | ||
+ | </note> | ||
+ | **Functii** | ||
+ | * //setup()// → initializarea pinilor pentru buzzer si LED-uri, initializarea display-ului TFT, initializarea senzorului de puls, inregistrarea functie de callback pentru fiecare puls | ||
+ | * //loop()// → logica principala a programului: apeleaza //pox.update()//; la fiecare 2 secunde calculeaza pulsul si SpO2 si afiseaza informatii relevante pe display in functie de aceste valori | ||
+ | * //RGB_color(red, green, blue)// → seteaza pinii LED-ului RGB cu valorile date ca parametri | ||
+ | * //setRGBColor(spO2, heartRate)// → apeleaza //RGB_color// cu valori in functie de puls si SpO2 | ||
+ | * //onBeatDetected()// → functie callBack; porneste buzzer-ul si LED-ul rosu de fiecare data cand detectam un puls | ||
+ | * //printOnDisplay(x, y, whatToPrint)// -> afiseaza pe display mesajul/valoarea dorita; deoarece aceasta operatie dureaza mai mult timp, apeleaza //pox.update()// | ||
+ | * //clearDisplay()// → diferit de implementarea din biblioteca Adafruit, pentru a permite interogarea senzorului de puls; printeaza cate un spatiu pe ecran pentru a sterge continutul anterior | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 115: | Line 134: | ||
===== Download ===== | ===== Download ===== | ||
- | **Arhiva cod**: {{:pm:prj2022:avaduva:mobile_heart_rate_monitor.zip|}} | + | {{:pm:prj2022:avaduva:mobile_heart_rate_monitor.zip|}} |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 122: | Line 141: | ||
* **15.04.2022**: comanda piese | * **15.04.2022**: comanda piese | ||
* **21.04.2022**: publicare descriere wiki | * **21.04.2022**: publicare descriere wiki | ||
- | * **30.04.2022**: finalizare software si asamblare hardware | + | * **29.04.2022**: finalizare software si asamblare hardware |
- | * **01.05.2022**: finalizare wiki, publicare documentatie completa | + | * **30.04.2022**: finalizare wiki, publicare documentatie completa |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |