You are on page 1of 74

INSTITUTO TECNOLOGICO DE MERIDA

Desarrollo de
hardware y
software
biomtrico
(ECG) para
dispositivosco
n ANDROID

Cree a aquellos que buscan la verdad. Duda de los que la encuentran.


(AndreGide.)

AGRADECIMIENTOS
Agradezco de manera inmensurable a dios por nunca abandonarme.
Agradezco a mi familia por mi formacin como persona, a mi madre por la
educacin que me ha aportado, por su apoyo infinito y su indudable fe en m, a mi
padre por el apoyo y educacin que nunca me ha faltado, a mi hermano por la fe
que me ha tenido.
Extiendo mi agradecimiento para una persona especial que me ha ayudado,
credo en m y me ha enseado que no existen lmites mientras el deseo exista.
Gracias Reina Ayala.
Y a todos mis amigos que en lo largo de este camino nos hemos apoyado, hemos
redo, sufrido y superado adversidades. En especial a Oziel Villafaa que me ha
ayudado a hacer este proyecto posible
A nuestro asesor de tesis el MC. Geovanny Rafael Giorgana Macedo, por guiarnos
en el camino al xito a travs de sus enseanzas.

Emmanuel Gonzlez Lpez


Instituto tecnolgico de Mrida

A mi familia, por su inmenso cario y apoyo.

Deseo externar un sincero agradecimiento a las personas que de alguna manera han
colaborado en el desarrollo de este trabajo.
Quiero agradecer de todo corazn a mis padres porque siempre estuvieron conmigo
apoyndome en todo, agradecer su paciencia, el cario que han brindado a lo largo de toda
mi vida. Es un orgullo para m ser parte de esta familia.
A mis amigos que siempre nos hemos apoyado en todo en nuestra estancia en la carrera, a
mi amigo y compaero de proyecto Emmanuel Gonzales que sin su ayuda esto no hubiese
sido posible.
A nuestro asesor Geovanny Rafael Giorgana Macedo, por brindarnos y compartirnos su
tiempo y conocimientos.

JHONY OZIEL VILLAFAA HERRERA

Instituto tecnolgico de Mrida

ndice:
Captulo 1
1.1 Acerca del ECG............................................................................................... 1
1.1.1 Usos de ECG..................................................................................................3
1.1.2 Transductor ....................................................................................................3
1.1.3 Colocacin de los electrodos .........................................................................4
1.1.4 Derivaciones y triangulo de Einthoven..........................................................5
1.2 Amplificador de biopotenciales ..................................................................................6
1.2.1 Amplificador de instrumentacin ...........................................................................7
1.3 Andriod ........................................................................................................................7
1.3.1 Aplicaciones Android ..............................................................................................8
Captulo 2
2.1 Electrocardiogramas .................................................................................................10
2.2 Sistemas electrocardiogrficos inalmbricos ..........................................................11
2.3 CORSCIENCE Mdulo de ECG Bluetooth ........................................................12
2.4 Electrocardigrafo Inalmbrico Basado En Bluetooth .....................................14
2.5 Monitorizacin con Holter...................................................................................... 15

Captulo 3
3.1 Diagrama a Bloques .................................................................................................17
3.2 Sensor .......................................................................................................................17
3.3 Amplificador de instrumentacin ..........................................................................20
3.4 Amplificador con OFFSET ....................................................................................22
3.5. Filtro LP (pasa bajos) ........................................................................................... 26
3.6 ADC& MICRO CONTROLADOR (uC) .............................................................31
3.7 Bluetooth .................................................................................................................32
3.8 Programas necesarios para la interface ...............................................................36
3.9 Aplicacin de android ............................................................................................40
3.10Interfaz ..................................................................................................................40
ANEXO .........................................................................................................................47

ndice de figuras:
Figura 1.1 ECG normal ..........1
Figura 1.2 Ondas y segmentos del ECG 2
Figura 1.3Electrodos ..3
Figura 1.4WillemEinthoven .5
Figura 1.5Triangulo de Einthoven ...6
Figura 1.6 Amplificador de instrumentacin ...7
Figura 2.1 MonitorHolter 10
Figura 2.2 posicionamiento de dispositivo ......11
Figura 2.3 dispositivo wirelessECG .....11
Figura 2.5 Mdulo de ECG Bluethooth...12
Figura 2.6 Diagrama a bloques del dispositivo ...16
Figura 2.7 Electrocardiograma de Promediacin de Seales 15
Figura 2.8 Monitorizacin con Holter..16
Figura3.1 - Diagrama a bloques del sistema..17
Figura 3.2 Electrodo para ECG ..18
Figura3.3 - Resistencias de entrada ......19
Figura3.4 Triangulo de Eithoven ....20
Figura3.5 Amplificador de instrumentacin AD620 .21

Figura 3.6 AD620 con ganancia 7 .22


Figura3.7 Amplificador Operacional (OP AMP) .23
Figura3.8 Amplificador no inversor (OP AMP).....24
Figura3.9 divisor de voltaje 25
Figura3.10 Amplificador con OFFSET integrado ..26
Figura3.11 Filtro LP (pasa bajas).....27
Figura3.12 Filtro LP (pasa bajas) a utilizar...28
Figura3.13 Simulacin del filtro en Proteusv7.7 ....30
Figura3.14 a) Frecuencia antes de 100Hz b) Frecuencia superior a 100Hz30
Figura 3.15 Shield arduino ..31
Figura 3.16 Modulo bluetooth HC0532
Figura3.17 Esquemtico de conexin de HC-05 ......33
Figura 3. 18 Conexin Bluethooth con arduino ....34
Figura 3.19 Interfaz de usuario .41
Figura3.20 Ilustracin 1Definicion de las variables de la grafica ...42
Figura 21. Esquemtico completo en EAGLE. ..47

Introduccin
La salud es una parte importante en la vida de todo ser humano; y la prevencin, una tarea
esencial, por ello la medicina ha adoptado a la tecnologa como parte fundamental de su ser
en el desarrollo de mltiples herramientas.
A lo largo del tiempo han existido diversos aparatos que han ayudado a mejorar la calidad
de la salud humana y a la deteccin y prevencin de mltiples enfermedades. Sin embargo,
dichos aparatos, resultan poco prcticos; ya que por su gran tamao y sus elevados precios
nicamente instituciones con alto poder adquisitivo pueden adquirirlos.
Estudios recientes realizados por instituto nacional de estadstica y geografa (INEGI) han
demostrado que poco ms de 87 mil personas fallecieron a causa de alguna enfermedad del
corazn. En el mundo, las enfermedades cardiovasculares cobran 17.5 millones de vidas al
ao.
Estas son unas de la razones a las que va enfocado este proyecto, un dispositivo capaz de
monitorear seales electrocardiogrficas desde un telfono inteligente con sistema
operativo android a un costo relativamente bajo en comparacin con los equipos
electrocardiogrficos usados de manera comercial en medicina.

Objetivo General

Desarrollar un electrocardigrafo en un dispositivo android y fcil de usar que sea


capaz de monitorear la actividad cardiovascular.

Objetivos especficos

.Medir las seales electrocardiogrficas, amplificarla, filtrarla, digitalizarla.

Enviar la seal procesada de manera inalmbrica, recibirla en un telfono inteligente


y desplegar de manera grfica en tiempo real la seal entrante.

Hiptesis
Implementando un dispositivo porttil que monitoree constantemente la activad cardiaca de
las personas y al visualizando grficamente sta, se pretende que los decesos provocados
por enfermedades cardiovasculares puedan disminuir.
Justificacin
Las preguntas que sirvieron como pauta para la investigacin son:

Cul es una de las enfermedades con mayor tasa de mortandad Mxico?

Qu dispositivos existen para monitorear las enfermedades cardiovasculares?

los dispositivos existentes estn al alcance de todas las personas?

Para responder estas preguntas se propone el diseo de un dispositivo biomtrico que sea
capaz de medir seales electrocardiogrficas de forma clara y sin abarcar mucho espacio
como en otros instrumentos similares, a su vez se pretende reducir no solo el tamao sino

tambin los precios de un equipo (ECG). Existen dispositivos similares para su venta
comercial, sin embargo se ven delimitados para medir pulsaciones cardiacas o no pueden
graficar la seal en tiempo real. La importancia de este proyecto se define en 3 puntos
principales. Su tamao, su precio y su versatilidad.

