Real-time ECG Analyzer
Introducere
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ă.
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ă
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:
Hardware Design
Lista componente:
Componentă | Specificații | Rol |
AD8232 | Amplificator instrumental ECG | Achiziție și pre-procesare semnal |
Marble Pico | RP2040, 264KB RAM | Procesare și comunicație |
Condensator | 0.47µF | Filtru low-pass |
Rezistor | 20kΩ | Polarizare amplificator |
Electrozi | Gel solid | Interfață bioelectrică |
Interfețe hardware utilizate:
GPIO pins: Monitorizare stare electrozi (leads-off detection)
UART/USB CDC: Transmisie date la 115200 baud
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ță.
Software Design
Firmware (Marble Pico):
#define SAMPLING_INTERVAL_MS 4 // 250 Hz
bool timer_callback(repeating_timer_t *rt) {
gpio_put(LED_PIN, !gpio_get(LED_PIN));
int16_t adc_value = -1;
bool leads_connected = true;
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;
}
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
Rezultate Obținute
Funcționalități implementate:
Sampling stabil: 250Hz cu timer hardware
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
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
Jurnal
Saptamana 27.03 - 4.05
Am asamblat legatura Marble Pico - AD8232 si simulat basic polling fara timere
Am trimis datele prin UART la un serial plotter
Probleme întâlnite: Zgomot excesiv, sampling neuniform
Rezultatul obtinut
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 12.05 - 18.05
Am implementat baza algoritmului Pan-Tompkins pentru detectarea QRS
Am dezvoltat aplicația desktop pentru afișarea graficului în timp real
Problemă: Algoritmul nu detecta corect complexele QRS din cauza configurării greșite
Saptamana 19.05 - 25.05
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