Analizador ECG de Precisión con Edge Impulse y Arduino Nano 33 BLE Sense
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Arduino Nano 33 BLE Sense | 1 |
| Monitor de ritmo cardíaco monoderivación AD8232 (SparkFun) | 1 |
| Pantalla OLED 0,96" 128x64 (ElectroPeak) | 1 |
Herramientas Necesarias
- Soldador (genérico)
- Estaño sin plomo
- Kit 10 cables jumper 5 cm
Aplicaciones y Servicios en Línea
- Edge Impulse Studio (entrenamiento TinyML)
- MATLAB (simulación señales ECG)
- Arduino IDE
- Microsoft Visual Studio 2017
Sobre el Proyecto
Problema: Infartos Súbitos y Aumento de Mortalidad
En la última década, las muertes por infarto agudo de miocardio han aumentado drásticamente, especialmente en países en desarrollo (ej. India) por falta de recursos médicos en zonas rurales, además de factores genéticos y de estilo de vida.
Aporte Tecnológico: TinyML en el Edge
Se desarrolla un analizador ECG de bolsillo basado en TinyML con Edge Impulse que diagnostica patologías cardíacas sin conexión a la nube, con latencia mínima.
Limitaciones de Equipos Actuales
- Dispositivos IoT envían ECG bruto a móvil/servidor para análisis (requieren Internet).
- Aplicaciones PC/móvil reciben señal y analizan (dependen de hardware potente).
- Todos dependen de conectividad o procesamiento externo.
Solución Clave
- Análisis ECG en el dispositivo (Edge Impulse), sin Internet.
- Latencia mínima.
- Modelo TinyML de ~15 KB ROM, ejecutable en cualquier microcontrolador compatible.
- Clasifica en tres clases: Normal, Fibrilación Auricular, Bloqueo AV de 1er grado.
Arquitectura
- Lectura ECG con AD8232.
- Simulación de patrones ECG patológicos.
- Enfoque novedoso para generar datasets de calidad.
- Entrenamiento del modelo.
- Test de precisión e integración del código de aplicación con la librería desplegada.
Conceptos Básicos de ECG
Onda ECG = 5 ondas: P, Q, R, S, T.
- Fibrilación Auricular: intervalos R-R irregulares, ausencia de onda P clara.
- Bloqueo AV 1er grado: intervalo P-R > 200 ms.
Construcción del Analizador
1. Lectura ECG con AD8232
Conectar AD8232 al Nano 33 BLE Sense según diagrama. Cargar sketch de prueba (lee A0, pines 2/3 para detección de electrodos sueltos). Visualizar en Serial Plotter (Ctrl+Shift+L).
2. Simulación de Patrones ECG con MATLAB Signal Builder
- Guardar ECG normal en Excel (columna A: tiempo *0,005 s; columna B: valor ADC).
- En Simulink, usar bloque Signal Builder + Scope. Importar Excel.
- Editar manualmente (zoom 5 s, arrastrar puntos) para crear:
- Fibrilación: variar intervalos R-R aleatoriamente.
- Bloqueo AV1: retrasar onda P para que P-R > 200 ms.
- Exportar a .mat → extraer array → script MATLAB
Excel2Arrayconverter.mgenera array C para incrustar en firmware.
3. Enfoque Novedoso: Features Derivadas (R-R y P-R)
El ECG filtrado crudo en ventana de 3 s no permite distinguir clases (precisión <23 %). Ventanas más largas consumen mucha RAM.
Idea: imitar al cardiólogo que mide cajas entre picos. Se generan dos ondas derivadas del ECG filtrado:
- R-R Interval: distancia entre picos R consecutivos. En normal = 100 constante. En fibrilación: salta a -100 cuando hay irregularidad.
- P-R Interval: distancia P-R. En normal = 50 constante. En bloqueo AV1: cae a -50 cuando P-R > 200 ms.
Estas features discretas y robustas elevan la precisión del modelo a >90 %.
4. Entrenamiento en Edge Impulse
- Configurar
SIMULATION=1(datos simulados) o0(sensor real) en librería. - Comentar/descomentar buffers de datos según modo.
- Adquisición de datos en tres etiquetas: Normal, Fibrilación, Bloqueo AV1.
- Daemon Edge Impulse a 202 Hz:
edge-impulse-daemon --frequency 202. - Crear Impulso: ventana 3000 ms, aumento 2999 ms, detección anomalía K-means.
- Features espectrales: filtro "None".
- Clasificador NN: 40 ciclos, learning rate 0,005 → 92,9 % precisión. Anomalía: RMS de R-R y P-R.
5. Test e Integración
- Precisión en test: ~97 %.
- Despliegue: seleccionar "Arduino Library" en Edge Impulse.
- Añadir librería EI generada + librería
ECG_Analyzer(GitHub) al IDE Arduino. - Fusionar código de aplicación en ejemplo
nano_ble33_sense_accelerometer_continuous→ECGAnalyzer.ino. - Flashear con
SIMULATION=0enecg_analyzer.c.
Hardware
Conexiones según diagrama Fritzing adjunto. Montaje final en caja compacta con pantalla OLED mostrando diagnóstico en tiempo real.
Resultado Final
Dispositivo de bolsillo que clasifica ECG en Normal / Fibrilación Auricular / Bloqueo AV 1er grado con >97 % precisión en test, funcionando offline.
Créditos
Fundamentos ECG: geekymedics.com
Código
Repositorio completo: Manivannan-maker/ECGAnalyzer (incluye sketch, librería EI, librería ECG_Analyzer, scripts MATLAB, modelo Signal Builder).
Esquemáticos
Diagrama Fritzing (ecgdefault.fzz) e imagen de conexiones en el proyecto original.
Proceso de manufactura
- El arte y oficio de las tiaras: historia, materiales y diseño moderno
- Alambre de Espino: Historia, Construcción y Usos Modernos
- Monitor de higiene de inodoro con Walabot
- Machine Learning Práctico con reTerminal: Guía de Demos Edge Impulse y ARM NN
- Transforme un camión de juguete roto en vehículo RC con Raspberry Pi
- Kit MOSMusic: Control de Iluminación de Alta Potencia Sincronizada con Música vía MOSFET y Arduino
- Máquina de Malla Hexagonal Premium para Agricultura y Avicultura
- Dominando el corte por hilo: Guía completa de EDM por hilo
- Corte por Hilo CNC: Definición, Proceso y Aplicaciones
- Cortadoras por hilo EDM de alta precisión: Tecnología y fiabilidad
- 6 tipos de organizaciones impulsando la revolución del Edge Computing