Contribucin
Esta investigacin brinda informacin sobre la forma de desarrollar fsicamente mediante la
utilizacin de hardware y software el sistema de monitoreo porttil e inalmbrico para
lecturas electrocardiogrficas.
Se pretende aportar las bases del sistema de monitoreo inalmbrico para poder dar una
continuacin del procesamiento de seal para la deteccin de anomalas o alguna
enfermedad perteneciente al corazn.
Uno de los impactos de este proyecto es la aportacin que se le da a la comunidad
cientfica, ya que el producto de esta investigacin es destinado primeramente al rea de la
biomedicina, proporcionndoles una tecnologa que est a su alcance.

Captulo 1
Los temas presentados en este captulo son necesarios para la comprensin de la
investigacin y sus implicaciones.
1.1 Acerca del ECG
El electrocardiograma (ECG o tambin EKG, del alemn Elektrokardiogramm) es el
grfico que se obtiene con el electrocardigrafo para medir la actividad elctrica del
corazn en forma de cinta grfica continua. Es el instrumento principal de la
electrofisiologa cardiaca y tiene una funcin relevante en el cifrado y el diagnostico de las
enfermedades cardiovasculares.

Figura 1.1 ECG normal


Ondas y segmentos:
Las ondas del ECG se denominan P, QRS, T, U y tienen voltaje positivo o negativos. Se
originan por la despolarizacin y repolarizacin de distintas zonas del miocardio. A
continuacin se explicara de forma detallada cada una de las ondas y de los segmentos.

Figura 1.2 Ondas y segmentos del ECG


Onda P
La onda P es la seal elctrica que corresponde a la contraccin auricular. Ambas aurculas,
derecha e izquierda, se contraen simultneamente.
QRS
El complejo QRS corresponde a la corriente elctrica que causa la contraccin de los
ventrculos derecho e izquierdo, la cual es mucho ms potente que la de las aurculas y
compete a ms masa muscular, produce de este modo, una mayor deflexin en el ECG.
Onda T
La onda T representa la repolarizacin de los ventrculos. El complejo QRS oscurece
generalmente la onda de repolarizacin auricular, por lo que la mayora de las veces no se
ve. Elctricamente, las clulas del msculo cardiaco son como muelles cargados: un
pequeo impulso las dispara, las despolariza y contrae. La recarga del muelle es la
repolarizacin (tambin llamada potencial de accin).

Onda U

Esta onda suele ser de bajo voltaje irreconocible en la mayora de las ocasiones. Se
inscribe detrs de la onda T y sigue su misma polaridad, su presencia suele ser vinculada
a trastornos de tipo hidroelectrolticos, accin de determinadas drogas y ms raramente a la
isquemia.
1.1.1 Usos de ECG
Determinar si el corazn funciona de manera normal o sufre de anomalas (p. ej.: latidos
extra o saltos arritmia cardiaca).
Indicar bloqueos coronarios arteriales (durante o despus de un ataque cardiaco).
Se puede utilizar para detectar alteraciones electrolticas de potasio, calcio, magnesio u
otras.
Permitir detectar de anormalidades conductivas (bloqueo auriculo-ventricular, bloqueo de
rama).
Mostrar la condicin fsica de un paciente durante un test de esfuerzo.
Suministrar informacin sobre las condiciones fsicas del corazn.
1.1.2 Transductor
Los electrodos son el primer y principal elemento en la cadena de medida. Por lo tanto, el
ruido que pueda generarse en dicho elemento adquiere especial importancia. Su funcin es
la de transductor. Debe convertir las corrientes inicas, que son el mecanismo de
conduccin de las seales bioelctricas en los tejidos, en corrientes elctricas. Esta
transduccin debe ser hecha con la mayor fidelidad posible y adems, no debe perturbar la
seal a medir. Los parmetros importantes son pues, la impedancia y el ruido. La
3

impedancia debe ser lo ms baja posible para reducir el efecto de carga de la etapa
posterior de amplificacin y minimizar el efecto de las interferencias de modo comn que
aparecen a la entrada. Por otro lado la impedancia de entrada del sistema tiene que ser lo
ms elevada posible.
El electrodo est formado por una superficie metlica y un electrolito en contacto con la
piel.
1.1.3 Colocacin de los electrodos
Para la adquisicin analgica, se ha procedido del siguiente modo: tomamos la seal
electrocardiogrfica del usuario a travs de los electrodos, y estos a su vez se encuentran
conectados al circuito a partir de cables apantallados que permiten la eliminacin de ruidos,
los electrodos que se utilizaran sern de los de tipo superficial por su facilidad de manejo y
economa. Una de las derivaciones que se utilizar ser la siguiente: un electrodo ir al
brazo derecho (RA), otro electrodo ir en el brazo izquierdo (LA) y un ltimo electrodo que
servir como referencia ir a la pierna derecha (RL).
RA=En el brazo derecho (rightarm), evitando prominencias seas.
RL=En la pierna derecha (rightleg), evitando prominencias seas.

LA= En el brazo izquierdo (leftarm), evitando prominencias


seas.
Figura 1.3 Electrodos

1.1.4Derivaciones y triangulo de Einthoven


Las derivaciones se basan en el tringulo de Einthoven en honor a su descubridor
WillemEinthoven (1860-1927) quien pens, que siendo el corazn una fuente de corriente y
el cuerpo un gran conductor, podra construirse un tringulo imaginario alrededor del
corazn en cuyos lados se proyectaran las fuerzas elctricas emanadas por el msculo
cardiaco. Entonces, procedi a asignarle polaridad a las extremidades que conformaban los
vrtices de dicho tringulo, de acuerdo al comportamiento elctrico del corazn y a su
proyeccin en las respectivas extremidades.

Figura 1.4WillemEinthoven

Es entonces que el brazo derecho (RA) presenta una polaridad negativa debido a quela
base del corazn se proyecta sobre l. El brazo izquierdo (LA) recibe potenciales muy
poderosos de la pared lateral del ventrculo izquierdo, que se aproximan a dicho miembro y
originan su electropositividad; as mismo, la pierna izquierda (LL) recibe los potenciales de
la cara diafragmtica del corazn, formada por las paredes de ambos ventrculos, a lo que
debe, por las mismas razones que el brazo izquierdo, su positividad. A continuacin se
describirn a grosso modo cada una de las derivaciones disponibles para la toma del
electrocardiograma. Las primeras derivaciones fueron D1, D2 y D3, conocidas como
derivaciones estndar o de Einthoven. Son derivaciones bipolares en las que cada una de
ellas utiliza dos electrodos que registran la diferencia de potencial elctrico entre dos
puntos del tringulo, siendo:
D1 = Brazo izquierdo menos brazo derecho: D1= VL - VR
D2 = Pierna izquierda menos brazo derecho: D2= VF - VR
D3 = Pierna izquierda menos brazo izquierdo: D3= VF - VL

Figura 1.5Triangulo de Einthoven

1.2 Amplificador de biopotenciales


Se trata de amplificar la seal obtenida directamente del corazn del orden de 1 mV y de
reducir en la medida que sea posible el ruido. Una vez amplificada la podemos mostrar en
el osciloscopio o procesarla con un microcontrolador. En este aspecto es importante
entender el funcionamiento de un amplificador bioelctrico diferencial. Los potenciales
bioelctricos que a diario se registran, son de muy baja amplitud; para un
electrocardiograma potenciales de 1 mV. El problema est en la contaminacin, por el
ruido elctrico que viene del exterior, y que generalmente est constituido por
interferencias de 50 Hz, producidos por todos los equipos y que lo radian hacia el exterior.
Ese ruido va a captarse por el paciente, por los cables de los electrodos, por la fuente de
poder y por el mismo equipo, como si fuera una antena.
La magnitud del ruido de 50 Hz. puede ser hasta 1000 veces el tamao de la seal que se
quiera observar, y por lo tanto no permite observar nada de la seal; generalmente ese ruido
est referenciado con respecto a tierra.

1.2.1 Amplificador de instrumentacin


Un amplificador de instrumentacin es un dispositivo creado a partir de amplificadores
operacionales. Est diseado para tener una alta impedancia de entrada y un alto rechazo al
modo comn (CMRR).
La operacin que realiza es la resta de sus dos entradas multiplicada por un factor.

Figura 1.6 Amplificador de instrumentacin

1.3 Andriod
Android es un sistema operativo para dispositivos mviles basado en Linux, desarrollado
por Google. La mayor parte de Android est disponible bajo licencia de software libre, esto
resulta una opcin muy interesante para los fabricantes, para los usuarios y desarrolladores.
Android utiliza la arquitectura ARM como hardware principal e integra una variedad de
sensores tales como acelermetros, giroscopios, de proximidad, barmetros, GPS,
magnetmetros. Etc.
Tambin ofrece conectividad a travs de medios almbricos e inalmbricos como USB,
bluetooth, Wi-Fi, NFC, etc. Algunos de estos varan de acuerdo al dispositivo como puede
ser una lavadora, un telfono celular, Tablet, computadora, etc. Desde su lanzamiento ha
pasado por varias actualizaciones que corrigen errores y aaden funciones, actualmente el
sistema operativo se encuentra en la versin 4.1 (JellyBean).

