1. Introducción

En esta guía explicaremos cómo construir un generador de electrocardiograma (ECG) utilizando para ello tres elementos básicos: un iPad , un arduino y un conversor digital/analógico.

Etiquetas Tag:

Arduino, iOS, ECG, simulador, electromedicina

Prerrequisitos:

Objective-C Básico.

Arduino básico.

Documentos y referencias:

WEBs:

Web oficial de desarrolladores de iOS

https://developer.apple.com/devcenter/ios/index.action

Web oficial de Arduino

http://arduino.cc

Información sobre arritmias cardiacas:

http://www.arritmias.es/index/index.php

http://www.instructables.com/id/ECG-Simulator/#step0

Cable serie RedPark para iOS:

http://redpark.com/ttl-serial-cable-c2-ttl/

LIBROS:

"iOS Sensor Apps with Arduino" (2011). ALLAN, ALASDAIR. O’Reilly Media.

"Arduino Cookbook" (2011). MARGOLIS, MICHAEL.O’Reilly Media.

MATERIAL NECESARIO

Software

● Entorno de desarrollo Arduino

● Entorno de desarrollo Xcode

● Certificado de desarrollador iOS

● Archivos del proyecto (Arduino y Xcode)

Hardware

● Ordenador MAC

● Arduino Mega

● Conversor D/A (DAC): MCP4921

● Resistencia: 220 Ohmios, 1/4W

● iPad

● Osciloscopio Digital

● Cable Serial RedPark (y APIs)

● Cable USB

● Cables conexión arduino-protobard

● Protoboard

2. El electrocardiograma (ECG)

El mundo de la electromedicina al igual que otros sectores tecnológicos, está sometido a una constante evolución que provoca que salgan al mercado dispositivos y equipamiento médico cada vez más avanzado, haciendo posible un mejor diagnóstico y tratamiento de enfermedades de todo tipo.

El electrocardiógrafo, dispositivo imprescindible en todo centro hospitalario, ayuda en el diagnóstico de enfermedades de origen cardíaco. Sirve para realizar electrocardiogramas (ECG), que no es más que un registro gráfico de la actividad eléctrica del corazón. Analizando las señales recogidas en un "electro", es posible diagnosticar numerosas enfermedades cardiacas como por ejemplo trastornos del ritmo. Dado la efectividad y relativa simpleza de esta prueba diagnóstica no invasiva, su inclusión en revisiones médicas rutinarias, es cada vez más frecuente.

Con el fin de realizar demostraciones y sesiones formativas para el uso adecuado del electrocardiógrafo sin necesidad de disponer de un paciente real al que realizar un "electro", son de gran utilidad los Simuladores de Señales Cardiacas (ECG), encargados de generar señales que emulan las señales cardiacas reales que un corazón puede llegar a producir. Además, estos simuladores pueden ayudar en el ajuste y calibración de los electrocardiógrafos.

3. Plataformas de prototipado y hardware libre

El desarrollo y uso cada vez más frecuente de plataformas que facilitan el prototipado hardware como Arduino o Raspberry Pi, entre otras, así como el auge del movimiento de hardware libre, ha puesto en manos de desarrolladores y creativos una serie de herramientas no disponibles en el pasado, lo que está provocando un incremento significativo de iniciativas y proyectos abiertos de toda índole.

Asimismo, el uso cada vez más generalizado de "smartphones" y "tablets", los cuáles incluyen numerosos sensores como acelerómetros, giroscopios, GPS…, facilitan aún más el desarrollo y alcance de proyectos en los que intervienen multitud de variables y magnitudes físicas.

La disponibilidad de estas plataformas, así como la cantidad de documentación accesible en Internet que poco a poco la comunidad promotora del hardware libre ha ido generando, han sido elementos claves para el desarrollo del proyecto que se presenta en esta guía. Para el caso que nos ocupa, como plataforma hardware se ha utilizado Arduino, que junto con un Conversor Digital/Analógico, es la parte del sistema encargada de la generación de las señales que se pretenden simular. El interfaz de usuario se ha implementado en iOS y está diseñado para que sea ejecutado en un iPad.

