This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:razvan.rotaru1601 [2025/05/27 00:57] razvan.rotaru1601 [Jurnal] |
pm:prj2025:rnedelcu:razvan.rotaru1601 [2025/05/28 15:22] (current) razvan.rotaru1601 |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Real-time ECG Analyzer ====== | + | ====== Real-time ECG Analyzer ====== |
===== Introducere ===== | ===== Introducere ===== | ||
- | * Proiectul consta intr-un sitem de monitorizare a activitatii cardiace (ECG), alcatuit dintr-un modul AD8232 conectat la un Marble Pico. Dispozitivul afiseaza in timp real waveform-ul activitatii cardiace si frecventa cardiaca. | + | |
- | * Scopul principal este dezvoltarea dispozitivului care va oferi datele despre frecventa cardiaca in timp real. De asemenea, va permite si vizualizarea lor in timp real intr-o aplicatie. | + | Proiectul constă într-un sistem de monitorizare a activității cardiace (ECG) în timp real, alcătuit dintr-un modul AD8232 conectat la un Marble Pico. Dispozitivul afișează waveform-ul activității cardiace și calculează frecvența cardiacă cu precizie ridicată. |
- | * Am vazut mai multe proiecte care foloseau modului dar inregistrau doar frecventa cardiaca asa ca am vrut sa il fac mai avansat. | + | |
- | * Ar putea fi util ca o varianta mai light pentru dispozitivele ecg din industrie. | + | **Obiective principale:** |
+ | * **Monitorizare continuă:** Achiziție de date ECG la 250Hz pentru o rezoluție temporală optimă | ||
+ | * **Procesare avansată:** Implementarea algoritmului Pan-Tompkins pentru detectarea complexelor QRS | ||
+ | * **Interfață intuitivă:** Aplicație desktop cu afișare în timp real și analiză calității semnalului | ||
+ | * **Portabilitate:** Design compact, potrivit pentru monitorizare ambulatorie | ||
+ | |||
+ | **Motivația proiectului:** Majoritatea soluțiilor existente se limitează la măsurarea frecvenței cardiace. Acest proiect oferă o analiză completă a semnalului ECG, incluzând filtrarea avansată DSP și detectarea automată a problemelor de conectare. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Utilizatorul va introduce electrozii in jack, iar daca nu sunt introdusi, va fi aprins LED-ul rosu, verde daca sunt introdusi. Dupa se va conecta la calculator dispozitivul prin USB si se va deschide aplicatia. Aplicatia va incepe automat sa afiseze datele colectate de la electrozi procesate. Zgomotul produs de miscarea utilizatorului, de 60hz sau altele care ar putea aparea si deforma semnalul vor fi filtrate folosind tehnici DSP. | + | |
+ | **Workflow utilizator:** | ||
+ | - **Conectarea electrozilor** - LED-uri de stare indică conectarea corectă (roșu = deconectat, verde = conectat) | ||
+ | - **Interfața USB** - Conectare automată la calculator prin USB CDC | ||
+ | - **Lansarea aplicației** - Auto-detectare dispozitiv și inițializare | ||
+ | - **Monitorizare live** - Afișare continuă cu analiza calității semnalului | ||
+ | |||
+ | **Procesarea semnalului:** | ||
+ | * **Filtrare hardware:** Filtru low-pass pasiv la ~17Hz pentru eliminarea zgomotului de înaltă frecvență | ||
+ | * **Algoritm Pan-Tompkins:** Detectare robustă a complexelor QRS | ||
{{ razvan.rotaru1601-schema_bloc.png?700x500 }} | {{ razvan.rotaru1601-schema_bloc.png?700x500 }} | ||
Line 12: | Line 29: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | * Lista piese | + | **Lista componente:** |
- | * AD8232 | + | |
- | * Marble Pico | + | ^ Componentă ^ Specificații ^ Rol ^ |
- | * breadboard | + | | **AD8232** | Amplificator instrumental ECG | Achiziție și pre-procesare semnal | |
- | * condensator 0.47uF | + | | **Marble Pico** | RP2040, 264KB RAM | Procesare și comunicație | |
- | * rezistor 20kOhm | + | | **Condensator** | 0.47µF | Filtru low-pass | |
- | * rezistente | + | | **Rezistor** | 20kΩ | Polarizare amplificator | |
- | * electrozi | + | | **Electrozi** | Gel solid | Interfață bioelectrică | |
- | * Interfete Hardware folosite | + | |
- | * GPIO pentru starea electrozilor | + | **Interfețe hardware utilizate:** |
- | * UART pentru a transmite datele la aplicatia software | + | * **GPIO pins:** Monitorizare stare electrozi (leads-off detection) |
- | * Timere + ADC pentru a citi datele de la modulul AD8232 | + | * **UART/USB CDC:** Transmisie date la 115200 baud |
- | * Filtru low-pass pasiv de ~17Hz pentru filtrare zgomot | + | * **Timer + ADC:** Sampling sincronizat la 250Hz, rezoluție 12-bit |
+ | * **LED indicators:** Feedback vizual stare sistem | ||
+ | |||
+ | **Circuit de filtrare:** | ||
+ | Filtrul low-pass pasiv (R=20kΩ, C=0.47µF) oferă o frecvență de tăiere fc = 1/(2πRC) ≈ 17Hz, eliminând zgomotul muscular și interferențele de înaltă frecvență. | ||
{{ razvan.rotaru1601-hardware.jpg?600x400 }} | {{ razvan.rotaru1601-hardware.jpg?600x400 }} | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Cod firmware: | + | |
- | * Simplu timer setat la o frecventa de 250hz (4ms) | + | **Firmware (Marble Pico):** |
- | * Sampling pe ADC | + | <code c> |
- | * Trimitere peste UART/USB a datelor in format int16_t | + | #define SAMPLING_INTERVAL_MS 4 // 250 Hz |
- | Cod software calculator: | + | |
- | * Meniu selectare interfata seriala / auto-detectare Pico | + | bool timer_callback(repeating_timer_t *rt) { |
- | * Afisare graf ECG in timp real cu pentru ultimele 6s/1500puncte | + | gpio_put(LED_PIN, !gpio_get(LED_PIN)); |
- | * Procesare semnal calculat cu algoritmul Pan-Tompkins | + | |
- | * Afisare heartbeat calculat ca moving average | + | int16_t adc_value = -1; |
- | * Afisare calitate semnal (deconectat, electrozi deconectati, ok) | + | bool leads_connected = true; |
- | * Afisare consola debug | + | |
+ | if (gpio_get(LO_PLUS) || gpio_get(LO_MINUS)) { | ||
+ | leads_connected = false; | ||
+ | } | ||
+ | |||
+ | if (leads_connected) { | ||
+ | adc_value = adc_read(); | ||
+ | } | ||
+ | printf("%d\n", adc_value); | ||
+ | return true; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | **Caracteristici firmware:** | ||
+ | * **Timer repetat:** 4ms interval pentru sampling la 250Hz | ||
+ | * **Detecție electrozi:** Verificare stare LO+ și LO- pentru conectare | ||
+ | * **Output format:** Valori ADC printate ca int16_t prin USB CDC | ||
+ | * **LED indicator:** Toggle pentru feedback vizual | ||
+ | |||
+ | **Aplicația desktop:** | ||
+ | |||
+ | **Funcționalități:** | ||
+ | * **Citire date:** Parse serial input pentru valori ADC | ||
+ | * **Grafic real-time:** Afișare waveform ECG pentru ultimele 6 secunde | ||
+ | * **Algoritm Pan-Tompkins:** Detectare complexe QRS pentru calculul heart rate | ||
+ | * **Status:** Afișare stare electrozi și calitate semnal | ||
{{ razvan.rotaru1601-software.png }} | {{ razvan.rotaru1601-software.png }} | ||
- | ===== Rezultate Obţinute ===== | + | ===== Rezultate Obținute ===== |
- | <note tip> | + | **Funcționalități implementate:** |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | * **Sampling stabil:** 250Hz cu timer hardware |
- | </note> | + | * **Detecție electrozi:** LED indicators pentru starea conexiunii |
+ | * **Transmisie USB:** Date ECG în timp real către aplicația desktop | ||
+ | * **Interfață grafică:** Afișare waveform și calculul basic al heart rate-ului | ||
+ | |||
+ | **Potențial de scalare:** | ||
+ | Design-ul permite extinderea cu mai multe canale ECG prin multiplexarea ADC-ului și procesarea paralelă. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | **Lecții învățate:** |
+ | * **Zgomotul** este o problemă majoră pentru semnalele ECG de amplitudine mică | ||
+ | * **Sursa de alimentare** introduce interferențe care afectează calitatea semnalului | ||
+ | * **Filtrarea hardware** (condensator + rezistor) ajută dar nu elimină complet zgomotul | ||
+ | **Dezvoltări viitoare:** | ||
+ | - **Îmbunătățirea filtrării** - filtre digitale mai avansate în software | ||
+ | - **PCB dedicat** pentru reducerea zgomotului și a dimensiunilor | ||
+ | - **Algoritmi mai buni** pentru detectarea heart rate-ului în prezența zgomotului | ||
+ | - **Interfață mai user-friendly** cu setări configurabile | ||
+ | |||
+ | ===== Download ===== | ||
https://github.com/RouterInfoMan/ecg-pm | https://github.com/RouterInfoMan/ecg-pm | ||
+ | |||
+ | **Conține:** | ||
+ | * Cod sursă firmware (C/C++) | ||
+ | * Aplicație desktop (Python/Qt) | ||
+ | * Documentație hardware (schemă) | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | * Saptamana 27.03 - 4.05 | + | * **Saptamana 27.03 - 4.05** |
* Am asamblat legatura Marble Pico - AD8232 si simulat basic polling fara timere | * Am asamblat legatura Marble Pico - AD8232 si simulat basic polling fara timere | ||
* Am trimis datele prin UART la un serial plotter | * Am trimis datele prin UART la un serial plotter | ||
+ | * **Probleme întâlnite:** Zgomot excesiv, sampling neuniform | ||
* Rezultatul obtinut | * Rezultatul obtinut | ||
{{ razvan.rotaru1601-ecg_output.jpg?400x400 }} | {{ razvan.rotaru1601-ecg_output.jpg?400x400 }} | ||
+ | * **Saptamana 5.05 - 11.05** | ||
+ | * Am adaugat timere hardware pentru sampling precis la 250Hz | ||
+ | * Am refactorizat codul firmware pentru eficiență | ||
+ | * Am început dezvoltarea aplicației desktop cu interfață grafică | ||
+ | * **Milestone:** Achiziție stabilă cu timer repetat | ||
- | * Saptamana 5.05 - 11.05 | + | * **Saptamana 12.05 - 18.05** |
- | * Am adaugat timere si simplificat firmware-ul | + | * Am implementat baza algoritmului Pan-Tompkins pentru detectarea QRS |
- | * Am scris mare parte din aplicatia software | + | * Am dezvoltat aplicația desktop pentru afișarea graficului în timp real |
- | * Saptamana 12.05 - 18.05 | + | * **Problemă:** Algoritmul nu detecta corect complexele QRS din cauza configurării greșite |
- | * Am scris si algoritmul Pan-Tompkins dar are un bug | + | |
- | * Saptamana 19.05 - 25.05 | + | * **Saptamana 19.05 - 25.05** |
- | * Am rezolvat bug-ul, am configurat gresit filtrul digital de la algoritm | + | * Am corectat problemele cu algoritmul Pan-Tompkins (configurare filtru digital) |
+ | * Am testat sistemul pe mai multe persoane pentru validarea funcționării | ||
+ | * Am îmbunătățit interfața aplicației cu indicatori de stare | ||
+ | * **Rezultat:** Sistem funcțional care afișează ECG și calculează heart rate-ul | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | |||
https://github.com/GroundStudio/GroundStudio_Marble_Pico/blob/main/Documentation/REV0.0.3/Datasheet%20GroundStudio%20Marble%20Pico%20REV%201.1.pdf | https://github.com/GroundStudio/GroundStudio_Marble_Pico/blob/main/Documentation/REV0.0.3/Datasheet%20GroundStudio%20Marble%20Pico%20REV%201.1.pdf | ||
- | |||
<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> |