1.3.1 Aplicaciones Andriod


Una aplicacin Android es un programa de alto nivel que permite la interaccin del
usuario con las funciones del sistema operativo y ampla las funcionalidades del
dispositivo, la extensin de estas aplicaciones estn en formato APK.
Las aplicaciones se distribuyen a travs del mercado en lnea de google llamado Play Store
(antes Android Market) para su descarga. Tambin es posible obtener el instalador de la
aplicacin (archivo APK) y almacenarlo en el dispositivo para su instalacin. Otra forma
de instalar aplicaciones es a travs del propio entorno de desarrollo a travs de una
conexin USB o Wi-Fi con la computadora.
Se necesita el kit de herramientas Java JDK, el kit de herramientas de Google Android SDK
y un entorno para desarrollar aplicaciones siendo Eclipse el ms popular y poderoso de
todos, pero el desarrollo es ms lento y complicado ya que est diseado para un nivel ms
experto, sin embargo existen alternativas para hacer ms fcil el desarrollo de aplicaciones
a travs de otros entornos

como Processing, Mono for Android, Basic4android, App

Inventor, etc.

Cmo conectar Hardware externo a un dispositivo Android?


Una parte fundamental son los sensores como sensores de lnea, medidores de distancia,
sensores de temperatura, de luz ambiente, y actuadores como motoreductores,
servomotores, solenoides, vlvulas, etc. Para poder establecer una interfaz entre estos y un

dispositivo Android es necesario algn medio almbrico o inalmbrico, casi siempre


apoyados de un Microcontrolador. Por ejemplo se puede establecer una interfaz por
bluetooth utilizando algn modulo que funcione como puerto serie tales como el HC-05,
HC-06, BTM-180, etc. Tambin es posible construir una interfaz a travs de Wi-Fi
utilizando alguna tarjeta como los shields para arduino. Con la llegada de Android 4.0 se
implement la conectividad NFC que es similar a la tecnologa RFID para comunicarse
con medios inalmbricos. Una interfaz cableada simple es utilizar la salida de audio para
implementar un protocolo de comunicacin con algn Microcontrolador. Otra manera de
establecer una interfaz es a travs del puerto USB por medio del protocolo ADB o ADK, en
la que un Microcontrolador acta como un Host USB. Existen tarjetas dedicadas a
aplicaciones con Android tales como IOIO, Arduino USB Host shield, Arduino ADK. Este
ltimo el ADK es un protocolo diseado por google para la conexin de accesorios de
hardware pero requiere de la versin Android Gingerbread (2.3.4) o superior para
funcionar.

10

Capitulo 2
Antecedentes
2.1 Electrocardiogramas
Cuando la era de la tecnologa comenz a crecer, nuevos instrumentos de medicin salieron
a beneficio de la humanidad, uno de estos es el Electrocardiograma.(ECG), este se ha usado
para medir las pulsaciones cardiacas del paciente.
No se sabe con exactitud quien fue el que invento el electrocardiograma ya que este es el
resultado de una aglomeracin de diferentes investigaciones alrededor del mundo.
En sistemas basados en hospitales, existen extensiones de trminos para este tipo de
dispositivos como lo son los Monitores Holter, estos monitores se encargan de llevar
registros de las mediciones 24 horas al da y tienen de 3 a 12 electrodos trabajando en las
mediciones. Estos sistemas son diseados para condiciones prolongadas.

Figura 2.1 MonitorHolter

11

2.2 Sistemas electrocardiogrficos inalmbricos


Existen algunos sistemas electrocardiogrficos inalmbricos

comerciales, estos usan

sistemas dedicados para la transicin recepcin y procesamiento de datos de seales ECG


su costo es algo elevado para el consumidor promedio y su diseo es poco robusto. La meta
de este proyecto es redisear la conjuncin de estos dispositivos utilizando las nuevas
tecnologas de los telfonos inteligentes. Aprovechando del uso de transmisor de datos por
la banda de 2.4GHz incorporada en los mdulos bluetooth de la mayora de los telfonos
inteligente comerciales.

En el 2008 la empresa LIFESync lanz al mercado LeadWear un sistema de monitoreo


cardiaco baso en sistemas radiofrecienciados que cuenta con dos mdulos:
PatientTransceiver(PT) el cual emite los datos recogidos por los electrodos y los enva.
Monitor Transceiver(MT) este recibe los datos del PT los procesa y despliega en un
monitor

Figura 2.3 dispositivo wireless ECGFigura

2.2 posicionamiento de dispositivo

12

2.3 CORSCIENCE Mdulo de ECG Bluetooth


Corscience desarroll el Mdulo Bluetooth de ECG

que cuenta con tecnologa

inalmbrica. Se basa en el estndar tcnico inalmbrico Bluetooth, este dispositivo


permite detectar y digitalizar la seal electrocardiogrfica en el paciente, para luego
transferir la seal digitalizada de manera inalmbrica a cualquier sistema de monitoreo
relacionado.
Tal sistema de monitoreo solo necesita un receptor inalmbrico que soporte el estndar
Bluetooth, as que un simple computador con impresora puede funcionar como sistema de
ECG.

Figura 2.5 Mdulo de ECG Bluethooth

13

Ventajas:
Seal inalmbrica
Armado con los mejores algoritmos de deteccin de seal ECG disponibles en el mercado
Uso de pilas corrientes tipo AA (duracin mnima con 500 Hz y 12 canales: de 10 hrs)
Alcance de 25m en transferencia de seales ECG de 3, 6 o 12 canales
Tamao compacto
Clip desmontable, permite colocar el dispositivo en ropa, cama, etc.
Pantalla integrada con sealizacin ptica de pulso, recepcin telemetra
Sealizacin acstica
Especificaciones Tcnicas
Medida contina de ECG
Calculo de ritmo Cardiaco con seal acstica especificaciones Tcnicas
Alimentacin con bateras 2 x AA
Consumo de corriente < 200 mA
Resolucin: < 2.6 V/Bit ECG, 18 Bit
Temperatura de operacin 0 - 50 oC, < 95% RH
Dimensiones (H x B x T): 100 x 60 x 23 mm
Frecuencia de muestreo por canal de 00 Hz, 500 Hz, opcional 1000 Hz

14

Ancho de banda de: 0 Hz 150 Hz


2.4 Electrocardigrafo Inalmbrico Basado En Bluetooth
Este dispositivo est compuesto por: adquisicin y adecuacin de la seal, conversin
analgico/digital junto con su procesado y transmisin de la misma.
Medida de la seal biomdica.
Se utilizan cuatro sensores que se sitan en el trax del paciente. Con estos los electrodos,
se obtienen las tres derivaciones bipolares de las extremidades y las tres monopolares de los
miembros. Con seis electrodos ms se obtendrn las seis derivadas precordiales. La seal es
acondicionada elctricamente, amplificando por un factor de mil, para su posterior
procesado. En la Fig. 2.3 se muestra su diagrama a bloques.

Figura 2.6 Diagrama a bloques del dispositivo


La corriente mxima fue limitada a 13,6A para un valor de alimentacin de 4,5 voltios. El
ancho de banda de la seal de electrocardiografa se extiende desde los 0.05 Hz a los 100
Hz. Esto permite utilizar una frecuencia de muestreo de 250 muestras/segundo.
Para realizar la digitalizacin de la seal y su posterior procesado, se utilizo un
microcontrolador de bajo consumo (16 bits), el MSP430F149 de Texas Instruments.
15

Dispone de ocho conversores de 12 bits, de los cuales se utilizan cuatro, uno por cada
derivada.

2.5 Monitorizacin con Holter


Electrocardiograma de Promediacin de Seales: Este procedimiento sehace de la
misma forma que un ECG en reposo, excepto que la actividadelctrica del corazn se
registra durante un perodo de tiempo ms largo,generalmente de 15 a 20 minutos. El ECG
de promediacin de seales se hacecuando se sospecha una arritmia que no se ve en un
ECG de reposo, ya quelas arritmias pueden ser transitorias de naturaleza y no verse durante
el cortoperodo de tiempo que dura un ECG en reposo.

Figura 2.7 Electrocardiograma de Promediacin de Seales

Monitorizacin con Holter: Una monitorizacin con Holter es una grabacinde ECG que
se realiza durante 24 horas o ms. Se pegan tres electrodos en elpecho del paciente y se
conectan a un grabador de ECG porttil mediantecables de derivaciones. Durante este
procedimiento, el paciente sigue con susactividades cotidianas (excepto actividades como

16

ducharse, nadar o cualquierotra cosa que pueda producir una sudoracin excesiva que
haga que loselectrodos se aflojen o se caigan). Existen 2 tipos de monitorizacin con
Holter:

Registro continuo - el ECG se graba continuamente durantetodo el perodo que dure


el examen.

Registro de eventos o grabador de captura - el ECG se graba slo cuando el paciente


siente los sntomas y aprieta el botn de grabacin.

La monitorizacin con Holter se podra hacer cuando se sospecha una arritmiapero no


aparece en el ECG de promediacin de seales, ya que las arritmiaspueden ser transitorias y
no aparecer durante el corto perodo de grabacin deun ECG en reposo o de un ECG de
promediacin de seales.

Figura 2.8 Monitorizacin con Holter

17

Captulo 3
Desarrollo
3.1 Diagrama a Bloques

Figura3.1 - Diagrama a bloques del sistema.

3.2 Sensor

Un sensor es un dispositivo capaz de detectar magnitudes fsicas o qumicas, llamadas


variables, estas mismas son transformadas o acondicionadas en seales elctricas que se
puedan procesar. Existen diversos tipos de sensores. En esta etapa se utilizar un sensor
que convertir las oscilaciones de la actividad elctrica cardiaca en voltaje. Estos sensores
se conocen como electrodos y su implementacin es bastante simple ya que solo basta con

18

acomodar los puntos de referencia en distintas posiciones para enviar una seal elctrica,
como se explic en el captulo 1, Las mediciones que entregan son del orden de los mV,
lo cual es un voltaje muy pequeo para poder ser interpretado adecuadamente, por lo que es
necesario amplificarlos.
Los electrodos son el primer paso en el sistema, por lo tanto el ruido que pueda generarse
en dicho elemento adquiere especial importancia, su precisin y rechazo al ruido sern
vitales para la funcionalidad ptima del sistema.

Figura 3.2 Electrodo para ECG

El electrodo est formado por una superficie metlica y un electrolito en contacto con la
piel. Debido a que el sistema cuenta con la misma referencia a tierra y los electrodos siguen
siendo conductores metlicos adheridos a una regin cercana al corazn se debe utilizar
resistencias de entrada de un valor elevado para aumentar la impedancia de entrada y
reducir los riesgos de recibir una fibrilacin por retroalimentacin. Se debe tomar las
siguientes

medidas:

19

1.- Usar al menos 1 resistencia de entrada en serie de 220K


2.- Usar bateras y no una fuente de poder regulada que est conectada a 110V

Figura3.3 - Resistencias de entrada


La forma de conectar estos sensores est basada en el triangulo de Eithoven que se puede
observar en la figura Fig. 3.4
Consta en colocar un electrodo en l la parte superior del brazo derecho, uno en la parte
superior del brazo izquierdo y otro en la parte inferior del cuerpo tomando de referencia el
ombligo.

20

Figura3.4 Triangulo de Eithoven


3.3 Amplificador de instrumentacin
Este amplificador es usado para la parte amplificacin ya que el OP AMP no puede
amplificar a un nivel TTL es decir de 0V a 5V sin producir mucha perdida sobre
calentamiento o ruido en la seal, por lo general se usa varias etapas de amplificacin para
evitar que esto pase pero para este caso usaremos un amplificador de instrumentacin ya
que estos cuentan con una ganancia muy alta de seal y poco ruido en su salida.

Los dispositivos semiconductores no son ideales as que hay que tener en cuenta que
siempre tendemos algo de impedancia en la entrada de nuestro amplificador o Zinal igual
que no cumple con una linealidad ideal y es debido a la construccin de los amplificadores
ya que siempre se tendrn ciertas impurezas a nivel microscpico dentro de los materiales
usados para su construccin
.

21

Figura3.5 Amplificador de instrumentacin AD620

Este amplificador es muy utilizado en electrocardiogramas, esa fue una de las razones ms
importantes por la cual usar este integrado, otras de las razones importantes son sus
caractersticas como lo es el consumo de corriente que es de 1.3 mA, alimentacin de
voltaje que va de 2.3 V a 18 V, es muy sencillo de utilizar.
Este amplificador de alta precisin que requiere solo una resistencia externa para ajustar la
ganancia del amplificador, esta resistencia se calcula de esta manera:

Se desea una ganancia de 7 (G=7), se sustituye en la formula y obtendramos:


=

49.4
71

Y con eso se obtendra una RG=8.233 K.


22

Figura 3.6 AD620 con ganancia 7

3.4 Amplificador con OFFSET

Debido a lo mencionado anteriormente la seal que se obtiene de los electrodos es


necesaria amplificarla a un nivel ms ptimo para la interpretacin de la seal,
Falta indicar el rango de amplificacin
Existen diversos componentes para lograr una amplificacin de biosealesPara lograr esto
se utilizan amplificadores operacionales ya que tienen una alta ganancia de voltaje
utilizando una o dos referencias

23

Figura3.7 Amplificador Operacional (OP AMP)

Debido a lo mencionado anteriormente la seal que se obtiene de los electrodos es


necesaria amplificarla a un nivel ms ptimo para la interpretacin de la seal, existen
diversos componentes para lograr hacer una amplificacin de seal pero para este caso
usaremos amplificadores operacionales ya que tienen una alta ganancia de voltaje
utilizando una o dos referencias.

La manera de calcular la ganancia del amplificador no inversor es:


2

= (1 + 1)

24

(1)

Figura3.8 Amplificador no inversor (OP AMP)

Es decir, se tiene un voltaje de entrada de 5v y es necesario amplificarlo en el rango de 0v a


5v, ya que este valor de voltaje permite observar de mejor la seal electrocardiografca, por
lo que si se omite esta etapa se tiene una seal muy pequea lo cual ocasionara que la
siguiente etapa tenga una mala lectura y una mala interpretacin de dicha seal.

Se tiene que el voltaje de entrada es Vin= 2.5v y para llegar a tener un voltaje de salida
igual a Vout= 5v necesitamos tener una ganancia Gain= 2

Si se observa la formula (1), se obtiene que la ganancia Gain= (1 + 1)


2

Por lo que Gain=2 es decir, 2=1 + 1

Proponemos el valor de una de las resistencias:

25

R2= 6.8k
Despejamos para hallar R1
2

R1= + 1

R1 =

4.8
21

Este amplificador sumara un voltaje de DC ya que el microcontrolador no lee voltajes


negativos y por eso es necesario ponerle un OFFSET para poner los valores entre 0 y 5
volts.
La manera en que se integrara el offset ser con un divisor de voltaje ya que contamos con
una alimentacin de +5v.

Figura3.9 divisor de voltaje

26

Figura3.10 Amplificador con OFFSET integrado

3.5. Filtro LP (pasa bajos)

Estos filtros son usados para limitar el ancho de banda del espectro electromagntico
dejando pasar solo ciertas frecuencias que se necesiten trabajar, en el caso del filtro pasa
bajas como su nombre lo dice este deja pasar seales con frecuencias bajas, a partir de una
frecuencia de corte que se establezca A la salida del amplificador de instrumentacin
tendremos la seal electrocardiogrfica pero de igual manera tendremos ruido, este ruido o
seal no deseada debe ser eliminada al mayor grado posible y as obtener una seal
electrocardiogrfica lo ms limpia posible. Esta etapa del filtrado de ruido es necesaria ya
que la frecuencia cardiaca entra en los rangos de .3Hz a 100Hz, es decir, que es preciso
deshacerse de todas aquellas seales que no estn en este rango, ya que no son seales
cardiacas y no son de inters y podra causar malas lecturas o malas interpretaciones en las
lecturas que se realicen.
27

Es importante mencionar que los filtros electrnicos no son ideales debido a sus
impurezas fsicas, esto quiere decir que su frecuencia de corte no puede limitar el ancho
de banda de una manera inmediata, sino que decae de una manera casi lineal hasta llegar a
una atenuacin completa de la seal, Cabe mencionar que el orden de los filtros es
importante ya que a un filtro de mayor orden su decaimiento de corte es mucho mejor.

Figura3.11 Filtro LP (pasa bajas)

28

29

Figura3.12 Filtro LP (pasa bajas) a utilizar


Con la ayuda del programaFilter Pro de Texas Instruments se realiz el diagrama
esquemtico del filtro que se utilizara.
Este filtro pasa baja tiene una frecuencia de corte de 100Hz ya que la frecuencia cardiaca va
de los .3Hz a los 100Hz.

30

Este filtro obtenido con el Filter Pro se simulo con el programa Proteus versin v7.7 y el
funcionamiento de este fue el esperado.