4. Objetivo de la guía

En esta guía se explicará como crear un Generador de Señales Cardiacas, compuesto por tres elementos básicos: un iPad, un Arduino y un Conversor Digital/Analógico. Se describirán las herramientas y elementos software y hardware necesarios para implementar el proyecto, y cuál es el funcionamiento de cada uno de ellos.

5. El Ciclo Cardíaco y El Electrocardiograma (ECG)

El objetivo de esta guía no es el de describir el ciclo cardíaco en detalle, tan sólo se pretende dar una visión general para que el lector pueda entender mejor de donde proviene la señal cardiaca, señal protagonista en nuestro sistema.

El ciclo cardíaco representa el conjunto de eventos relacionados con el corazón que se producen desde el comienzo de un latido al comienzo del siguiente. Fenómenos como la contracción y relajación de las diferentes cavidades cardíacas (aurículas y ventrículos), apertura y cierre de las válvulas cardiacas (pulmonar, tricúspide, mitral y aórtica), etc... tienen lugar en diferentes momentos del ciclo.

El ciclo cardíaco no podría llevarse a cabo sin ayuda del sistema de conducción eléctrico del corazón. Dicho sistema se encarga de propagar el impulso eléctrico iniciado por el nódulo sinusal (fig. 03-1) ubicado en la aurícula derecha, a través del nódulo AV (fig. 03-2), haz de His y fibras de Purkinje, hasta llegar a los ventrículos. Esta corriente eléctrica es la responsable de la contracción de las células cardiacas (miocitos) que componen el corazón y que generan el latido cardíaco.

La corriente eléctrica que recorre el corazón a lo largo del ciclo cardíaco, puede recogerse con ayuda de electrodos colocados en la piel y conectados a un electrocardiógrafo. La representación gráfica de esta señal es lo que se conoce como electrocardiograma. Las diferentes partes de la señal eléctrica se presentan en la siguiente figura.

Las amplitudes de las diferentes partes de la señal: onda P, complejo QRS, onda T así como los tiempos que separan cada una de estas partes: intervalo PR, intervalo QT, segmento PR y segmento ST. Varían de un persona a otra dentro de unos rangos. Con nuestro simulador, seremos capaces de variar tales amplitudes y tiempos para poder caracterizar diferentes perfiles de paciente.

2.1 Arritmias Cardiacas

Se considera ritmo normal en reposo aquel que va desde 60 a 100 latidos por minuto. Por debajo de este margen hablaremos de bradicardia y por encima de taquicardia. Cuando hacemos referencia a "arritmias cardíacas" normalmente nos referimos a ritmos anormales, a menudo fuera del rango de frecuencias cardíacas mencionado anteriormente.

Con el simulador seremos capaces de general señales cardiacas normales, bradicardias y diversos tipos de taquicardias. En la figura que se muestra a continuación se representa diferentes ECGs correspondientes a distintas ritmos cardiacos simulables por nuestro sistema.

3. Componentes del proyecto y herramientas

3.1 Elementos Software:

A continuación se describirá cada uno de los elementos software/hardware necesarios para la implementación del proyecto. Se indicará la versión utilizada junto al nombre de cada elemento en el momento de la elaboración de este proyecto, no siendo indicativo de que haya de usarse exactamente la misma versión.

