This shows you the differences between two versions of the page.
pm:prj2023:adarmaz:healthkit [2023/05/28 11:50] laura_elena.nicoara [Introducere] |
pm:prj2023:adarmaz:healthkit [2023/05/28 19:24] (current) laura_elena.nicoara [Software Design] |
||
---|---|---|---|
Line 44: | Line 44: | ||
// Constant to delay the measurements | // Constant to delay the measurements | ||
#define REPORTING_PERIOD_MS 1000 | #define REPORTING_PERIOD_MS 1000 | ||
+ | |||
+ | // Connect ECG LO- to PD6 pin | ||
+ | #define LO_MINUS PD6 | ||
+ | |||
+ | // Connect ECG LO+ to PD7 pin | ||
+ | #define LO_PLUS PD7 | ||
+ | |||
+ | // Connect ECG OUTPUT to A0 pin | ||
+ | #define OUTPUT_ECG A0 | ||
</code> | </code> | ||
Line 92: | Line 101: | ||
// Timer to store the time at which the last beat occurred | // Timer to store the time at which the last beat occurred | ||
extern uint32_t tsLastReport; | extern uint32_t tsLastReport; | ||
+ | |||
+ | // Flags for LO+ and LO- interrupts | ||
+ | volatile bool flag_lo_m = 0; | ||
+ | volatile bool flag_lo_p = 0; | ||
</code> | </code> | ||
Line 104: | Line 117: | ||
// Initialize microSD module | // Initialize microSD module | ||
void setupSDmodule(); | void setupSDmodule(); | ||
+ | |||
+ | // Set the interrupts for ECG sensor | ||
+ | void setup_interrupts(); | ||
</code> | </code> | ||
Line 226: | Line 242: | ||
Modulul de senzor EKG va folosi un protocol ADC cu ajutorul căruia se va converti o tensiune analogică de la intrare într-o valoare digitală. | Modulul de senzor EKG va folosi un protocol ADC cu ajutorul căruia se va converti o tensiune analogică de la intrare într-o valoare digitală. | ||
+ | Am folosit întreruperi de tip pin change pentru a controla pinii LO+ și LO-. Fiecare are câte un flag corespunzător care se activează dacă se face o citire pe pin. Altfel, flag-ul se resetează. | ||
+ | <code cpp> | ||
+ | // Pin Change Interrupt 2 | ||
+ | ISR(PCINT2_vect) { | ||
+ | if ((PIND & (1 << LO_MINUS)) == 0) { | ||
+ | flag_lo_m = 1; | ||
+ | } else if ((PIND & (1 << LO_MINUS)) != 0) { | ||
+ | flag_lo_m = 0; | ||
+ | } | ||
+ | | ||
+ | if ((PIND & (1 << LO_PLUS)) == 0) { | ||
+ | flag_lo_p = 1; | ||
+ | } else if ((PIND & (1 << LO_PLUS)) != 0) { | ||
+ | flag_lo_p = 0; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
- | + | Citirea semnalului analog se face când ambele semnale de pe pinii digitali sunt citite. Electrocardiograma va avea afișată pe ecranul laptopului o reprezentare grafică a datelor interpretate, iar conectivitatea dintre Arduino și laptop o voi realiza prin protocolul USART, folosind Serial Plotter pentru afișarea semnalului EKG. | |
- | Electrocardiograma va avea afișată pe ecranul laptopului o reprezentare grafică a datelor interpretate, iar conectivitatea dintre Arduino și laptop o voi realiza prin protocolul USART, folosind Serial Plotter pentru afișarea semnalului EKG. | + | <code cpp> |
+ | void readECG() { | ||
+ | // Only when both flags are set, read the analog value | ||
+ | if (flag_lo_m == 1 && flag_lo_p == 1) { | ||
+ | Serial.println(analogRead(OUTPUT_ECG)); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | {{:pm:prj2023:adarmaz:poza_proiect_final_laura.jpeg?300|}} |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
+ | {{:pm:prj2023:adarmaz:poza_componente_laura.jpeg?300|}} | ||
+ | |||
+ | Semnalul ECG: | ||
+ | |||
+ | {{:pm:prj2023:adarmaz:poza_ecg_laura.png?700|}} | ||
+ | |||
+ | Rezultatele returnate de senzorul de pulsoximetru: | ||
+ | |||
+ | {{:pm:prj2023:adarmaz:poza_heartbeat_laura.jpeg?300|}} | ||
+ | |||
+ | Datele salvate pe cardul microSD: | ||
+ | <code> | ||
+ | BPM: 66.64 - SPO2: 98% | ||
+ | BPM: 61.21 - SPO2: 99% | ||
+ | BPM: 63.20 - SPO2: 98% | ||
+ | BPM: 79.26 - SPO2: 98% | ||
+ | BPM: 94.19 - SPO2: 98% | ||
+ | BPM: 76.11 - SPO2: 95% | ||
+ | BPM: 65.48 - SPO2: 95% | ||
+ | BPM: 73.26 - SPO2: 96% | ||
+ | BPM: 77.52 - SPO2: 96% | ||
+ | </code> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Mi-a făcut plăcere să lucrez la acest proiect, a fost challenging și interesant, am descoperit cât de util este să te informezi înainte cu ce componente lucrezi, ce au nevoie, cum interacționează împreună. Partea cea mai frumoasă a proiectului a fost când am început să primesc primele semne de viață ale senzorilor și faptul că funcționează și am legat bine firele. Apoi am devenit din ce în ce mai confident cu asamblarea sa, fără să mai am teama că am legat firele pe dos. Mă bucur că am realizat un proiect pe care să îl pot folosi oricând voi dori, știind că este realizat de mine. | ||
+ | |||
+ | Am învățat cum este să testezi permanent funcționalitatea și cum să fiu atentă până la cel mai mic detaliu pentru cum arată codul si partea hardware. Overall, sunt mulțumită de progresul meu și de rezultatul final al proiectului. ^_^ | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Demo-ul proiectului: |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | https://drive.google.com/drive/folders/1HiiBZKtpVVICN6hZpQ_ekqxAuGifKx-2?usp=sharing |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
- | </note> | + | |
+ | Link GitHub pentru proiect: | ||
+ | https://github.com/lauranicoara/Health-Kit | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 254: | Line 316: | ||
3 mai - crearea paginii de documentatie | 3 mai - crearea paginii de documentatie | ||
+ | 17 mai - milestone hardware | ||
+ | |||
+ | 25 mai - milestone software | ||
+ | |||
+ | 28 mai - finalizare pagină documentație | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | Resurse Hardware: |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * https://microcontrollerslab.com/ad8232-ecg-module-pinout-interfacing-with-arduino-applications-features/ |
- | </note> | + | * https://github.com/sparkfun/AD8232_Heart_Rate_Monitor/blob/master/Fritzing/AD8232_Heart_Rate_Monitor_Demo_bb_Fritzing_Corrected.jpg |
+ | * https://www.analog.com/media/en/technical-documentation/data-sheets/AD8232.pdf | ||
+ | * https://microcontrollerslab.com/max30100-pulse-oximeter-heart-rate-sensor-esp32/ | ||
+ | * https://www.analog.com/media/en/technical-documentation/data-sheets/MAX30100.pdf | ||
+ | |||
+ | Resurse Software: | ||
+ | * https://lastminuteengineers.com/max30100-pulse-oximeter-heart-rate-sensor-arduino-tutorial/ | ||
+ | * https://lastminuteengineers.com/arduino-micro-sd-card-module-tutorial/ | ||
+ | * https://github.com/arduino-libraries/SD | ||
+ | * https://github.com/oxullo/Arduino-MAX30100 | ||
+ | * https://how2electronics.com/ecg-monitoring-with-ad8232-ecg-sensor-arduino/ | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||