Figura3.13 Simulacin del filtro en Proteus v7.7

a)

b)

Figura3.14 a) Frecuencia antes de 100Hz b) Frecuencia superior a 100Hz

31

3.6 ADC& MICRO CONTROLADOR (uC)


El Convertidor analgico a digital o ADC por sus siglas en ingls (Digital
toanalogconverter) es una funcin que nos sirve para convertir seales analgicas a una
forma digital, esto es logrado con el muestro de la seal analgica a una determinada
resolucin de bits y as retornando un valor digital el cual puede ser interpretado
dependiendo del nmero de bits de muestreo, para este caso el micro-controlador usado
tiene una capacidad de muestreo de ADC de 8 bits asi que sus valores van de 0 a 28 es
decir de 0 a 255.
El ADC se encuentra dentro del micro controlador, en el cual se usara el uC ATmega328
perteneciente a la familia dearduino uno.
Arduino es una plataforma electrnica abierta para la creacin de prototipos basados en
software y hardware libre

Figura 3.15 Shieldarduino

32

3.7 Bluetooth

Este es un dispositivo el cual usualmente trabaja en las bandas de frecuencias de 2.4 GHz lo
cual lo hace ptimo para una transferencia de datos, para este proyecto se usara el modulo
bluetooth HC-05

Figura 3.16 Modulo bluetooth HC05

Este mdulo bluetooth es compatible con la plataforma android y puede usarse de modo
esclavo o maestro, en modo esclavo este est dispuesto a enviar y recibir datos de otro

33

dispositivo pero no le es posible iniciar la comunicacin entre ambos ya que en este modo
lest sometido a las rdenes del dispositivo en modo maestro. El mdulo HC-05 puede
trabajar de las dos maneras cambiando su programacin, por conveniencia este mdulo est
programado como uno de tipo maestro, este contienen una interface UART para la
transmisin de datos al micro-controlador de manera serial. En este se envan los datos de
la seal analgica recibida en el ADC del micro-controlador a una velocidad de 9600
Baudios/segundo. Para hacer la conexin de el modulo bluetooth al micro-controlador se
deben entre cruzar sus pines TX (bt) RX (uC) y RX (bt) TX (uC)

Para la conexin entre el arduino y el modulo bluetooth se debe tener en consideracin los
siguientes puntos
1.- el modulo trabaja a nivel TTL de estado bajo, es decir 3V
2.- los pines RX y TX de la placa estn ligados al mismo puerto del USB

34

Figura3.17 Esquemtico de conexin de HC-05


Ntese que en la imagen de arriba se muestra un mdulo HC-06, no obstante lo
importante es el orden de los pines ya que no cambian para ambas versiones, pudiendo as
realizar el diseo con la librera del HC-06.

La conexin debe quedar de la siguiente forma:

Figura 3. 18 Conexin Bluethooth con arduino

Los dispositivos bluetooth se pueden clasificar por diferentes clases que van de la Clase 1
hasta la Clase 3, esto define su potencia de transmisin y su distancia de irradiacin
electromagntica

35

Los dispositivos bluetooth a su vez existen en diferentes versiones que se pueden clasificar
segn su ancho de banda:

36

3.8 Programas necesarios para la interface


Para el desarrollo de aplicaciones en el entorno android se requiere de una amalgama de
aplicaciones para su implementacin
1. - JAVA JDK o (JDK JAVA DEVELOPER KIT)
El cual contiene todas las herramientas de JAVA para el desarrollo de aplicaciones en
android. Este se puede encontrar de manera gratuita en la pgina de Oracle:
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

37

En la imagen anterior se debe escoger la aplicacin segn los requerimientos de tu


computadora, bajo la suposicin de usar una PC de Microsoft se debe elegir entre
Windows x86 para sistemas con arquitectura de 32 Bits y Windows x64 para arquitecturas
de 64 Bits.

2. - ANDROID SDK (SDK Software Development Kit)


Este Kit hace posible desarrollar aplicaciones utilizando JAVA como lenguaje de
programacin y contiene todas las herramientas necesarias para construir, probar y depurar
aplicaciones de android, incluye un AVD(Android Virtual Device) el cual genera una
maquina android virtual desde tu computadora para el desarrollo de las aplicaciones, este se
encuentra desde la pgina de desarrolladores de android:
http://developer.android.com/sdk/index.html

38

3.- Basic4Android
Basic4Android es un IDE(Entorno de Desarrollo Integrado, por sus siglas en ingls) creado
por la empresa AnywhereSofware especializados en el desarrollo de aplicaciones mviles,
su entorno flexible , depuracin rpida y sus
diferentes libreras hace de esta, un entorno de
desarrollo profesional.
B4A soporta todas las caractersticas nativas de
android incluyendo:

SQL databases

GPS

Home screenwidgets

Bluetooth(Serial Ports)

Phone Features: phone calls, sms,call log

USB host

Camera

XML,JSON,SLS(MS Excel)

View animations

Multi-touch gestures

NFC

Http server (Based on Jetty)

Arduino ADK
39

Video and audio playback / recording


Networking

OpenGL

Sensors

Y mas

La IDE de Basic4Android se puede descargar directamente desde su pgina de internet:


http://www.basic4ppc.com/android/downloads.html

La documentacin necesaria para su utilizacin y manejo de libreras puede encontrarse


desde la pgina de basic4android:
http://www.basic4ppc.com/android/wiki/index.php/Libraries
http://www.basic4ppc.com/android/documentation.html

40

3.9 Aplicacin de android


Esta parte integra la etapa de recepcin y procesamiento de
seal digital que proviene del mdulo bluetooth HC-05.
Contiene diversas funciones y caractersticas para la
visualizacin de la seal proveniente del corazn y posee
algunas de las caractersticas bsicas utilizadas en los osciloscopios.

Esta se puede encontrar dentro la carpeta /Android App que contiene el CD presentado en
este documento, el archivo se encuentra en formato .Apk el cual es el formato utilizado
para la instalacin de aplicaciones en android, basta con solo transferir el archivo a tu
dispositivo mobil y presionar sobre el botn de la aplicacin, el gestor de aplicacin
integrado en los dispositivos android ara el resto para su instalacin.

3.10 Interfaz
La interfaz est diseada de una manera amigable al usuario, contiene funciones bsicas de
un osciloscopio para el procesamiento de la seal, en la figura de abajo se puede observar
los componentes que la integran:

41

Control
Monitor

Canales

Panel

Figura 3.19 Interfaz de usuario

No obstante, existe un componente adicional el cual se encuentra oculto a simple vista, este
componente se activa con la tecla Men del dispositivo y despliega precisamente un men
selector, en el cual el usuario usa para conectarse con el modulo bluetooth para iniciar la
conversacin entre los dispositivos.

42

Monitor
Esta es la parte principal de la interfaz ya que en ella se visualiza la seal recibida cuenta
con barras o Grids Horizontales y verticales y puede ser declarada dentro de un objeto
tipo panel o dentro de un ImageView
Para el escalamiento de esta parte se debe tener en cuenta las variables para la grfica y su
relacin entre ellas, as tambin de la misma forma para las variables usadas para el
dimensionamiento de las barras o Grids.

Ilustracin 2Definicion de las variables del " Grid"

Figura3.20 Ilustracin 3Definicion de las variables de la grafica

Estas variables deben ser llamadas dentro de la subrutina (Activity_Create)

43

Ejemplo:
Sub Activity_Create(FirstTimeAsBoolean)
Sub GraphInit
' initialize the Graph variables
' all dimensions are expressed in % of height
GraphX0 = 3%y
GraphW= 100%x - 2 * GraphX0
GraphX1 = GraphX0 + GraphW
GraphY0 = 3%y
GraphH= 100%y - 2 * GraphY0
GraphY1 = GraphY0 + GraphH
rectGraph.Initialize(0, 0, GraphW, GraphH)
GraphColor= Colors.White
End Sub
Estas variables estn expresadas en porcentajes debido a que no todos los dispositivos
cuentan con los mismos valores de dimensionamiento de sus pantallas.
Canales
La opcin de los canales permite seleccionar las ranuras disponibles para visualizar las
seales, pudiendo visualizar hasta 4 seales, con diferente frecuencia y amplitud, estas se
ven marcadas con las casillas, rojo ,azul, negra y verde y su representacin grfica se
encuentra del mismo color.
Estos se declaran dentro del panel principal aadiendo un .addView
44

Ejemplo de cdigo b4a:

pnlCurveTools.Initialize("")
pnlOcilloscope.AddView(pnlCurveTools, 0, ScreenY1, ScreenX1, 100%y ScreenY1)
DimcbgAsColorDrawable
cbg.Initialize(Colors.RGB(0, 0, 0), 0) '255, 196, 196
pnlCurveTools.Background = cbg