IDE Arduino (v.1.0.6): Entorno de desarrollo (Interfaz Developer Environment) de Arduino. Es Opensource y puede descargarse de la siguiente web:
http://arduino.cc/en/Main/Software
IDE Xcode (v.6.1.1): Entorno de desarrollo (Interfaz Developer Environment ) de Apple.Puede descargarse a través de la App Store:
https://developer.apple.com/xcode/downloads/
Certificado de desarrollador iOS : Necesario para poder compilar proyectos iOS sobre dispositivos reales. Cuesta $100 al año:
https://developer.apple.com/support/technical/certificates/
Archivos del proyecto:
El proyecto puede descargarse desde el repositorio GitHub: https://github.com/alexishf/iOS-Arduino-ECG. Está distribuido en tres carpetas:
iPad_ECGSim: código fuente de la App iOS
Arduino_ECGSim: archivos a cargar en el Arduino
Documentos: documentación complementaria asociada al proyecto
Tanto el proyecto iOS como el Arduino integran todas las librerías necesarias para funcionar (incluidas las librerías de terceros utilizadas: RedPark y CorePlot), están preparados para ser compilados directamente tras su descarga.

3.2 Elementos Hardware:

Ordenador Mac (MacBookPro de finales del 2011, OS X Yosemite 10.10.1): Se necesita un ordenador de Apple para poder utilizar el XCode.
Arduino Mega.
Conversor Digital/Analógico (DAC) (MCP4921): Conversor digital/analógico de 12 bits con interfaz SPI. Genera la señal cardiaca analógica a partir de la información digital enviada por el Arduino.
Resistencia de carga (220 Ohmios - 1/4w) : Resistencia conectada a la salida del DAC.
iPad (iPad 2, iOS 7.0.6): Es el dispositivo con el que interactuará el usuario para controlar el simulador. En el iPad va instalada la App que hace las veces de interfaz gráfica y que se comunicará con el Arduino.
Osciloscopio (Rigol DS1052E): El osciloscopio no forma parte del simulador en sí pero lo necesitamos si queremos visualizar las señales generadas por el simulador. Necesitaremos un osciloscopio capaz de medir señales de baja frecuencias dada que nuestra señal cardiaca puede llegar a tener un frecuencia inferior a 1Hz.
Cable Serial RedPark (TTL Serial Cable (C2-TTL) ) : Es el cable serie que se usará para comunicar el iPad con el Arduino.
Nota: Dado que se ha utilizado un iPad2 para desarrollar el proyecto, el cable serie que se ha elegido cuenta con el conector ‘Apple 30-pin dock connector’. Los iPad actuales disponen del conector ‘Apple Lightning connector’’ por lo que si se va a utilizar un iPad con este tipo de conector, se ha de adquirir el cable RedPark correspondiente o hacer uso de un adaptador.

Placa de prototipado ("Protoboard") (Placa de 550 contactos ): Placa donde insertaremos el conversor digital y la resistencia de carga para poder conectar fácilmente ambos elementos con el Arduino y el osciloscopio.

Cables varios : Cable USB para conectar el Arduino al PC y poder cargar los archivos del proyecto y alimentar el Arduino y cables ‘jumper’ macho para interconectar el Arduino con los elementos de la ‘protoboard’.

4. Montaje

4.1 Instalación de los entornos de desarrollo (IDE)

En primer lugar hemos de instalar los entornos de desarrollo del Arduino y Apple (Xcode) para poder cargar los proyectos en ellos y compilarlos sobre el Arduino y iPad respectivamente. Ambos entornos son gratuitos y pueden descargarse e instalarse fácilmente.

XCode:Para descargarlo hemos de acceder a la AppStore y teclear en el cuadro de búsqueda ‘Xcode’. Esto nos llevará a una pantalla desde la cual aparece el icono representativo de la aplicación. Clicar ‘descargar’ debajo del icono para comenzar el proceso de descarga e instalación.IDE Arduino: Hemos de acceder al website oficial de Arduino y acceder a la sección de ‘Download’http://arduino.cc/en/Main/Software. Una vez ahí, hemos de seleccionar ‘Mac OS X’ para comenzar la descarga del archivo de instalación .dmg para nuestro Mac. Tras la descarga sólo tendremos que hacer doble clic en él para comenzar la instalación.

No es el objetivo de esta guía describir en detalle el proceso de instalación de estos entornos ni las características de los mismos, por lo que si el lector necesita información complementaria se recomienda consultar los siguientes documentos:

