Professional Documents
Culture Documents
Desarrollo de
hardware y
software
biomtrico
(ECG) para
dispositivosco
n ANDROID
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.
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.
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
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
Objetivos especficos
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:
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.
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.
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
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).
Inventor, etc.
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.
11
12
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
Dispone de ocho conversores de 12 bits, de los cuales se utilizan cuatro, uno por cada
derivada.
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:
17
Captulo 3
Desarrollo
3.1 Diagrama a Bloques
3.2 Sensor
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.
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
20
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
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:
49.4
71
23
= (1 + 1)
24
(1)
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
25
R2= 6.8k
Despejamos para hallar R1
2
R1= + 1
R1 =
4.8
21
26
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.
28
29
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.
a)
b)
31
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
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
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
37
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)
USB host
Camera
XML,JSON,SLS(MS Excel)
View animations
Multi-touch gestures
NFC
Arduino ADK
39
OpenGL
Sensors
Y mas
40
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
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.
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
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
spn = Sender
Curve(spn.Tag).Scale = Div / Value
ANEXO
48
'
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
=
=
=
=
=
Border
GridY0 + GridH
Border
GridX0 + GridW
GridH / 2
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
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
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