Control
Este es un panel externo al ya declarado anteriormente y cuanta con su propia subrutina
para cada botn.
El botn Start habilita el Timer1 el cual est estrechamente ligado en la rutina GetValues,
la cual obtiene los valores recibidos por el modulo bluetooth.
As mismo el botn Stop deshabilita el Timer1 el cual no permitir obtener los valores de la
rutina GetValues.

45

por ltimo el botn SingleShot es una caracterstica especial aadida al programa el cual
consiste en dibujar una nica grfica, es decir realizar un barrido de la seal una nica ves
y borrar cualquier otra, esto es con fines de una mejor interpretacin de seales nicas.
Ejemplo de cdigo b4a :
Sub btnStart_Click
Timer1.Enabled = True
SingleShot = False
Stopped = False
ii = -1
xx = -dx
EraseCurves
End Sub
Sub btnStop_Click
Timer1.Enabled = False
SingleShot = False
Stopped = True
End Sub
Sub btnSingleShot_Click
Timer1.Enabled = True
SingleShot = True
Stopped = False
ii = -1
xx = -dx
46

EraseCurves
End Sub

Panel
Este panel contiene las caractersticas que ajustan el escalamiento y la divisin de
frecuencia de la seal, cuenta con dos propiedades bsicas de un osciloscopio convencional.
Divisin de Tiempo o Time/Div el cual divide el tiempo de muestreo actual entre un valor
seleccionado, esto mediante un Spin o selector que permite escoger valores
predeterminados
Volts Divicion o U/Div de la misma manera que en el anterior esta funcin divide los
valores de la seal en valores mas pequeos o grandes segn sea conveniente para la
interpretacin de la persona.
Ejemplo:
Sub spnTimeScale_ItemClick (Position AsInt, Value AsObject)
dt = Value / 10
t=0
Timer1.Initialize("Timer1", dt * 1000)
End Sub

47

spnScale_ItemClick (Position AsInt, Value AsObject)


DimspnAsSpinner

spn = Sender
Curve(spn.Tag).Scale = Div / Value

ANEXO

ESQUEMATICO DEL DISPOSITIVO COMPLETO:

Figura 21. Esquemtico completo en EAGLE.

48

Cdigo desarrollado en Basic4Android.


'Activity module
Sub Process_Globals
'These global variables will be declared once when the application
starts.
'These variables can be accessed from all modules.
DimProgNameAsString
:
ProgName
=
"ECG_ITM"
DimProgVersionAsString
: ProgVersion = "BETA"
DimTimer1AsTimer
TypeCurves (Name AsString, Color AsInt, Width AsFloat, Scale
AsDouble, Offset AsDouble, Draw AsBoolean)
DimCurveVal(4, 101) AsDouble
DimScreenX0,
ScreenX1,
ScreenY0,
ScreenY1,
ScreenW,
ScreenH,
BorderAsInt
DimGridX0, GridX1, GridY0, GridY1, GridYm, GridW, GridH, DivAsInt
DimNbDivX, NbDivYAsInt
DimScreenCol, GridLineColAsInt
Dimt, dtAsDouble
Dimdx, xx, cxAsFloat
DimiiAsInt
DimCurveIAsInt

'

curve

index
DimCurve(4) AsCurves
DimCurvesI(4) AsInt
DimCurvesNbAsInt
DimCurvesNbDispAsInt
Dimy1(4) AsFloat
Dimy2(4) AsFloat
DimSingleShotAsBoolean
DimStoppedAsBoolean
'
Dim ScopeMode As String
'
Dim ScopeMode As String
"SCOPE"
DimScopeModeAsString
DimScopeRollingAsBoolean
Dimw(4) AsDouble
Dima(4) AsDouble
DimTimeScale(10) AsDouble
DimSignalScale(10) AsDouble

: CurvesNb = 3

: SingleShot = False
: Stopped = True
: ScopeMode = "MEM"
:
ScopeMode
=
: ScopeMode = "ROLL"
: ScopeRolling = False

49

DimBtAsSerial
End Sub
Sub Globals
'These global variables will be redeclared each time the activity
is created.
'These variables can only be accessed from this module.
DimbtnStart, btnStop, btnSingleShotAsButton
DimpnlOcilloscope,
pnlScreen,
pnlGraph,
pnlCursor,
pnlControlAsPanel
DimpnlCurveTools, pnlDispValuesAsPanel
DimcvsScreen, cvsGraph, cvsCursorAsCanvas
DimrectScreen, rectGridAsRect
DimspnTimeScaleAsSpinner
DimspnScale0, spnScale1, spnScale2, spnScale3AsSpinner
DimlblScale0, lblScale1, lblScale2, lblScale3AsLabel
DimlblValue0, lblValue1, lblValue2, lblValue3AsLabel
DimlblOffset0, lblOffset1, lblOffset2, lblOffset3AsLabel
DimedtOffset0, edtOffset1, edtOffset2, edtOffset3AsEditText
DimrbtScopeScope, rbtScopeMEM, rbtScopeROLLAsRadioButton
DimscvControlAsScrollView
DimbmpRollAsBitmap
DimConectadoAsBoolean
DimRxAsTextReader
DimDispositivos_apareadosAsMap
DimListaAsList'Se declara un objeto List para Mostrar dispositivos
apareados
DimDispositivo_seleccionadoAsInt
End Sub
Sub Activity_Create(FirstTimeAsBoolean)
Activity.Title = ProgName&" "&ProgVersion
Activity.AddMenuItem("Conectar", "Menu_conectar")
un MenuItem para Conectarse a un dispositivo
Activity.AddMenuItem("Desconectar", "Menu_desconectar")
MenuItem para desconectarse de un dispositivo

'Se agrega
'Se

agrega

un

dt = 0.01
t = 0
IfFirstTime = TrueThen'Se pregunta si es la primera vez que la
actividad se crea
Bt.Initialize("Bt_Event")
'Si es
la primera vez que se crea la actividad se activa el bluetooth
Timer1.Initialize("Timer1_Event",1)
'Si es la
primera vez que se crea la actividad se inicializa el timer para
interrumpir cada 1 ms
EndIf
Timer1.Initialize("Timer1", dt * 1000)
NbDivX = 10
NbDivY = 8

50

Div = Floor(80%y / NbDivY)


xx = 0
dx = Div / 10
GridW = Div * NbDivX
GridH = Div * NbDivY
Border = 6dip
ScreenY0 = 0
ScreenH = GridH + 2 * Border
ScreenY1 = ScreenY0 + ScreenH
ScreenX0 = 0
ScreenW = GridW + 2 * Border
ScreenX1 = ScreenX0 + ScreenW
GridY0
GridY1
GridX0
GridX1
GridYm

=
=
=
=
=

Border
GridY0 + GridH
Border
GridX0 + GridW
GridH / 2

rectGrid.Initialize(0, 0, GridW, GridH)


rectScreen.Initialize(0, 0, ScreenW, ScreenH)
ScreenCol = Colors.Black
GridLineCol = Colors.Gray
pnlOcilloscope.Initialize("")
Activity.AddView(pnlOcilloscope, 0, 0, 100%x, 100%y)
pnlScreen.Initialize("")
pnlOcilloscope.AddView(pnlScreen,
ScreenH)
cvsScreen.Initialize(pnlScreen)

ScreenX0,

ScreenY0,

ScreenW,

pnlGraph.Initialize("")
pnlOcilloscope.AddView(pnlGraph, GridX0, GridY0, GridW, GridH)
cvsGraph.Initialize(pnlGraph)
pnlCursor.Initialize("pnlCursor")
pnlOcilloscope.AddView(pnlCursor, GridX0, GridY0, GridW, GridH)
cvsCursor.Initialize(pnlCursor)
pnlControl.Initialize("")
Activity.AddView(pnlControl, ScreenX1, 0, 100%x - ScreenX1, 54dip)
DimcbgAsColorDrawable
cbg.Initialize(Colors.RGB(0, 0, 0), 0) ''255, 196, 196),
pnlControl.Background = cbg
Dim w1, w2, w3, t1, h1 AsInt
w1 = 4dip
w2 = (pnlControl.Width - 4 * w1) / 3
w3 = w1 + w2
t1 = 4dip
h1 = 52dip
btnStart.Initialize("btnStart")

51

pnlControl.AddView(btnStart, w1, t1, w2, h1)