http://arduino.cc/en/Guide/MacOSX

https://developer.apple.com/xcode/

4.2 Descarga de los archivos del proyecto

El proyecto se encuentra alojado en GitHub, repositorio gratuito muy utilizado por desarrolladores que desean compartir código. Tras hacer clic en el siguiente enlace: https://github.com/alexishf/iOS-Arduino-ECG, hemos de seleccionar "Download ZIP" (parte inferior derecha de la pantalla) para comenzar el proceso de descarga. El proyecto Arduino está alojando en la carpeta Arduino_ECGSim y el de Xcode en la carpeta iPad_ECGSim.

4.3 Montaje del circuito

El esquema del circuito se muestra en la siguiente imagen:

Dado que los elementos que componen el hardware del sistema no son muy numerosos, se montará el circuito sobre una placa de prototipado (‘protoboard’), sin llegar a trasladarlo a una PCB.

El Arduino, el conversor y la resistencia se interconectan con los cables "jumper". También se utilizarán estos cables para conectar el cable serie a los puertos TX0 y TX1 del Arduino. El Arduino quedará conectado al puerto USB ya que lo utilizaremos para alimentar el circuito. Por último, se conecta el otro extremo del cable serie al iPad y el osciloscopio a los extremos de la resistencia de cargar para poder visualizar las señales.

5. Manejo del simulador

5.1 Inicialización

Antes de inicializar el simulador, hemos de mantener desconectado el cable USB de alimentación del Arduino y el cable serie desconectado del iPad. A continuación, seguir lo siguientes pasos:

1) Tras compilar el proyecto el iPad, hacemos click en el icono iPadECGSim para lanzar la aplicación.

Pantalla inicial de la aplicación, los iconos de "cable conectado" y "hardware inicializado" (parte inferior derecha de la pantalla) aparecen desactivados .

2) Conectar el cable serie al iPad.

Si el cable se ha detectado correctamente, ha de aparecer el mensaje "Cable conectado".

3) Alimentar el circuito, conectando el cable USB al Arduino.

4) Iniciar el hardware clicando en el icono azul con forma de chip.

Si el hardware se ha inicializado correctamente aparecerá el mensaje "Hardware inicializado".

5) En este punto, los iconos de "cable conectado" y "hardware inicializado" aparecen en color verde. Pulsar el botón COMENZAR.

Este es la pantalla principal del simulador. Desde esta pantalla se podrán seleccionar los diferentes ritmos cardiacos simulables.

5.2 Control del ritmo sinusal

El ritmo sinusal (RS) es el ‘ritmo normal’ de un corazón. Se denomina así ya que el pulso eléctrico que inicia un latido se origina en una parte del corazón llamada ‘nódulo sinusal’ que viene a ser el marcapasos biológico de todo corazón. Las parámetros relacionados con el ritmo sinusal se controlan con el siguiente panel:

El panel de control del ritmo sinusal puede dividirse en cuatro partes:

● Botón RS para activar el ritmo sinusal.

● Control de temporización de la señal: frecuencia cardiaca, intervalo PR e intervalo QT.

● Control de amplitud de las diferentes partes de la señal cardiaca: onda P, complejo QRS y onda T.

● Control de amplitud de la señal total.

En la siguiente imagen se muestra un ejemplo de un ritmo sinusal con un intervalo PR de 200 milisegundos. A la izquierda se muestra la pantalla del iPad y a la derecha la señal medida en el osciloscopio

5.3 Selección de ritmos

En el panel de ritmos podremos seleccionar otros ritmos diferentes del sinusal:

A continuación se muestran dos ejemplos de dos ritmos tal y como se verían en la pantalla del iPad y en la pantalla del osciloscopio. (Arriba: taquicardia ventricular rápida, abajo: fibrilación ventricular 1)

5.4 Grabación de ritmos e impresión

En el Panel de Grabación de ECG disponemos de los controles necesarios para grabar la señal que va mostrando en el visor de ECG de la parte inferior de la pantalla.