btnStart.Text = "Start"
btnStop.Initialize("btnStop")
pnlControl.AddView(btnStop, w1 + w3, t1, w2, h1)
btnStop.Text = "Stop"
btnSingleShot.Initialize("btnSingleShot")
pnlControl.AddView(btnSingleShot, w1 + 2 * w3, t1, w2, h1)
btnSingleShot.Text = "Single Shot"
scvControl.Initialize(480dip)
pnlOcilloscope.AddView(scvControl,
ScreenX1,
pnlControl.Height,
100%x - ScreenX1, 100%y - pnlControl.Height)
scvControl.Panel.LoadLayout("controls")
scvControl.Panel.Width = scvControl.Width
DimcbgAsColorDrawable
cbg.Initialize(Colors.RGB(196, 196, 255), 0) '196, 196, 255'
scvControl.Panel.Background = cbg
scvControl.Color = Colors.RGB(196, 196, 255)'196, 196, 255
pnlCurveTools.Initialize("")
pnlOcilloscope.AddView(pnlCurveTools, 0, ScreenY1, ScreenX1, 100%y
- ScreenY1)
DimcbgAsColorDrawable
cbg.Initialize(Colors.RGB(0, 0, 0), 0) '255, 196, 196
pnlCurveTools.Background = cbg
pnlDispValues.Initialize("")
pnlOcilloscope.AddView(pnlDispValues, 0, ScreenY1, ScreenX1, 100%y
- ScreenY1)
DimcbgAsColorDrawable
cbg.Initialize(Colors.RGB(255, 236, 153), 0)
pnlDispValues.Background = cbg
pnlDispValues.Visible = False
InitCurves
InitCalcCurves
InitSpinners
DimwwAsFloat
ww = pnlDispValues.Width / 4
lblValue0.Initialize("")
pnlDispValues.AddView(lblValue0, 0, 0, ww, pnlDispValues.Height)
lblValue0.TextColor = Curve(0).Color
lblValue0.Gravity
=
Gravity.CENTER_HORIZONTAL
Gravity.CENTER_VERTICAL
lblValue1.Initialize("")
pnlDispValues.AddView(lblValue1, ww, 0, ww, pnlDispValues.Height)
lblValue1.TextColor = Curve(1).Color
lblValue1.Gravity
=
Gravity.CENTER_HORIZONTAL
Gravity.CENTER_VERTICAL
lblValue2.Initialize("")

52

pnlDispValues.AddView(lblValue2,
2
*
ww,
0,
pnlDispValues.Height)
lblValue2.TextColor = Curve(2).Color
lblValue2.Gravity
=
Gravity.CENTER_HORIZONTAL
Gravity.CENTER_VERTICAL
lblValue3.Initialize("")
pnlDispValues.AddView(lblValue3,
3
*
ww,
0,
pnlDispValues.Height)
lblValue3.TextColor = Curve(3).Color
lblValue3.Gravity
=
Gravity.CENTER_HORIZONTAL
Gravity.CENTER_VERTICAL

ww,
+

ww,
+

Fori = 0To3
DimcbxAsCheckBox
cbx.Initialize("cbxDrawCurve")
pnlCurveTools.AddView(cbx, 6dip + i * 66dip, 0, 60dip, 50dip)
cbx.Tag = i
cbx.Text = " "& (i + 1)
cbx.Typeface = Typeface.DEFAULT_BOLD
cbx.Color = Curve(i).Color
cbx.Checked = True
Next
lblScale0.Color = Curve(0).Color
lblScale1.Color = Curve(1).Color
lblScale2.Color = Curve(2).Color
lblScale3.Color = Curve(3).Color
lblOffset0.Color
lblOffset1.Color
lblOffset2.Color
lblOffset3.Color
edtOffset0.Text
edtOffset1.Text
edtOffset2.Text
edtOffset3.Text

=
=
=
=
=
=
=
=

Curve(0).Color
Curve(1).Color
Curve(2).Color
Curve(3).Color
Curve(0).Offset
Curve(1).Offset
Curve(2).Offset
Curve(3).Offset

SelectScopeMode
Case"SCOPE"
rbtScopeScope.Checked = True
Case"MEM"
rbtScopeMEM.Checked = True
Case"ROLL"
rbtScopeROLL.Checked = True
EndSelect
End Sub
Sub Activity_Resume
IfBt.IsEnabled = FalseThen'Se pregunta si
desabilitado
Msgbox("Habilitar Bluetooth", "")
desabilitado se muestra un mensaje para habilitarlo
Else'Siesta habilitado
Bt.Listen
EndIf

53

el

bluetooth

esta

'Si esta

InitGrid'Siesta
conectarse

habilitado

escucha

conexiones

para

poder

End Sub
Sub Bt_Event_Connected (Success AsBoolean)
IfSuccess = TrueThen'Se pregunta si la conexion fue exitosa
ToastMessageShow("Conexion Exitosa", False)
'Si la conexion fue
existosa se muestra un mensaje avisando que se ha conectado exitosamente
Rx.Initialize(Bt.InputStream)
'Si la conexion fue
existosa se inicializa el TextReader
Conectado = True'Si la conexion fue existosa se activa la
bandera de estado de conexion
Timer1.Enabled = True'Si la conexion fue existosa se habilita el timer
Else'Si la conexion fallo
Conectado = False'Si la conexion fallo se desactiva la bandera de estado
de conexion
Timer1.Enabled = False'Si la conexion fallo se desabilita el timer
ToastMessageShow("Error al conectar", False)
'Si la
conexion fallo se muestra un mensaje avisando que hubo un error al
intentar conectar
EndIf
End Sub
Sub Activity_Pause (UserClosedAsBoolean)
btnStop_Click
End Sub
Sub InitGrid
DimiAsInt
Dim x, y AsFloat
cvsScreen.DrawRect(rectScreen, ScreenCol, True, 1)
Fori = 0ToNbDivY
y = GridX0 + i * Div
cvsScreen.DrawLine(GridX0, y, GridX1, y, GridLineCol, 1dip)
Next
Fori = 0ToNbDivX
x = GridY0 + i * Div
cvsScreen.DrawLine(x, GridY0, x, GridY1, GridLineCol, 1dip)
Next
pnlScreen.Invalidate
cvsGraph.DrawRect(rectGrid, Colors.Transparent, True, 1)
pnlGraph.Invalidate
cvsCursor.DrawRect(rectGrid, Colors.Transparent, True, 1)
pnlCursor.Invalidate
End Sub
Sub btnStart_Click
Timer1.Enabled = True
SingleShot = False
Stopped = False

54

ii = -1
xx = -dx
EraseCurves
End Sub
Sub btnStop_Click
Timer1.Enabled = False
SingleShot = False
Stopped = True
End Sub
Sub btnSingleShot_Click
Timer1.Enabled = True
SingleShot = True
Stopped = False
ii = -1
xx = -dx
EraseCurves
End Sub
Sub spnTimeScale_ItemClick (Position AsInt, Value AsObject)
dt = Value / 10
t = 0
Timer1.Initialize("Timer1", dt * 1000)
End Sub
Sub spnScale_ItemClick (Position AsInt, Value AsObject)
DimspnAsSpinner
spn = Sender
Curve(spn.Tag).Scale = Div / Value
End Sub
Sub edtOffset_FocusChanged (HasFocusAsBoolean)
DimedtAsEditText
DimvalAsDouble
IfHasFocus = FalseThen
edt = Sender
Curve(edt.Tag).Offset = edt.Text
EndIf
End Sub
Sub rbtScope_CheckedChange(Checked AsBoolean)
DimrbtAsRadioButton
btnStop_Click
rbt = Sender
ScopeMode = rbt.Tag
btnStart_Click
End Sub
Sub Timer1_Tick
IfConectado = TrueThen'Se
conexion esta activada
IfRx.Ready = TrueThen

pregunta

55

si

la

bandera

de

estado

de

Dimi, j AsInt
t = t + dt
xx = xx + dx
ii = ii + 1
Ifii>100Then
IfSingleShot = TrueThen
Timer1.Enabled = False
SingleShot = False
Stopped = True
Return
Else
SelectScopeMode
Case"MEM"
xx = 0
ii = 0
GetValues
DrawCurves
Case"SCOPE"
EraseCurves
xx = 0
ii = 0
GetValues
DrawCurves
Case"ROLL"
ii = 100
xx = 100 * dx
Fori = 0To3
For j = 0To99
CurveVal(i, j) = CurveVal(i, j + 1)
Next
Next
ScopeRolling = True
GetValues
DrawCurves
EndSelect
Return
EndIf
EndIf
EndIf
EndIf
GetValues
DrawCurves
End Sub
Sub DrawCurves
Dimi, j AsInt
Dim r1, r2 AsRect
Dim x, yy1(4), yy2(4) AsFloat
IfSingleShot = FalseThen
SelectScopeMode
Case"MEM"
r1.Initialize(xx, 0, xx + dx, GridH)
cvsGraph.DrawRect(r1, Colors.Transparent, True, 1)
Case"ROLL"