Una vez seleccionado el tiempo de grabación deseado (en segundos), pulsaremos el botón de grabación (REC) para iniciar la captura del ritmo. La barra de progreso bajo el selector de tiempo y botones REC/STOP, indica el tiempo de grabación transcurrido. Una vez la grabación ha concluido, podremos pulsar sobre la frase ‘MOSTRAR SEÑAL GRABADA’ para visualizar la señal en un documento en formato PDF. El simulador ofrece la posibilidad de imprimir este documento, pulsando la tecla ‘IMPRIMIR’ ubicada en la parte superior derecha de la pantalla donde se muestra la señal grabada. Si disponemos de una impresora WiFi compatible con ‘AirPrint’ podremos imprimir la señal guarda. El proceso descrito se muestra resumido en la siguientes imágenes:

6. Funcionamiento

En este capítulo se explicará de forma general cómo funciona el simulador internamente, sin entrar en demasiados detalles. Por falta de espacio no se ha incluido el código fuente en esta guía. Tanto los archivos fuente que conforman el proyecto Arduino, como los del Xcode, incluyen numerosos comentarios con aclaraciones que ayudan a entender el funcionamiento en detalle del simulador.

6.1 Señales cardiacas

Las señales que representan los ritmos cardiacos generadas porque genera el simulador, han sido muestreadas con un intervalo de 1 milisegundo entre muestras y escaladas a un rango de valores de 0-4095, como consecuencia de la utilización de un dado que hemos utilizado en nuestro circuito un conversor digital/analógico de 12 bits (2^12=4096). Las señales se han guardado en vectores de constantes usando el formato del lenguaje de programación "C":

static const short fv1_data[] = {2487, 2599, 2711, 2822, 2934, ...};

En el caso concreto del ritmo sinusal, para poder tratar los diferentes tramos del ritmo de forma independiente, tanto a nivel de la temporización como de las amplitudes de las ondas que lo componen (P, QRS y T), la señal se ha almacenado en tres vectores independientes: p_data[], qrs_ data[] y t_data[].

Todos los vectores de señales han sido almacenados en el fichero "ritmos.c". Este fichero ha sido incluido tanto en el proyecto Arduino como en el XCode. El Arduino usa la información contenida en ese fichero para generar las señales "reales" mientras que el iPad se utiliza para representar la señal de forma gráfica en el visor de ECG del simulador.

6.2 Diagrama de funcionamiento

Los diagramas que se muestra a continuación, representan cómo se Da la generación generan de las señales, así como y de la lógica de control de la misma se encarga que se aplica en el Arduino. El iPad representa el interfaz del simulador, comunicándose con el Arduino a través de un conjunto de comandos predefinidos.

El Arduino está en todo momento "escuchando" los comandos que le llegan a través del puerto serie y que se componen de dos partes: código del comando y valor. Una vez se detecta un comando se decodifica y se procede a actuar según el comando.

Las muestras de la señal se envían al conversor digital/analógico cada 1 ms. Para que esto suceda, hemos de cargar un valor apropiado en el registro del "Timer 2" del microcontrolador (ver comentarios en el código fuente, bloque "void setup"). Cuando el contador expira, se llama a la ISR (Interrupt Service Routine) y se escribe el valor de la muestra en el bus SPI.

Cada ritmo cardíaco ha sido implementado con una máquina de estados, el número de estados varía en función del ritmo cardiaco.

La máquina de estados del ritmo sinusal es la que incluye más estados para poder permitir la configuración de cada uno de los tramos que componen la señal. En la siguiente figura se muestra, a modo de ejemplo, los diferentes estados del ritmo sinusal:

7. Conclusiones

Con esta guía se ha tratado ofrecer al lector la oportunidad de implementar un simulador de señales cardiacas de forma sencilla, utilizando componentes que pueden encontrarse fácilmente en el mercado. Animamos al lector a seguir evolucionando este proyecto y a compartir los progresos con la comunidad de hardware libre.