56

IfScopeRolling = TrueThen
cvsGraph.DrawRect(rectGrid,

Colors.Transparent,

True, 1)
Fori = 0ToCurvesNb
IfCurve(i).Draw = TrueThen
yy1(i) = GridYm + (-Curve(i).Offset CurveVal(i, 0)) * Curve(i).Scale
For j = 1To99
x = j * dx
yy2(i)
=
GridYm
+
(Curve(i).Offset - CurveVal(i, j)) * Curve(i).Scale
cvsGraph.DrawLine(x
dx,
yy1(i), x, yy2(i), Curve(i).Color, Curve(i).Width)
yy1(i) = yy2(i)
Next
EndIf
Next
EndIf
EndSelect
EndIf
Fori = 0ToCurvesNb
IfCurve(i).Draw = TrueThen
y2(i) = GridYm + (-Curve(i).Offset - CurveVal(i, ii)) *
Curve(i).Scale
Ifii>0Then
cvsGraph.DrawLine(xx - dx, y1(i), xx, y2(i),
Curve(i).Color, Curve(i).Width)
EndIf
y1(i) = y2(i)
EndIf
Next
pnlGraph.Invalidate
DoEvents
End Sub
Sub GetValues
DimiAsInt
Fori = 0ToCurvesNb
CurveVal(i, ii) = Rx.ReadLine /4
Next
End Sub
Sub EraseCurves
cvsGraph.DrawRect(rectGrid, Colors.Transparent, True, 1)
End Sub
Sub cbxDrawCurve_CheckedChange(Checked AsBoolean)
DimcbxAsCheckBox
cbx = Sender
Curve(cbx.Tag).Draw = Checked
End Sub
Sub pnlCursor_Touch (Action AsInt, X AsFloat, Y AsFloat) AsBoolean'Return
True to consume the event

57

IfStopped = FalseThen
Return
EndIf
Select Action
CaseActivity.ACTION_DOWN
pnlDispValues.Visible = True
cx = X
If X >= 0AND X <= GridWThen
DrawCursor(X)
DispValues(X)
EndIf
CaseActivity.ACTION_MOVE
If X >= 0AND X <= GridWThen
DrawCursor(X)
DispValues(X)
EndIf
CaseActivity.ACTION_UP
cvsCursor.DrawLine(cx, 0, cx, GridH, Colors.Transparent, 1)
pnlCursor.Invalidate
pnlDispValues.Visible = False
EndSelect
ReturnTrue
End Sub
Sub DrawCursor(x AsFloat)
cvsCursor.DrawLine(cx, 0, cx, GridH, Colors.Transparent, 1)
cx = x
cvsCursor.DrawLine(cx, 0, cx, GridH, Colors.Red, 1)
pnlCursor.Invalidate
End Sub
Sub DispValues(x AsInt)
DimiAsInt
i = 100 / GridW * x
lblValue0.Text = NumberFormat(CurveVal(0,
lblValue1.Text = NumberFormat(CurveVal(1,
lblValue2.Text = NumberFormat(CurveVal(2,
lblValue3.Text = NumberFormat(CurveVal(3,
End Sub
Sub InitCurves
Curve(0).Color
Curve(1).Color
Curve(2).Color
Curve(3).Color

=
=
=
=

Colors.Red
Colors.Blue
Colors.Black
Colors.RGB(64, 192, 0)

Curve(0).Width
Curve(1).Width
Curve(2).Width
Curve(3).Width

=
=
=
=

1dip
1dip
1dip
1dip

Curve(0).Scale = 20
Curve(1).Scale = 20
Curve(2).Scale = 20

58

i),
i),
i),
i),

1,
1,
1,
1,

6)
6)
6)
6)

Curve(3).Scale = 20
Curve(0).Offset = 0
Curve(1).Offset = 1
Curve(2).Offset = -1
Curve(3).Offset = 2
Curve(0).Draw
Curve(1).Draw
Curve(2).Draw
Curve(3).Draw
End Sub

=
=
=
=

Sub InitCalcCurves
w(0) = 2 * cPI
w(1) = 2 * cPI
w(2) = 2 * cPI
w(3) = 2 * cPI
a(0)
a(1)
a(2)
a(3)
End Sub

=
=
=
=

True
True
True
True

*
*
*
*

2.1
3.7
4.3
5.7

1.0
2.0
-1.0
1.5

Sub InitSpinners
DimiAsInt
TimeScale(0)
TimeScale(1)
TimeScale(2)
TimeScale(3)
TimeScale(4)
TimeScale(5)
TimeScale(6)
TimeScale(7)
TimeScale(8)
TimeScale(9)

=
=
=
=
=
=
=
=
=
=

SignalScale(0)
SignalScale(1)
SignalScale(2)
SignalScale(3)
SignalScale(4)
SignalScale(5)
SignalScale(6)
SignalScale(7)
SignalScale(8)
SignalScale(9)

10
5
2
1
0.5
0.2
0.1
0.05
0.02
0.01
=
=
=
=
=
=
=
=
=
=

10
5
2
1
.5
.2
.1
.05
.02
.01

Fori = 0To9
spnTimeScale.Add(TimeScale(i))
spnScale0.Add(SignalScale(i))
spnScale1.Add(SignalScale(i))
spnScale2.Add(SignalScale(i))
spnScale3.Add(SignalScale(i))

59

Next
spnTimeScale.SelectedIndex = 6
spnScale0.SelectedIndex = 3
spnScale1.SelectedIndex = 3
spnScale2.SelectedIndex = 3
spnScale3.SelectedIndex = 3
Curve(0).Scale = Div / spnScale0.SelectedItem
Curve(1).Scale = Div / spnScale1.SelectedItem
Curve(2).Scale = Div / spnScale2.SelectedItem
Curve(3).Scale = Div / spnScale3.SelectedItem
End Sub
Sub Menu_conectar_Click
IfConectado = FalseThen'Se pregunta si la bandera de estado de conexion
esta desactivada
Dispositivos_apareados = Bt.GetPairedDevices'Si la bandera de estado de
conexion esta desactivada se agregan al mapa los dispositivos apareados
Lista.Initialize'Si la bandera de estado de conexion esta desactivada se
inicializa la lista
For c = 0ToDispositivos_apareados.Size - 1'Si la bandera de estado de
conexion esta desactivada se hace un ciclo que va de 0 hasta el numero de
dispositivos apareados
Lista.Add(Dispositivos_apareados.GetKeyAt(c))
'Si la bandera de
estado de conexion esta desactivada se agrega a la lista el dispositivo
apareado del mapa
Next
Dispositivo_seleccionado = InputList(Lista, "Seleccionar Dispositivo", 1)
'Si la bandera de estado de conexion esta desactivada se muestra
la lista para seleccionar un dispositivo
IfDispositivo_seleccionado<>DialogResponse.CANCELThen'Si la bandera
de estado de conexion esta desactivada se pregunta si se selecciono un
dispositivo
Bt.Connect(Dispositivos_apareados.Get(Lista.Get(Dispositivo_seleccionado)
))
'Si la bandera de estado de conexion esta desactivada si se
selecciono un dispositivo se intenta realizar la conexion
EndIf
Else'Si la bandera de estado de conexion esta activada
ToastMessageShow("Ya
esta
conectado",
False)
'Si la bandera de estado de conexion esta activada se muestra un mensaje
avisando que ya existe una conexion activa
EndIf
End Sub
Sub Menu_desconectar_Click
IfConectado = TrueThen'Se pregunta si la bandera de estado de conexion
esta activada
Conectado=False'Si la bandera de estado de conexion esta activada se
desactiva
Bt.Disconnect'Si la bandera de estado de conexion esta activada se
finaliza la conexion

60

ToastMessageShow("Fin de conexion", False) 'Si la bandera de estado de


conexion esta activada se muestra un mensaje avisando que finalizo la
conexion
Else'Si la bandera de estado de conexion esta desactivada
ToastMessageShow("Sin conexion", False)
'Si la bandera de estado de
conexion esta desactivada se muestra un mensaje avisando que no existe
una conexion activa
EndIf
End Sub

Cdigo completo de muestreo y envi de seal desarrollado en Arduino

constint SENS_PIN = A0;


constint LED_PIN = 13; // led indicador

intsensorValue = 0;
boolean toggle = true;

void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(SENS_PIN);
61

//Serial.println("\n");
Serial.println((sensorValue/10));
digitalWrite(LED_PIN, toggle); //parpadea si se enviaalgun dato

delay(15);

62

You might also like