Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Diseño e Implementacion de Un ECG, Tensiometro Digital y Oximetro de Pulso, Con Monitoreo en Tiempo Real y Aplicaciones Web y Android

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 230

Gordillo Padilla i

UNIVERSIDAD DEL AZUAY


FACULTAD DE CIENCIA Y TECNOLOGA

ESCUELA DE INGENIERA ELECTRNICA

Diseo e implementacin de un sistema de monitoreo remoto de


seales biolgicas, electrocardiograma, oxmetro de pulso,
tensimetro digital.

TRABAJO DE GRADUACIN PREVIO A LA OBTENCIN


DEL TTULO DE INGENIERO ELECTRNICO.

AUTORES:
FREDDY XAVIER GORDILLO PADILLA.

DIRECTOR:
LCDO. LEOPOLDO CARLOS VSQUEZ RODRGUEZ.

CUENCA, ECUADOR
2014

Gordillo Padilla ii

DEDICATORIA

A mi madre que siempre me ha apoyado


incondicionalmente

en

todos

los

proyectos que he emprendido en mi vida


y que ha estado a mi lado en los buenos y
malos momentos, por esto y por muchas
cosas ms le dedico este logro muy
importante de mi vida.

Xavier Gordillo P.

Gordillo Padilla iii

AGRADECIMIENTO

A mi familia por todo el apoyo anmico y


econmico

que

siempre

me

han

entregado, a Erika Crdova por todo el


apoyo, paciencia y amor que me ha tenido
durante mi vida universitaria, a los
profesores de la escuela de Ingeniera
Electrnica

por

su

enseanzas

dedicacin que han tenido conmigo y mis


compaeros, a Israel Mosquera por la
colaboracin en la ejecucin del presente
trabajo y en general a mis compaeros y
amigos con los que hemos compartido
dificultades y alegras durante nuestros
estudios en la prestigiosa Universidad del
Azuay.

Xavier Gordillo P.

Gordillo Padilla iv

DISEO E IMPLEMENTACIN DE UN SISTEMA DE MONITOREO


REMOTO DE SEALES BIOLGICAS, ELECTROCARDIOGRAMA,
OXMETRO DE PULSO, TENSIMETRO DIGITAL.

RESUMEN

El propsito general del presente proyecto de tesis es unificar, la tecnologa de


servicios web y software libre, basados en gestin de base de datos con dispositivos
de medicin de seales biomdicas ambulantes, concretamente, Electrografa,
Oximetra y Tensiometra de pulso y dispositivos mviles basados en sistema
operativo Android.

Los elementos de control medicin, gestin y comunicacin que intervienen en el


presente tema de tesis son microcontroladores, filtros digitales, amplificadores
operacionales de precisin y herramientas de software tales como NetBeans y
AppInventor; cuya interaccin conforman, en un todo, un equipo biomdico completo
capaz de hacer usos de servicios web con distintos tipos de usuarios simultneamente,
tanto en un ordenador convencional como en dispositivos mviles.

PALABRAS CLAVE: Electrografa, Oximetra, Tensiometra, Servicio Web,


Arduino, Java, Android.

_______________________________

________________________________

Lcdo. Leopoldo Carlos Vsquez Rodrguez

Ing. Francisco Eugenio Vsquez Calero

DIRECTOR DE TESIS.

DIRECTOR DE ESCUELA.

_______________________
Freddy Xavier Gordillo Padilla
AUTOR.

Gordillo Padilla v
ABSTRACT

Gordillo Padilla vi

NDICE DE CONTENIDO.

DEDICATORIA ......................................................................................................... ii
AGRADECIMIENTO .............................................................................................. iii
RESUMEN ................................................................................................................. iv
ABSTRACT ................................................................................................................ v
NDICE DE CONTENIDO. ..................................................................................... vi
NDICE DE ANEXOS ............................................................................................. x
NDICE DE FIGURAS. ......................................................................................... xii
INTRODUCCIN. .................................................................................................... 1

CAPTULO 1: MARCO TERICO. ....................................................................... 3

Electrocardigrafo. ........................................................................................ 3
1.1.1

Fisionoma. ............................................................................................. 3

1.1.2

Nomenclatura de las Ondas del Electrocardiograma. ............................ 5

1.1.3

Bioelectrodos (Sensor). .......................................................................... 7

1.1.4

Cable para Electrocardiografa convencional. ....................................... 8

1.1.5

Mtodo de Adquisicin de Seales. ....................................................... 9

Oxmetro. ..................................................................................................... 14
1.2.1

Conceptos Generales ............................................................................ 14

1.2.2

Oximetra de Pulso. .............................................................................. 15

Tensimetro. ................................................................................................ 17
1.3.1

Presin Arterial .................................................................................... 17

1.3.2

Mtodos de adquisicin........................................................................ 20

1.3.3

Sensor de Presin. ................................................................................ 23

Gordillo Padilla vii


CAPTULO 2: HARDWARE DEL DISPOSITIVO............................................. 26

Electrocardiograma...................................................................................... 26
2.1.1

Recoleccin de Seales. ....................................................................... 26

2.1.2

Protecciones y Amplificador Instrumental........................................... 26

2.1.3

Filtro pasa Alto. .................................................................................... 31

2.1.4

Filtro pasa Bajo. ................................................................................... 33

2.1.5

Acople de Seal.................................................................................... 37

2.1.6

Filtros Digitales. ................................................................................... 40

Tensimetro. ................................................................................................ 47
2.2.1

Principio de Funcionamiento. .............................................................. 47

2.2.2

Diagrama de Bloques. .......................................................................... 48

2.2.3

Sensor. .................................................................................................. 48

2.2.4

Desarrollo. ............................................................................................ 49

Oxmetro. ..................................................................................................... 62
2.3.1

Principio de Funcionamiento: .............................................................. 63

2.3.2

Diagrama de bloques: ........................................................................... 65

2.3.3

Desarrollo. ............................................................................................ 65

El Microcontrolador. ................................................................................... 67

CAPTULO 3: SOFTWARE DEL DISPOSITIVO MVIL. .............................. 69

ANDROID. .................................................................................................. 69
3.1.1

Caractersticas. ..................................................................................... 69

3.1.2

Arquitectura de Android. ..................................................................... 70

3.1.3

Aplicaciones. ........................................................................................ 71

3.1.4

Framework de Aplicaciones. ................................................................ 71

3.1.5

App Inventor. ....................................................................................... 72

Gordillo Padilla viii


Objetivos de la Aplicacin. ......................................................................... 77
Desarrollo de Interfaz Grfica en el Dispositivo Mvil. ............................. 79
3.3.1

Pantalla de Bienvenida y Sesin. ......................................................... 79

3.3.2

Pantalla de Registro.............................................................................. 85

3.3.3

Pantalla RegistroImagen. ..................................................................... 95

3.3.4

Pantalla de men. ................................................................................. 99

3.3.5

Pantalla ActualizarDatos. ................................................................... 103

3.3.6

Pantalla ECG: ..................................................................................... 111

3.3.7

Pantalla Oxmetro............................................................................... 121

CAPTULO 4: SOFTWARE DEL SERVICIO WEB. ....................................... 129

JAVA. ........................................................................................................ 129


4.1.1

Definicin. .......................................................................................... 129

4.1.2

Caractersticas. ................................................................................... 129

4.1.3

Servlet. ............................................................................................... 130

Servlets Biokit UDA ................................................................................. 132


4.2.1

Servlet ActualizarUs.java. .................................................................. 132

4.2.2

Servlet CargarImagen.java. ................................................................ 133

4.2.3

Servlet ComUsuario.java. .................................................................. 133

4.2.4

Servlet ComEmail.java. ..................................................................... 134

4.2.5

Servlet ConsultarUsuario.java. .......................................................... 134

4.2.6

Servlet GrabarECG.java. .................................................................... 135

4.2.7

Servlet Imag.java................................................................................ 136

4.2.8

Servlet MostrarECGSimple.java. ....................................................... 137

4.2.9

Servlet Perfil.java. .............................................................................. 138

4.2.10

Servlet Registro.java. ......................................................................... 139

4.2.11

Servlet Usuarios.java.......................................................................... 140

Gordillo Padilla ix
Pginas Web. ............................................................................................. 141
4.3.1

HTML. ............................................................................................... 141

4.3.2

JSP. ..................................................................................................... 142

4.3.3

JavaScript y NODEjs. ........................................................................ 143

4.3.4

Encriptacin Multiparte. .................................................................... 143

Pginas Web BiokitUda. ........................................................................... 144


4.4.1

Biokituda.jsp. ..................................................................................... 144

4.4.2

Medico.jsp. ......................................................................................... 145

4.4.3

CargaIma.jsp. ..................................................................................... 147

4.4.4

Cerrar.jsp. ........................................................................................... 148

4.4.5

Imagen.jsp. ......................................................................................... 148

4.4.6

Index.jsp. ............................................................................................ 148

.
CAPTULO 5: BASE DE DATOS. ...................................................................... 150

Software para manejo de datos. ................................................................. 150


5.1.1

Base de datos. ..................................................................................... 150

5.1.2

MySQL. .............................................................................................. 150

Desarrollo. ................................................................................................. 152


5.2.1

Electrocardiograma. ........................................................................... 153

5.2.2

Oxmetro. ........................................................................................... 153

5.2.3

Tensimetro........................................................................................ 154

CONCLUSIONES .................................................................................................. 155


BIBLIOGRAFA. ................................................................................................... 157
ANEXOS. ................................................................................................................ 161

Gordillo Padilla x

NDICE DE ANEXOS

ANEXOS. ............................................................................................................ 161


ANEXO 1: Circuito de Entrada del Electrocardiograma. .................................... 161
ANEXO 2: Circuito de Filtro Pasa Alto del Electrocardiograma. ....................... 162
ANEXO 3: Circuito de Filtro Pasa Bajo del Electrocardiograma. ...................... 163
ANEXO 4: Circuito de Filtro Notch del Electrocardiograma. ............................. 164
ANEXO 5: Circuito de Tensimetro Digital. ...................................................... 165
ANEXO 6: Circuito de Acople del Electrocardiograma y Mdulo de Oxmetro. 166
ANEXO 7: Cdigo de Index.html........................................................................ 167
ANEXO 8: Cdigo de BiokitUda.jsp ................................................................... 171
ANEXO 9: Cdigo de Cargaima.jsp .................................................................... 176
ANEXO 10: Cdigo de CerrarSesion.jsp ............................................................ 178
ANEXO 11: Cdigo de ActualizarUs. ................................................................. 179
ANEXO 12: Cdigo de CargarImagen. ............................................................... 181
ANEXO 13: Cdigo de ComUsuario................................................................... 182
ANEXO 14: Cdigo de CompEmail. ................................................................... 184
ANEXO 15: Cdigo de GrabarECG. ................................................................... 186
ANEXO 16: Cdigo de GrabarOximetro............................................................. 188
ANEXO 17: Cdigo de GrabarTensiometro. ....................................................... 190
ANEXO 18: Cdigo de Imag. .............................................................................. 192
ANEXO 19: Cdigo de MostrarECGSimple. ...................................................... 195
ANEXO 20: Cdigo de MostrarOximetro. .......................................................... 198
ANEXO 21: Cdigo de MostrarOximetroWeb. .................................................. 199
ANEXO 22: Cdigo de MostrarTensiometro. ..................................................... 201
ANEXO 23: Cdigo de MostrarTensiometroWeb. .............................................. 203
ANEXO 24: Cdigo de Perfil. ............................................................................. 206

Gordillo Padilla xi
ANEXO 25: Cdigo de Registro. ........................................................................ 208
ANEXO 26: Cdigo de Usuarios. ........................................................................ 210
ANEXO 27: Cdigo de Microcontrolador Arduino. ........................................... 212

Gordillo Padilla xii

NDICE DE FIGURAS.

FIGURA 1. Fisionoma del corazn. ........................................................................... 4


FIGURA 2. Potenciales de accin del corazn. ........................................................... 5
FIGURA 3. Forma de Onda del Electrocardiograma................................................... 6
FIGURA 4. Onda del ECG tpica. ............................................................................... 7
FIGURA 5. Electrodos de Ag/AgCl. ........................................................................... 8
FIGURA 6. Triangulo de Eithoven. ........................................................................... 11
FIGURA 7. Representaciones de las Derivaciones Precordiales. .............................. 11
FIGURA 8. Asignacin de Polaridad y derivaciones en triangulo de Eithoven de
acuerdo al comportamiento elctrico del corazn. ..................................................... 12
FIGURA 9. Derivacin I. ........................................................................................... 13
FIGURA 10. Derivacin II. ....................................................................................... 13
FIGURA 11. Derivacin III. ...................................................................................... 13
FIGURA 12. Ilustracin del teorema de Beer Lambert. ............................................ 16
FIGURA 13. Pulsioxmetro de dedo. ......................................................................... 17
FIGURA 14. Esquema representativo de la toma de la medida de la presin arterial de
modo manual. ............................................................................................................. 21
FIGURA 15. Curva de presin oscilatoria. ................................................................ 22
FIGURA 16. Sensor de presin ADP 510. ................................................................ 25
FIGURA 17. Disposicin de pines segn el tipo de encapsulado del sensor ADP 510.
.................................................................................................................................... 25
FIGURA 18. Amplificador Operacional INA 4228 en configuracin Buffer. .......... 26
FIGURA 19.Implementacin de amplificadores diferenciales INA 129 o AD620 a las
salidas del buffer. ....................................................................................................... 28
FIGURA 20. Implementacin del tercer electrodo. ................................................... 29
FIGURA 21.Salida del Amplificador Diferencial Primera Derivacin. .................... 29
FIGURA 22. Salida del Amplificador Diferencial Segunda Derivacin. .................. 30
FIGURA 23. Salida del Amplificador Diferencial Tercera Derivacin. ................... 30
FIGURA 24. Filtro pasa alto con buffer. ................................................................... 31
FIGURA 25. Respuesta al filtro. ................................................................................ 32
FIGURA 26. Salida del filtro Pasa alto Primera Derivacin. .................................... 32
FIGURA 27. Salida del filtro Pasa alto Segunda Derivacin. ................................... 33

Gordillo Padilla xiii


FIGURA 28. Salida del filtro Pasa alto Tercera Derivacin. ..................................... 33
FIGURA 29. Filtro pasa bajo pasivo.......................................................................... 35
FIGURA 30. Respuesta al filtro pasa bajo. ................................................................ 35
FIGURA 31. Respuesta a travs del filtro pasa banda. .............................................. 36
FIGURA 32. Respuesta al filtro pasa banda de la primera derivacin. ..................... 37
FIGURA 33. Respuesta al filtro pasa banda de la segunda derivacin. .................... 37
FIGURA 34. Respuesta al filtro pasa banda de la tercera derivacin. ....................... 37
FIGURA 35. Partidor de tensin para acoplamiento con el microcontrolador. ......... 38
FIGURA 36. Respuesta del Acople de la Primera Derivacin. ................................. 39
FIGURA 37. Respuesta del Acople de la Segunda Derivacin. ................................ 39
FIGURA 38. Respuesta del Acople de la Tercera Derivacin................................... 40
FIGURA 39. Filtro calculado en funcin de la frecuencia digital. ............................ 41
FIGURA 40. Respuesta del Sistema de filtro pasa banda digital, primera derivacin.
.................................................................................................................................... 42
FIGURA 41. Respuesta del Sistema de filtro pasa banda digital, segunda derivacin.
.................................................................................................................................... 42
FIGURA 42. Respuesta del Sistema de filtro pasa banda digital, tercera derivacin.
.................................................................................................................................... 42
FIGURA 43. Diseo del circuito de adquisicin de seales. ..................................... 43
FIGURA 44. Simulacin del circuito real de adquisicin de seales. ....................... 43
FIGURA 45. Circuito impreso de la adquisicin de seales. .................................... 43
FIGURA 46. Diseo del circuito del filtro pasa alto. ................................................ 44
FIGURA 47. Simulacin del circuito real del filtro pasa alto. .................................. 44
FIGURA 48. Circuito impreso del filtro pasa alto. ................................................... 44
FIGURA 49. Diseo del circuito del filtro pasa bajo. ............................................... 45
FIGURA 50. Simulacin del circuito real del filtro pasa bajo. .................................. 45
FIGURA 51. Circuito impreso de filtro pasa bajo. .................................................... 46
FIGURA 52. Diseo del circuito de acople de seales. ............................................. 46
FIGURA 53. Simulacin del circuito real de acople de seales. .............................. 47
FIGURA 54. Circuito impreso de acople de seales. ................................................ 47
FIGURA 55. Diagrama de bloques del proceso de adquisicin y generacin de datos
en el equipo Tensiomtrico. ....................................................................................... 48
FIGURA 56. Esquema grfico del sensor SCC05DD4. ............................................ 49
FIGURA 57. Amplificador instrumental de ganancia aproximada a 100. ................. 50

Gordillo Padilla xiv


FIGURA 58. Filtro pasa bajo de 100 Hz aproximadamente. ..................................... 51
FIGURA 59. Grfico del comportamiento de las seales antes y despus de la
atenuacin. ................................................................................................................. 52
FIGURA 60. Optotransistor TLP521. ........................................................................ 53
FIGURA 61. Implementacin del transistor y optoacoplador con los parmetros
requeridos. .................................................................................................................. 54
FIGURA 62. Esquema de control de bomba y electrovlvula. .................................. 56
FIGURA 63. Visualizacin de la seal captada. ........................................................ 56
FIGURA 64. Fragmento de inters de la seal completa generada por el tensimetro.
.................................................................................................................................... 57
FIGURA 65. Respuesta del filtro digital en funcin de la Potencia vs Frecuencia. .. 58
FIGURA 66. Forma de onda derivada de la aplicacin del filtro a la seal adquirida.
.................................................................................................................................... 59
FIGURA 67. Disminucin de picos de seal caractersticos PAD y PAM entre la seal
propia del tensimetro. ............................................................................................... 60
FIGURA 68. Diseo del circuito de control y adquisicin de datos del tensimetro
digital. ........................................................................................................................ 61
FIGURA 69. Simulacin del circuito impreso real del control y adquisicin de datos
del tensimetro digital. ............................................................................................... 62
FIGURA 70. Circuito impreso correspondiente al control y adquisicin de datos del
tensimetro digital. ..................................................................................................... 62
FIGURA 71. Esquema del flujo de sangre arterial. ................................................... 64
FIGURA 72. Diagrama de bloques del funcionamiento del Oxmetro de pulso. ...... 65
FIGURA 73. Ciclo de trabajo del oxmetro en forma de PWM. ............................... 66
FIGURA 74. Respuesta del filtro digital en funcin de la Potencia vs Frecuencia. .. 66
FIGURA 75. Resultado de la seal filtrada. .............................................................. 67
FIGURA 76. Diagrama de bloques del funcionamiento del microcontrolador. ....... 68
FIGURA 77. Componentes de la arquitectura Android. ............................................ 70
FIGURA 78. Formato de inicio de aplicacin. .......................................................... 73
FIGURA 79. Banco de Bloques. ................................................................................ 74
FIGURA 80. Visualizador de diseo. ........................................................................ 75
FIGURA 81.Esquema de bloques. ............................................................................. 75
FIGURA 82. Opciones de conexin. ......................................................................... 76
FIGURA 83. Aplicacin de los componentes de interfaz grfica de AppInventor. .. 81

Gordillo Padilla xv
FIGURA 84. Diagrama de flujo de la programacin de la aplicacin. ...................... 82
FIGURA 85. Bloques de evento Click del Botn Conectar. ..................................... 83
FIGURA 86. Bloques de evento GotText del componente Web. .............................. 83
FIGURA 87. Bloque del evento click en el botn Registro. ...................................... 84
FIGURA 88. Bloque del evento click en el botn atrs. ............................................ 84
FIGURA 89. Diseo de la pantalla de Registro en la seccin de App inventor parte1.
.................................................................................................................................... 86
FIGURA 90. Diseo de la pantalla de Registro en la seccin de App inventor parte2.
.................................................................................................................................... 87
FIGURA 91. Diagrama de flujo del funcionamiento de la pantalla de Registro. .... 88
FIGURA 92. Diagrama de flujo del funcionamiento de la pantalla de Registro. .... 89
FIGURA 93. Bloques de inicializacin de variables. ................................................ 90
FIGURA 94. Bloques del evento LostFocus del componente TxtNickname. ........... 90
FIGURA 95. Bloque del evento GotText del componente web SvtComUsuario...... 91
FIGURA 96. Bloque del evento LostFocus del componente TxtEmail..................... 91
FIGURA 97. Bloque del evento GotText del componente web SvtCompEmail. ...... 92
FIGURA 98. Bloque del evento LostFocus del componente TxtPass. ...................... 93
FIGURA 99. Bloque del evento Click del botn Registrar. ...................................... 94
FIGURA 100. Bloque del evento GotText del componente web SvtRegistro. ......... 95
FIGURA 101. Diseo de la pantalla RegistroImagen. ............................................... 96
FIGURA 102. Diagrama de flujo de la pantalla RegistroImagen. ............................. 97
FIGURA 103. Bloque de inicializacin de variables y pantalla. ............................... 98
FIGURA 104. Bloque de evento GotText del componente web SvtUsuario. ........... 98
FIGURA 105. Bloques de los eventos click en los botes BtnDespues Ahora No y
Atrs........................................................................................................................ 99
FIGURA 106. Bloque de evento Click del BtnImagen.............................................. 99
FIGURA 107. Diseo de la pantalla Men. ............................................................. 100
FIGURA 108. Diagrama de flujo de la pantalla Men. ........................................... 101
FIGURA 109. Bloque de Inicializacin de la pantalla Men. ................................. 102
FIGURA 110. Bloques del evento Click de los botones Atrs y Cerrar. ................. 102
FIGURA 111. Bloques del evento Click de los componentes BtnUsuarios, BtnEcg,
BtnOximetro, BtnTensiometro. ................................................................................ 103
FIGURA 112. Diseo de la pantalla ActualizarDatos. ............................................ 104
FIGURA 113. Diagrama de flujo de la pantalla ActualizarDatos. .......................... 105

Gordillo Padilla xvi


FIGURA 114. Evento Initialize de la pantalla ActualizarDatos. ............................. 106
FIGURA 115. Proceso CargarImagen. .................................................................... 106
FIGURA 116. Evento GotText del Componente SvtConsultarUsuario. ................. 107
FIGURA 117. Evento Click del componente BtnActualizar. .................................. 108
FIGURA 118. Proceso Actualizar............................................................................ 109
FIGURA 119. Evento GotText del componente SvtActualizarDatos. .................... 110
FIGURA 120. Evento TouchDown del componente ImgUsuario. .......................... 110
FIGURA 121. Evento de presin de los componentes BtnRegresar y Atrs del sistema.
.................................................................................................................................. 111
FIGURA 122. Proceso datossalida. ......................................................................... 111
FIGURA 123. Diseo de la Pantalla ECG. .............................................................. 112
FIGURA 124. Diagrama de Flujo de la Pantalla ECG. ........................................... 113
FIGURA 125. Inicializar variables en Pantalla ECG............................................... 114
FIGURA 126.Evento Initialize de la Pantalla ECG. ................................................ 115
FIGURA 127.Procedimiento Conectar. ................................................................... 115
FIGURA 128.Evento Timer del Timer Parte 1. ....................................................... 117
FIGURA 129. Evento Timer del Timer Parte 2. ...................................................... 118
FIGURA 130.Evento Timer del Timer Parte 3. ....................................................... 119
FIGURA 131. Evento Click del componente BtnDetener y su respectivo notificador.
.................................................................................................................................. 120
FIGURA 132. Evento BackPressed del botn Atrs del sistema. ........................... 120
FIGURA 133. Diseo de la Pantalla Oxmetro........................................................ 121
FIGURA 134. Diagrama de Flujo de la Pantalla Oxmetro. .................................... 122
FIGURA 135. Inicializar variables en Pantalla Oxmetro. ...................................... 123
FIGURA 136. Evento Initialize de la Pantalla Oxmetro. ....................................... 123
FIGURA 137. Procedimiento Conectar. .................................................................. 124
FIGURA 138. Evento Click del componente BtnIniciar. ........................................ 124
FIGURA 139. Evento Timer del Timer Parte 1. ...................................................... 125
FIGURA 140. Evento Timer del Timer Parte 2. ...................................................... 126
FIGURA 141. Evento Timer del Timer Parte 3. ...................................................... 127
FIGURA 142. Evento Click del componente BtnDetener y su respectivo notificador.
.................................................................................................................................. 128
FIGURA 143. Evento BackPressed del botn Atrs del sistema. ........................... 128
FIGURA 144. Esquema grfico de las funciones de un Servlet. ............................. 131

Gordillo Padilla xvii


FIGURA 145. Ejemplo de Servlet Actualizar.......................................................... 132
FIGURA 146. Ejemplo de Servlet ComUsuario. ..................................................... 133
FIGURA 147. Ejemplo de Servlet ComEmail.java. ................................................ 134
FIGURA 148. Ejemplo de Servlet ConsultarUsuario.java. ..................................... 135
FIGURA 149. Ejemplo de Servlet GrabarECG.java. .............................................. 136
FIGURA 150. Ejemplo de Servlet Imag.java. ......................................................... 137
FIGURA 151. Ejemplo de Servlet MostrarECGSimple.java. ................................. 138
FIGURA 152. Ejemplo de Servlet Perfil.java. ......................................................... 139
FIGURA 153. Ejemplo de Servlet Registro.java. .................................................... 140
FIGURA 154. Ejemplo de Servlet Usuarios.java. ................................................... 140
FIGURA 155. Ejemplo de Servlet ConsultarUsuario.java aplicado en dispositivo. 141
FIGURA 156. Esquema de funcionamiento del mvil JSP. .................................... 142
FIGURA 157. Biokituda.jsp. ................................................................................... 145
FIGURA 158.Medico.jsp. ........................................................................................ 146
FIGURA 159. Medico.jsp. ....................................................................................... 146
FIGURA 160. Medico.jsp. ....................................................................................... 147
FIGURA 161. CargaIma.jsp. ................................................................................... 148
FIGURA 162. Index.jsp. .......................................................................................... 149
FIGURA 166. Logo de MySQL y productos relacionados...................................... 152
FIGURA 167.Diagrama entidad Relacin del Manejo de datos en ECG. ............... 153
FIGURA 168.Diagrama entidad Relacin del Manejo de datos en Oxmetro de Pulso.
.................................................................................................................................. 154
FIGURA 169. Diagrama entidad Relacin del Manejo de datos en Tensimetro. .. 154

Gordillo Padilla 1
Gordillo Padilla Freddy Xavier.
Trabajo de Graduacin.
Lcdo. Leopoldo Carlos Vsquez Rodrguez.
Octubre 2014.

DISEO E IMPLEMENTACIN DE UN SISTEMA DE MONITOREO


REMOTO DE SEALES BIOLGICAS, ELECTROCARDIOGRAMA,
OXMETRO DE PULSO, TENSIMETRO DIGITAL.

INTRODUCCIN.

Es innegable el avance cada vez ms raudo de la medicina y logros en el campo mdico


en general, ya sea si se habla de medicamentos, tcnicas teraputicas, tratamiento de
enfermedades, terapias de recuperacin o verificacin del funcionamiento de rganos,
fluidos, aparatos, y dems; mismos progresos que derivan, en un todo, en una mejor
calidad y expectativa de vida.
Por otro lado, as como es absolutamente indiscutible el progreso de la ciencia en el
campo mdico, es igualmente innegable el hecho de que los avances mdicos y
tecnolgicos van de la mano; y es que la tecnologa ha sido el puente que ha permitido
a la ciencia en sus distintas ramas, la evolucin como tal.
Partiendo de esta premisa es fcil imaginarse el camino que toma el presente tema de
tesis, sin embargo, ya que ambos temas, tanto la medicina como la tecnologa, son
extremadamente amplios, se ha de puntualizar en que aspecto, tanto en el tema medico
como el tecnolgico, como se van a unificar los conceptos, para consecuentemente,
hacer real un proyecto.
Los temas mdicos sobre los cuales se va a hacer un escrutinio son, puntualmente, la
electrocardiografa, oximetra y tensiometra, a su vez, nombrando estas tres ramas
implcitamente se esclarece tambin los aspectos tecnolgicos sobre los cuales se van
aplicar mejoras, lgicamente son, los equipos electromdicos utilizados para medir o
cuantificar los valores referentes a cada uno de las ciencias mdicas al principio
mencionadas.
La tecnologa electromdica en cuanto a electrocardiografa, oximetra de pulso, y
tensiometra, ya ha sido generada hace algn tiempo, el objetivo del presente tema de

Gordillo Padilla 2
tesis no es simplemente generar este tipo de equipos, sino optimizar, mejorar,
enriquecer, y en general, dotar a dichos equipos ya existentes de cualidades altamente
tiles, como lo son servicios de consulta web en tiempo de real, registro de usuarios e
informacin de usuarios, almacenamiento de informacin en base de datos para
consulta, y dems servicios que tienen que ver con programacin web y bases de datos,
obviamente dando por sentado ya contar con un equipo electrocardiogrfico,
oximtrico, y tensiomtrico que generen mediciones con un margen de error mnimo.
Todas estas caractersticas ya mencionadas dotan a los equipos electromdicos de
cualidades ventajas extremadamente tiles, tales como:
-

Ahorro de tiempo tanto en la toma de mediciones como en la difusin de la


informacin a los profesionales encargados de la misma sin importar su
ubicacin.

Aumento de eficiencia en la forma de llevar la informacin de las mediciones


de cada uno de los pacientes por parte del profesional.

Minimizacin de errores de interpretacin y errores en general.

Una vez expuesto lo anterior, es obvia la justificacin del presente tema, mismo que
se pasa a exponer a continuacin.

Gordillo Padilla 3
1

CAPTULO 1

MARCO TERICO.
Electrocardigrafo.

Es un equipo electromdico que permite obtener un registro de la actividad elctrica


del corazn para su posterior anlisis. Conocido como ECG, el electrocardiograma es
uno de los equipos ms utilizados en cardiologa para estudios electrofisiolgicos del
corazn, debido a que su uso se ejecuta a travs de un mtodo no invasivo que permite
registrar la actividad elctrica del msculo cardiaco desde la superficie del cuerpo del
paciente (dermis) (Toloza, http://www.dalcame.com/, 2005).
1.1.1

Fisionoma.

1.1.1.1 Estructura bsica del corazn.

El corazn humano, y de los mamferos en general posee cuatro cavidades que son:
-

Aurcula Derecha.

Aurcula Izquierda.

Ventrculo Derecho.

Ventrculo Izquierdo.

Las paredes de estas cuatro cavidades estn formadas por clulas elctricamente
excitables conocidas como clulas musculares cardiacas.
Se puede dividir al corazn en dos mitades bien diferenciadas con una cavidad
auricular y ventricular en cada mitad, cabe resaltar que existe comunicacin entre
aurcula y ventrculo dentro de cada mitad pero no existe comunicacin entre las dos
mitades (FIGURA 1).
La labor que efecta el corazn es semejante a la de una bomba hidrulica, una en cada
mitad. La mitad derecha recibe sangre venosa con predominio de Dixido de Carbono
en ella (CO2), y la bombea a travs de una contraccin hacia los pulmones para ser
purificada, por otro lado, en la mitad izquierda se recibe la sangre arterial abundante
en Oxigeno (O2) proveniente de los pulmones y la bombea a todo el organismo con

Gordillo Padilla 4
una contraccin final a travs de la arteria aorta (Toloza, http://www.dalcame.com/,
2005).
FIGURA 1. Fisionoma del corazn.

Fuente: (Toloza, 2005).


1.1.1.2 El Nodo SA.

El ndulo sinoauricular o de Keith y Flack (nodo SA) es una de las estructuras donde
se origina el impulso elctrico que da origen a un latido cardaco.
1.1.1.3 Potenciales de accin de las Clulas Cardacas.

A raz de una actividad sincrnica espontnea en el nodo sino auricular se


desencadenan los diferentes potenciales de accin en las distintas estructuras celulares
del corazn, los registros mostrados en el electrocardiograma corresponden al
resultado de la superposicin de las ondas generadas por dichos potenciales de accin
(FIGURA 2). Las clulas capaces de generar potenciales de accin espontneos se
llaman clulas marcapasos (Toloza, http://www.dalcame.com/, 2005).

Gordillo Padilla 5

FIGURA 2. Potenciales de accin del corazn.

Fuente: (Toloza, 2005).


1.1.2

Nomenclatura de las Ondas del Electrocardiograma.

Onda P: Representa la despolarizacin de las aurculas.

Tiene una morfologa

redondeada, con una duracin mxima de 0.10s (2.5mm) y un voltaje de 0.25 mV (2.5
mm). Es positiva en todas las derivaciones salvo en la VR del plano frontal que es
negativa, y en la derivacin V1 del plano horizontal (FIGURA 3).
Onda Q: La deflexin negativa inicial resultante de la despolarizacin ventricular, que
precede una onda R (FIGURA 4). La duracin de la onda Q es de 0,010 a 0,020
segundos. Normalmente no supera los 0,30 segundos.
Onda R: La primera deflexin positiva (FIGURA 3).
Onda S: La segunda deflexin negativa (FIGURA 3).
Onda T: Es la deflexin lenta producida por la repolarizacin ventricular (FIGURA
3).

Gordillo Padilla 6
Onda U: Es una onda generalmente positiva que sigue inmediatamente a la onda T
(FIGURA 3).
Intervalo R-R: Es la extensin existente entre dos ondas RR sucesivas. (FIGURA 4).
Intervalo P-P: Es la extensin existente entre dos ondas P sucesivas. (FIGURA 4).
Intervalo P-R: Es la extensin existente desde el inicio de la onda P hasta el inicio de
la onda Q o de la onda R. Posee una extensin aproximada entre 0.12 y 0.20
segundos. (FIGURA 4).
Intervalo QRS: Tiempo total de despolarizacin ventricular. Se mide desde el
comienzo de la onda Q o R hasta el final de la onda S. Los valores normales fluctan
entre 0.06 y 0.10segundos. (FIGURA 4).
Intervalo Q-T: Se extiende desde el comienzo del complejo QRS hasta el final de la
onda T, representa la sstole elctrica ventricular. (FIGURA 4).
Segmento S-T: Es un periodo de inactividad que va desde el final del complejo QRS
hasta el comienzo de la onda T y separa la despolarizacin ventricular de la
repolarizacin ventricular. (FIGURA 4).
FIGURA 3. Forma de Onda del Electrocardiograma.

Fuente: (Toloza, 2005).

Gordillo Padilla 7
FIGURA 4. Onda del ECG tpica.

Fuente: (Toloza, 2005).


1.1.3

Bioelectrodos (Sensor).

Propsitos y Particularidades: Dentro de la electromedicina, los bioelectrodos son


utilizados tanto para la medicin de seales bioelctricas, como para la inyeccin de
corriente elctrica al tejido vivo (Toloza, http://www.dalcame.com/, 2005).
Los electrodos ms comnmente usados, y los que se utilizaran en el desarrollo del
presente tema establecen un contacto hmico con el tejido a travs de un electrolito,
que al entrar en contacto con el electrodo, se genera un intercambio de iones y
electrones, ya que los iones de la substancia electroltica entran en contacto con el
metal, y simultneamente los electrones del metal con los del electrolito; este
intercambio por parte de ambas substancias genera una diferencia de potencial
conocido con el nombre de potencial de Media Celda que no es ms que el potencial
derivado de la interface electrodo-electrolito (Toloza, http://www.dalcame.com/,
2005). Cabe resaltar que la calidad del potencial de media celda depende de los
siguientes aspectos a tener en cuenta:
-

Pureza del material con el que est fabricado el electrodo

Interface homognea electrodo-electrolito.

Inmovilidad del paciente.

Homogeneidad del electrolito.

Gordillo Padilla 8
1.1.3.1 Electrodos de Plata o Cloruro de Plata (Ag/AgCl)
Los electrodos que se usaran en el proceso, bsicamente consisten en un conductor
metlico en contacto con la piel a travs de una pasta electroltica colocada en la
dermis del paciente que tiene como propsito establecer y mantener el contacto
(FIGURA 5). Tradicionalmente el electrodo se hace de una aleacin plata-nquel
(Toloza, http://www.dalcame.com/, 2005). El objetivo de los electrodos obviamente
consiste en recoger la seal de la superficie cutnea.
FIGURA 5. Electrodos de Ag/AgCl.

Fuente: (Toloza, 2005).


Cabe aadir algunas especificaciones tcnicas para su uso, tales como:
-

Impedancia inferior a 2 k.

Voltaje de desplazamiento de corriente debe ser inferior a 100 mV.

Recuperacin de Sobrecarga de desfibrilacin debe ser inferior a 100 mV.

Ruido Interno no debe ser superior a 150 mV.

1.1.4

Cable para Electrocardiografa convencional.

Una normativa internacional para conjuntos de derivaciones y cables diseados para


medir el Electrocardiograma aseguran una correcta aplicacin de los electrodos, sus
posiciones y cdigo de colores segn

la norma de la Comisin Electrotcnica

Internacional (IEC ) y La Asociacin Americana para el Desarrollo de la


Instrumentacin Mdica (AAMI) se indican en la junta del cable bsico asignado,
como se muestra en la Tabla 1.1,

a sus distintas derivaciones y extremidades

correspondientes (Toloza, http://www.dalcame.com/, 2005).

Gordillo Padilla 9
Posicin

Color

Electrodos
Mano derecha
Pie derecho
Mano izquierda
Pie izquierdo
V1
V2
V3
V4
V5
V6

1.1.5

Tabla 1.1. Cdigo de Colores para la posicin de los electrodos.

Mtodo de Adquisicin de Seales.

1.1.5.1 Derivaciones Electrocardiogrficas.


En el electrocardiograma, las derivaciones cardiacas son el registro de la diferencia de
potenciales elctricos entre dos puntos, ya sea entre dos electrodos (derivacin bipolar)
o entre un punto virtual y un electrodo (derivaciones monopolares) (Toloza,
http://www.dalcame.com/,

2005).

Dicho

de

otra

forma,

las

derivaciones

electrocardiogrficas son disposiciones especficas de los electrodos, llamadas


simplemente derivaciones y en la prctica clnica se utilizan un nmero de doce (Tabla
1.2), clasificadas de la siguiente forma:
-

Derivaciones del plano frontal : subdivididas a su vez en :

Gordillo Padilla 10
-

Bipolares. Derivacin proveniente de la diferencia de potenciales elctricos


entre dos electrodos.

Monopolares. Derivacin proveniente de la diferencia de potenciales elctricos


entre un punto virtual y un electrodo ver FIGURA 6 y FIGURA 7.
Derivacin

Tipo

Clculos

Extremidad

LA RA

II

Extremidad

LL RA

III

Extremidad

LL LA

aVR

Aumentada

RA (LA+LL)/2

aVL

Aumentada

LA (RA+LL)/2

aVF

Aumentada

LL (RA + LA)/2

V1

Precordial

V1-(RA+LA+LL)/3

V2

Precordial

V2-(RA+LA+LL)/3

V3

Precordial

V3-(RA+LA+LL)/3

V4

Precordial

V4-(RA+LA+LL)/3

V5

Precordial

V5-(RA+LA+LL)/3

V6

Precordial

V6-(RA+LA+LL)/3

Tabla 1.2. Derivaciones precordiales.

Gordillo Padilla 11
FIGURA 6. Triangulo de Eithoven.

Fuente: (Toloza, 2005).

FIGURA 7. Representaciones de las Derivaciones Precordiales.

Fuente: (Toloza, 2005).


En el desarrollo del presente proyecto, se utilizar 3 derivaciones para la toma de
seales y mediciones respectivas en el plano frontal, ms concretamente las
derivaciones bipolares basadas en los conceptos del mtodo creado por Willen
Einthoven (Toloza, http://www.dalcame.com/, 2005).
1.1.5.2 Tringulo de Einthoven.
Segn Einthoven, si consideramos al corazn una fuente de corriente y al cuerpo un
conductor, se puede imaginar un tringulo alrededor del corazn en cuyos lados se
proyectaran los potenciales elctricos generados por el msculo cardiaco, entonces,
de acuerdo al comportamiento elctrico del corazn y a su proyeccin en las
respectivas extremidades se asignara polaridad a las extremidades que vienen siendo
los vrtices del tringulo. Colocando electrodos en los vrtices; podan tomarse tres

Gordillo Padilla 12
diferencias de potencial entre los electrodos, y de esta manera, podra describirse
acertadamente la actividad elctrica del musculo cardiaco en un plano paralelo a la
superficie frontal del cuerpo. (FIGURA 8.) (Toloza, http://www.dalcame.com/, 2005).
FIGURA 8. Asignacin de Polaridad y derivaciones en triangulo de Eithoven de
acuerdo al comportamiento elctrico del corazn.

Fuente (Ramon, 2013).


Como vemos, el brazo derecho (RA) presenta una polaridad negativa puesto que la
base del corazn se proyecta sobre l. El brazo izquierdo (LA) recibe potenciales altos
de la pared lateral del ventrculo izquierdo, que se aproximan a dicho miembro y
originan su polaridad positiva.
Por otro lado, la pierna izquierda (LL) recibe los potenciales de la cara diafragmtica
del corazn, formada por las paredes de ambos ventrculos, por lo que recibe, al igual
que el brazo izquierdo, su polaridad positiva (Toloza, http://www.dalcame.com/,
2005).
A continuacin se describirn las derivaciones 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 (Toloza, http://www.dalcame.com/, 2005), siendo:

DI = LA RA (FIGURA 9).
DII = LL - RA (FIGURA 10).
DIII = LL- LA (FIGURA 11).

Gordillo Padilla 13
FIGURA 9. Derivacin I.

Fuente: (Toloza, 2005).


FIGURA 10. Derivacin II.

Fuente: (Toloza, 2005).


FIGURA 11. Derivacin III.

Fuente: (Toloza, 2005).

Gordillo Padilla 14
Oxmetro.
1.2.1

Conceptos Generales

1.2.1.1 Hemoglobina.
Es una protena soluble (globulina) presente en la sangre constituyendo
aproximadamente un 35% de su peso. Es la encargada de transportar el oxgeno desde
los rganos respiratorios hasta los tejidos, junto con las cadenas de protenas que la
conforman (grupo hemo), posee un ion de hierro (Fe) lo que permite unir de forma
reversible molculas de oxgeno (Brandan, 2008).
Eventualmente pueden presentarse en la sangre concentraciones anormales y
perjudiciales de hemoglobina (Brandan, 2008), lo que caracterizan diversas patologas
relacionadas con la sangre tales como
-

Carboxihemoglobina (HbCO)

Metahemoglobina (MetHb)

Hemoglobina total

1.2.1.2 Oximetra.
En general podemos definir a la oximetra como la medicin del oxgeno (O2) en la
sangre, concretamente, la cantidad de oxigeno presente en la hemoglobina sangunea
(oxihemoglobina HbO2) que circula a travs de los vasos sanguneos, y, a su vez,
comparndola con un valor referencial llamado valor de Saturacin parcial de Oxigeno
(SpO2), que es inversamente proporcional al valor total de la hemoglobina presente
(SYLVIA PALACIOS M., 2010), lo que expresado matemticamente vendra siendo:
SaO2 = Concentracin de oxihemoglobina (HbO2)/Concentracin total de
hemoglobina.

Gordillo Padilla 15
1.2.2

Oximetra de Pulso.

1.2.2.1 Mtodo.
Un oxmetro de pulso es un equipo electromdico capaz de medir la saturacin de
oxigeno (SpO2) en la sangre a travs de un mtodo no invasivo, a diferencia de la
oximetra de tipo fibrptica donde se introduce un catter en el paciente; a su vez, el
oxmetro de pulso brinda resultados relativamente instantneos por lo que se considera
una tcnica de monitoreo en tiempo real (SYLVIA PALACIOS M., 2010).
1.2.2.2 Fundamento terico.
Las tcnicas de oximetra de pulso se basan principalmente en conceptos relacionados
con espectrofotometra, concretamente la ley de Berrlamber (FIGURA 12), cuyo
enunciado textualmente dice La intensidad luminosa que se absorba al pasar por una
solucin es proporcional a la concentracin de la molcula en dicha solucin
(Kubota., 2009). En otras palabras, la intensidad de luz que atraviesa un cuerpo es
inversamente proporcional a la concentracin molecular de dicho cuerpo, que
expresado matemticamente vendra siendo:
0 = 1
En donde:
Io = Intensidad de luz incidente.
1 = Intensidad de luz que atraviesa el cuerpo
l =distancia de la luz que atraviesa por el cuerpo
c = concentracin
= coeficiente de absorcin

Gordillo Padilla 16
FIGURA 12. Ilustracin del teorema de Beer Lambert.

Fuente: (Prez, 2010).


1.2.2.3 Sensores.
Para la medicin de SpO2 el oxmetro de pulso consta de dos sensores luminosos
(diodos LED) emisores de luz a diferentes longitudes de onda, el uno rojo (longitud de
onda = 650 nm), y el otro cerca del valor del infrarrojo (longitud de onda = 900 nm),
de ah que los sensores no pueden ser intercambiables entre equipos de marcas o
caractersticas diferentes.
Dichos sensores van colocados en el dedo de la mano o el lbulo de la oreja, y en el
empeine en caso de los neonatos, al momento que la luz roja incida en el dedo o lbulo
del paciente, cierto flujo lumnico atravesara el mismo, esta intensidad luminosa ser
recibida por el led infrarrojo cuya potencia lumnica registrar la densidad de la
solucin que atraviesa la luz, para las lecturas del oxmetro (Cueva, 2008) (FIGURA
13).

Gordillo Padilla 17
FIGURA 13. Pulsioxmetro de dedo.

Fuente: (Multstock, 2012).


La diferenciacin ptica de la sangre rica en O2 (arterial), de la pobre en O2 (venosa)
es efectiva en un Oxmetro gracias a dos circunstancias:

La trasmisin de la luz a travs de la sangre oxigenada (rica en HbO2) es


mxima a una longitud de onda roja (640 a 660 nm) y casi nula para sangre
pobre en HbO2.

La trasmisin de la luz a travs de la sangre oxigenada (rica en HbO2) y no


oxigenada (pobre en O2) es muy parecida a una longitud de onda infrarroja de
805 nm (Cueva, 2008).
Tensimetro.

1.3.1

Presin Arterial

Tambin llamada tensin arterial es la presin que el caudal sanguneo ejerce contra
las paredes de las arterias por donde se transporta la sangre, haciendo posible la
circulacin sangunea como tal. La presin arterial es indispensable para que los
diferentes rganos del cuerpo reciban nutrientes y oxgeno (Pasquier, 2013).
La tensin arterial est compuesta de dos valores originados en los latidos cardiacos y
son los siguientes:
-

Sstole Cardiaca : Cuando el corazn empieza un latido, este se contrae, lo que


origina el movimiento conocido como sstole, en esta etapa del latido cardiaco,
se expulsa cierto volumen sanguneo a travs del ventrculo izquierdo, la
medicin de este volumen genera el primer valor de tensin arterial (Sardias,
2008).

Gordillo Padilla 18
-

Distole Cardiaca: Este movimiento corresponde al espacio entre latidos


cardiacos inmediatamente despus del Sstole, en donde, las paredes de las
arterias quedan distendidas, con un volumen sanguneo inferior al primero, que
constituye el segundo valor de tensin arterial (Sardias, 2008).

A su vez, existen otros factores indirectos que inciden en los valores de tensin arterial
tales como:
-

Resistencia Vascular: Es una fuerza que tiende principalmente a reducir el


dimetro de las arterias oponindose al flujo sanguneo y aumentando la
presin en las mismas.

Volemia: Corresponde al volumen total de la sangre en todo el sistema


circulatorio, su valor nominal se encuentra entre 5 y 6 litros en un adulto
promedio, en donde, una variacin anormal tanto superior como inferior
puede repercutir directamente en los valores de tensin arterial.

1.3.1.1 Valores de Presin Arterial.

Como ya se mencion, existen dos valores que conforman la tensin arterial,


correspondientes a los valores de tensin arterial en los latidos (tensin arterial
sistlica), y los valores de tensin arterial entre latidos (tensin arterial diastlica).
Al momento de escribir un valor de tensin arterial se escriben dos nmeros separados
por un slash o guion, correspondientes a los valores de tensin diastlica y sistlica
correspondientes y en ese orden. Cabe resaltar que existen agentes externos que
dificultan un valor saludable de tensin arterial tales como ejercicio, niveles de stress,
energizantes, tabaco, alcohol, etc.
En la prctica, los siguientes valores de presin arterial indican el estado de la misma:

119/79 o menos son normales

140/90 o ms indican hipertensin arterial

Entre 120 y 139 para el nmero ms elevado, o entre 80 y 89 para el nmero


ms bajo es pre-hipertensin.

Gordillo Padilla 19
1.3.1.2 Patologas Relacionadas

1.3.1.2.1 Problemas de la presin arterial.

1.3.1.2.1.1 Hipertensin.
La hipertensin arterial es producida por una elevacin anormal de

la presin

sangunea en las arterias. Puesto que los problemas relacionados con la presin arterial
no presentan sntomas, las consecuencias de la hipertensin suceden al cabo de cierto
tiempo ocasionando daos en sus rganos internos e incluso la muerte.
Existen dos tipos principales de hipertensin: Primaria y secundaria
La hipertensin primaria o esencial se origina a raz de problemas en el organismo y/o
desequilibrios electrolticos, as como tambin puede ser consecuencia del sobrepeso,
elevado consumo de sodio, alcohol o tabaco.
La hipertensin secundaria puede ser el resultado de diversas enfermedades y
afecciones, o efectos secundarios de ciertos

medicamentos, as como tambin

patologas cardacas congnitas, enfermedades renales, del sistema endocrino y uso


de hormonas (Sardias, 2008).
1.3.1.2.1.2 Hipotensin.
La hipotensin presenta valores inferiores a las lecturas normales. Entre las principales
causas que la originan tenemos.
Ciertos medicamentos entre los que estn incluidos frmacos para quimioterapia,
bleomicina o interleuquina, que pueden causar un descenso en la presin arterial.
Por otro lado, conforme envejecemos, el sistema nervioso central tiene ms dificultad
para regular correctamente los niveles de presin arterial. De ah que un simple cambio
de posicin, hara que la presin arterial descienda a un nivel por debajo del normal.
La hipotensin conocida como hipotensin ortosttica puede ocurrir como resultado
de un conteo de glbulos rojos por debajo de lo normal (anemia), o deshidratacin, ya

Gordillo Padilla 20
que

los

niveles

de

lquido

en

su

cuerpo

son

bajos

(Sardias,

http://www.monografias.com/, 2008).
Otras causas de hipotensin pueden llegar a ser:

Medicamentos sin regulacin que controlan hipertensin.

Cambios irregulares en el ritmo cardaco.

Hemorragia.

1.3.2

Mtodos de adquisicin.

1.3.2.1 Procedimiento mecnico tradicional.

Tradicionalmente con el equipo convencional el procedimiento que se sigue para la


adquisicin de un valor aproximado de presin arterial a un paciente es el siguiente:

Despus de recostar al paciente o ponerlo en una posicin de relax, se procede a ubicar


el equipo de medicin preferiblemente en el brazo desnudo del paciente. Un
dispositivo conocido con el nombre de manguito se aplica en la mitad del brazo (el
borde inferior queda unos 2 a 3 cm sobre el pliegue cubital) aproximadamente a la
altura del corazn. Debe quedar bien aplicado y no suelto (ya que esto ltimo
favorecera lecturas falsamente elevadas). Una bolsa de goma debe quedar ubicada de
tal forma que justo la mitad de ella quede sobre la arteria braquial.

Conviene palpar el pulso radial durante el procedimiento para saber hasta dnde subir
la presin al inflar el manguito, Desde el momento que desaparece el pulso radial, se
sigue subiendo la presin unos 30 mm de Hg adicionales. Esto evita comprimir el
brazo ms de lo necesario. Al desinflar el manguito, se capta el momento en que
nuevamente se palpa el pulso y sta es la presin sistlica palpatoria. Se esperan de 15
a 30 segundos con el manguito desinflado, luego se repite la medicin, pero esta vez
teniendo la campana del estetoscopio apoyada en el pliegue cubital, sobre la arteria
braquial (FIGURA 14). Se infla el manguito unos 30 mm de Hg sobre la presin
sistlica palpatoria y se desinfla lentamente mientras se ausculta. La aparicin de los
primeros ruidos correspondientes a latidos del pulso determina la presin sistlica
auscultatoria. Tanto el registro obtenido por la palpacin como por la auscultacin

Gordillo Padilla 21
deben ser parecidos. De no ser as, se registra como presin sistlica, el valor ms
elevado (http://www.geosalud.com/, s.f.).

FIGURA 14. Esquema representativo de la toma de la medida de la presin arterial de


modo manual.

Fuente: (http://www.geosalud.com/, n.d.).

Despus de identificar la presin sistlica auscultatoria, se sigue desinflando el


manguito hasta que desaparecen los ruidos. Este momento corresponde a la presin
diastlica. En ocasiones, primero los ruidos se atenan y luego desaparecen. En
general se considera como la presin diastlica el momento en que los ruidos
desaparecen.
1.3.2.2 Mtodo digital

La forma no invasiva para medir digitalmente la presin arterial se basa en el mtodo


oscilomtrico que consiste en el monitoreo de las vibraciones o variaciones de una
seal de presin a travs de una banda inflable colocada a nivel del brazo del paciente.
A partir del anlisis de dichas oscilaciones en la seal, los respectivos valores
sistlicos, diastlicos y medio de presin arterial.

El sistema consta de un motor y un filtro que permite que la banda se infle hasta un
determinado punto por encima de la presin sistlica donde las paredes de la arteria
comiencen a emitir vibraciones derivadas de la circulacin sangunea a travs de la

Gordillo Padilla 22
arteria obstruida por la banda, dichas vibraciones son captadas por el sensor encargado
de realizar el monitoreo de la presin a travs de la banda, cuando esto ocurre, el motor
deja de funcionar y se desfoga el filtro vaciando de aire la banda, consecuentemente la
presin en la banda comienza a disminuir vertiginosamente, y el valor de la amplitud
de las vibraciones en la arteria comienza a elevarse hasta llegar a un valor mximo
despus del cual la intensidad de las oscilaciones comienza a disminuir hasta que la
banda est completamente vaca y no ejerce ninguna presin y consecuentemente el
flujo sanguneo vuelve a la normalidad.

Despus de estos eventos se toman los valores a partir de las oscilaciones provocadas
en la arteria para obtener los valores de tensin arterial. El valor de presin de la banda
en la cual ocurre el valor mximo de oscilacin de la arteria corresponde al valor de
presin media.

El valor de presin de la banda correspondiente al momento en que las vibraciones de


la arteria comienzan a aumentar rpidamente en amplitud, corresponde a la presin
sistlica.
Por ltimo el punto entre oscilaciones donde el valor de estas comienza a disminuir
dramticamente corresponde a la tensin diastlica (FIGURA 15)
FIGURA 15. Curva de presin oscilatoria.

Fuente: (Savn, 2007).

Gordillo Padilla 23

Cabe resaltar que hay varios criterios a la hora de manejar los valores sistlicos y
diastlicos de tensin, debido a que el mtodo oscilomtrico solo provee como valor
relativamente exacto el valor de tensin media, y los otros dos se obtienen
empricamente o mediante algoritmos o criterios matemticos basados en los valores
de tensin media (Savn, 2007).
1.3.3

Sensor de Presin.

Como sabemos, el evento fsico que se describe como presin se explica como una
fuerza que se ejerce sobre un rea determinada, y lgicamente se expresa en unidades
de fuerzas por unidades de rea, las unidades ms conocidas son bares, atmosferas,
milmetros de Hg, etc.
Dicha fuerza aplicada se puede ejercer sobre un punto en una superficie o distribuirse
sobre esta. Cada vez que se ejerce se produce una deflexin, una distorsin o un cambio
de volumen o dimensin en el elemento sobre el cual se aplica la fuerza.
Para la construccin del tensimetro en base al esquema tradicional de
funcionamiento, se utilizara un sensor de presin. Dicho sensor est dotado de un
elemento sensible a la presin que emiten una seal elctrica al variar la presin o
que, dependiendo del sensor, provocan acciones de conmutacin si el fenmeno
supera un determinado valor referencial.
Dentro de la gama de sensores de presin y rangos de medicin, nuestra aplicacin
requiere sensores miniatura de tipo piezoresistivo que conserven caractersticas de
robustez y resistencia (Brito, 2013).
1.3.3.1 Sensores Piezoresistivos.

Poseen una membrana fabricada de un material semiconductor (generalmente silicio)


con estructuras selectivamente distribuidas. El funcionamiento de este tipo de sensores
est basado en el efecto piezoresistivo, que no es ms que una variacin de la
resistencia en el semiconductor, causado por su expansin y compresin que influye
en la movilidad de los electrodos bajo carga mecnica. En otras palabras, los valores
que se proporcionan a travs del sensor van cambiando segn cambie la geometra del

Gordillo Padilla 24
sensor por el efecto del fenmeno fsico que se va a medir, en este caso, la presin
sangunea (Robredo., 1993).
Para la fabricacin del tensimetro se ve necesaria la utilizacin de un sensor que
cuente con las siguientes caractersticas:
Relativo bajo costo.
Compensacin de temperatura de precisin.
Capacidad de Calibracin.
Tamao relativamente pequeo.
Bajo Ruido elctrico.
Alta impedancia de bajo consumo de energa.

Concretamente utilizaremos sensores de presin de cualquier serie que proporcionen


caractersticas rentables y nos permitan una aplicacin de menor tamao y mayor
rendimiento, proporcionen una salida precisa y estable en un rango de temperatura de
0 C a 50 C [32 F a 122 F], que puedan medir la presin absoluta y la galga de
1 psi.

Dichos sensores generalmente operan mediante un circuito integrado (IC) compuesto


por sensor y el lser cubiertos por una pelcula gruesa de cermica dentro de una caja
compacta resistente a los disolventes. El DIP se monta en una tarjeta de circuito
impreso como un IC estndar con pines a travs de hoyos. Los pernos de anclaje del
sensor de presin a la placa de circuito impreso y proporcionan una mayor unidad de
seguro y estable que otros tipos de paquetes.

La salida del puente es radiomtrica a la tensin de alimentacin y la operacin de


cualquier tensin de alimentacin de corriente continua de hasta 20 Vdc es aceptable
(Honeywell, 2008) (FIGURA 16 y 17).

Gordillo Padilla 25

FIGURA 16. Sensor de presin ADP 510.

Fuente: (Honeywell, 2008).

FIGURA 17. Disposicin de pines segn el tipo de encapsulado del sensor ADP 510.

Fuente: (Honeywell, 2008).

El sensor va dentro del equipo tensimetro, como vimos anteriormente en el


procedimiento de toma de tensin arterial se ejerce una presin alrededor de la parte
de la extremidad donde se instala el equipo, dicha presin, provoca cierta deformidad
en el sensor y se comienza a emitir valores en forma de seales elctricas que sern
decodificadas por el equipo y entregaran los valores finales de tensin arterial.

Gordillo Padilla 26

CAPTULO 2.

HARDWARE DEL DISPOSITIVO


Electrocardiograma
2.1.1

Recoleccin de Seales.

Con el objetivo de reducir el ruido generado por el ambiente, la recoleccin de seales


se efecta mediante la utilizacin de electrodos denominados electrodos 3M
desechables conectados a cables apantallados para ECG.
2.1.2

Protecciones y Amplificador Instrumental.

Con el propsito de robustecer la seal, se implement un Amplificador Operacional,


concretamente el INA4228 en configuracin Buffer como se muestra en la FIGURA
18 a continuacin expuesta.

FIGURA 18. Amplificador Operacional INA 4228 en configuracin Buffer.

Fuente: Autor.

Naturalmente, la implementacin de dicho buffer se debe repetir para cada una de las
seales recogidas por los electrodos. A su vez, la seal robustecida entregada por el
buffer debe cumplir con el enunciado del tringulo de eithoven explicado en el
captulo anterior, para que esta condicin se lleve a cabo, se implement

Gordillo Padilla 27
amplificadores diferenciales INA129 o AD620 (FIGURA 19.), cuyo comportamiento
cumple con las siguientes ecuaciones:

Vo = (Vin+ Vin ) G
G=1+

49.4K
RG

Donde:
Vo = Voltaje de Salida.
Vin+ = Voltaje de entrada por el pin no inversor del INA122.
Vin = Voltaje de entrada por el pin inversor del INA122.
G = Ganancia del Amplificador instrumental.
RG= Resistencia de Ganancia.

Conociendo los valores de resistencias obtenemos:

G=1+

49.4K
5.6K

G = 9.82

Gordillo Padilla 28
FIGURA 19.Implementacin de amplificadores diferenciales INA 129 o AD620 a las
salidas del buffer.

RGD1
5.6K

3
6
2

Adif1
4

AD620AN
D1

Buffer1A
RLA1
250k

RGD2
5.6K

OPA4228PA
LA
1

RRA1

12

11

250k

Buffer1D
OPA4228PA
RA
14

6
2

Adif2

13

5 AD620AN

11

RLL1

250k

D2
Buffer1B
OPA4228PA
LL
7

RGD3
5.6K

11

3
6
2

Adif3
4

5 AD620AN

D3

Fuente: Autor.

Para que la seal consiga tanto la mayor estabilidad posible como un mnimo margen
de ruido, es necesario contar con un electrodo adicional de referencia, dicho electrodo
se debe colocar en la extremidad inferior derecha (pierna derecha) del sujeto, cabe
mencionar que las casas fabricantes de Amplificadores operacionales recomiendan que
dicho electrodo se encuentre interconectado entre las ganancias de los mismos, por
resistencias de valor RG/2 y por un filtro, como acontinuacin se esquematiza en la
FIGURA 20.

Gordillo Padilla 29
FIGURA 20. Implementacin del tercer electrodo.

5.0V
VCC
OPA4228PA
RRL1 RL
8

Buffer1C

11

250k

Ref1
2.7k

10

Cref1

Rref1

5.0V
VCC

100nF 10k
1M
Rref2

Ref2
2.7K

RGD1
5.6K

3
6
2

Adif1
4

AD620AN
D1

Fuente: Autor.

Las grficas correspondientes de las salidas de los Amplificadores instrumentales


(FIGURA 21, FIGURA 22, FIGURA 23) en cada derivacion son las siguientes:

FIGURA 21.Salida del Amplificador Diferencial Primera Derivacin.

Fuente: Autor.

Gordillo Padilla 30

FIGURA 22. Salida del Amplificador Diferencial Segunda Derivacin.

Fuente: Autor.

FIGURA 23. Salida del Amplificador Diferencial Tercera Derivacin.

Fuente: Autor.

Como se puede apreciar en las seales anteriores, se puede reconocer diferentes tipos
de ruido en ellas, como por ejemplo el ruido proveniente de la seal elctrica de 60Hz
junto con ruidos externos de tipo ambiental desde los 300Hz. Para solucionar este
problema, se debe implementar un filtro pasa banda entre 0.05Hz y 100Hz donde se
encuentra la seal pura medida (informacin valida). Por otro lado, si el sistema de
medicin y generacin de seal es alimentado por una fuente derivada de

un

tomacorriente convencional, es impresindible la utilizacin de un filtro NOTCH para


eliminar el ruido parsito originado por la fuente.
El filtro pasa banda mencionado en el prrafo anterior, est compuesto en primer lugar
por un filtro pasa alto con fc = 0.5Hz a continuacin del cual, se integra un filtro pasa
Bajo de con fc = 10Hz.

Gordillo Padilla 31
2.1.3

Filtro pasa Alto.

Para el clculo del filtro pasivo se utiliza la siguiente ecuacin:


fc =

1
2 R C

Donde:
fc = Frecuencia de Corte.
R = Resistencia de Filtro.
C = Capacitancia de Filtro.
Puesto que ya se conoce el valor de la frecuencia de corte (0.5Hz), imponemos un
condensador de C = 100uF para poder calcular la resistencia R.
1
2 fc C
1
R=
2 0.5Hz 100uF
R=

R = 3.183K

Por razones comerciales la resistencia sera R = 3.3K


Para robusteser su seal, se implement un buffer a continuacin de filtro pasa alto
pasivo, su esquema (circuito) se muestra a continuacin en la FIGURA 24 Cabe
mencionar que este circuito se debe implementar en cada una de las salidas de los
amplificadores instrumentales.

C1D1
100F
3

AMP1A
OPA4228PA
D1 1

11

R1D1
3.3k

FIGURA 24. Filtro pasa alto con buffer.

Fuente: Autor.

La respuesta del fitro en funcin se la frecuencia se puede obervar en la FIGURA 25

Gordillo Padilla 32

FIGURA 25. Respuesta al filtro.

Fuente: Autor.

Las siguientes figuras (FIGURA 26, FIGURA 27, FIGURA 28) corresponden a las
salidas de los filtros pasa altos de las respectivas derivaciones del electrocardiograma:
FIGURA 26. Salida del filtro Pasa alto Primera Derivacin.

Fuente: Autor.

Gordillo Padilla 33

FIGURA 27. Salida del filtro Pasa alto Segunda Derivacin.

Fuente: Autor.

FIGURA 28. Salida del filtro Pasa alto Tercera Derivacin.

Fuente: Autor
2.1.4

Filtro pasa Bajo.

Como habiamos mencionado, para completar el filtro pasa banda requerido, a


continuacin del filtro pasa alto se instala un fltro pasa bajo pasivo, junto con un
amplificador no inversor en el mismo para robusteser y amplificar la seal. Para el
clculo del filtro pasivo nos valemos de su ecuacin caracteristica:
fc =
Donde:
fc = Frecuencia de Corte.
R = Resistencia de Filtro.
C = Capacitancia de Filtro.

1
2 R C

Gordillo Padilla 34
Puesto que conocemos que la frecuencia de corte debe ser 50 Hz, nos imponemos un
condensador C = 0.47uF para poder calcular la resistencia R.
1
2 fc C
1
R=
2 50Hz 0.47uF
R=

R = 6.772K
Por razones comerciales la resistencia sera R = 6.8K
Para el clculo del amplificador no inversor en el circuito, nos valemos de su ecuacin
caracterstica:
Vsalida = Ventrada (1 +

R2
)
R1

R2

Donde (1 + R1) corresponde a la ganancia del amplificador no inversor.


La ganancia que en este caso se requiere es de 100, para ello debemos imponer una de
las resistencias, en este caso R1=10K
G=1+

R2
R1

R2 = (100 1) 10K
R2 = (100 1) 10K
R2 = 990K
La resistecia R2 debe tener un valor comercial por lo tanto R2=1M
Se muestra a continuacin el circuito del filtro Paso Bajo con amplificacin (FIGURA
29.), que, al igual que el anterior, se debe repetir para cada una de las salidas de los
filtros pasa alto.

Gordillo Padilla 35
FIGURA 29. Filtro pasa bajo pasivo.

AMP1A
OPA4228PA
D1 1

11

C2D1
0.47F

R2D1
6.8K

RA2D1
RA1D1
10K

1M

Fuente: Autor.

La respuesta del fitro en funcin se la frecuencia se puede obervar en la FIGURA 30.

FIGURA 30. Respuesta al filtro pasa bajo.

Fuente: Autor.

La salida de filtro pasa banda total en funcin de la frecuencia ser como el de la


FIGURA 31.

Gordillo Padilla 36
FIGURA 31. Respuesta a travs del filtro pasa banda.

Fuente: Autor.

Los siguientes esquemas (FIGURA 32, FIGURA 33, FIGURA 34.) corresponden a las
respuestas al sistema despus de pasar por los filtros pasa banda.

Gordillo Padilla 37

FIGURA 32. Respuesta al filtro pasa banda de la primera derivacin.

Fuente: Autor.

FIGURA 33. Respuesta al filtro pasa banda de la segunda derivacin.

Fuente: Autor.
FIGURA 34. Respuesta al filtro pasa banda de la tercera derivacin.

Fuente: Autor.
2.1.5

Acople de Seal.

Como se puede observar en las figuras anteriores, el voltaje de la seal varia entre
2V. Debido a que el microcontrolador que se utiliza (ATMega 328) cuenta con un

Gordillo Padilla 38
convertidor analgico-digital de 0 a 5V de 1024 bits de resolucin, es necesario acoplar
la seal para que este en el rango del convertidor del microcontrolador.
Para este acoplamiento, se necesita simplemente un partidor de tensin que genere el
offset deseado, y acoplar la seal por medio de un condensador, los valores de las
resistencias para el partidor de tensin y el condensador de acople se calculan tomando
en cuenta que no se debe interferir con las frecuencias que forman a su vez un filtro
pasa alto.
El partidor de tensin obedece a la siguiente ecuacin:
Vsalida = Ventrada

R2
R1 + R2

El partidor de tensin acta como offset del acople, por lo es conveniente que dicho
offset sea de 2.5V es decir la mitad de la alimentacin de 5V del sistema, para esto R2
debe ser igual a R1:
Vsalida = Ventrada

R1
R1 + R1

Vsalida = 0.5 Ventrada


Donde R1 = R2 = 33K
Para que no afecte el sistema con el filtro formado, se utiliz un condensador de 100uF,
lo que genera un filtro pasa alto con fc de 0.05Hz.
fc =

1
2 33K 100uF

fc = 0.04822Hz
El circuito es el mostrado en la FIGURA 35.
FIGURA 35. Partidor de tensin para acoplamiento con el microcontrolador.

VCC
5.0V
R1
33k
C1
100F

R2
33k

Fuente: Autor.
Naturalmente, este circuito se debe repetir para cada una de las salidas del filtro pasa
bajo.

Gordillo Padilla 39
Las siguientes figuras (FIGURA 36, FIGURA 37, FIGURA 38.)corresponden a las
seales de las 3 derivaciones despus de ser acopladas.

FIGURA 36. Respuesta del Acople de la Primera Derivacin.

Fuente: Autor.

FIGURA 37. Respuesta del Acople de la Segunda Derivacin.

Fuente: Autor.

Gordillo Padilla 40
FIGURA 38. Respuesta del Acople de la Tercera Derivacin.

Fuente: Autor.
2.1.6

Filtros Digitales.

Al ser los filtros analgicos pasivos, la frecuencia de trabajo no es tan selectiva, por lo
que se puede utilzar filtros digitales, para que la seal de las derivaciones del
electrocardiograma sean mas puras. Antes de elaborar los filtros, se debe tener en
cuenta que el microcontrolador tiene una frecuencia de muestreo de 1Khz para cada
una de las derivaciones, dato que sirve para calcular las frecuencias digitales de corte
para el filtro.
Las frecuecias de corte seran de 0.5Hz y 50Hz, informacin a tomar en cuenta, pues
dentro de estas frecuencias se encuantran datos importantes. Como resultado
aplicamos dicha informacin para calcular frecuencias de muestreo con sus ecuaciones
caractersticas como se muestra a continuacin:
= Ts
Ts =

1
fs

= 2f
=

2f
fs

Donde:
= Frecuencia Digital normalizada.
Ts = Perodo de Muestreo.
fs =Frecuencia de Muestreo.

Gordillo Padilla 41
=Frecuencia angular analgica.
f=Frecuencia analgica.
La frecuencia digital esta entre 0 < <
fs = 1KHz
1
= 0.001
1000
1
c2 =
= 0.1
10

c1 =

Con las frecuencias calculadas sumado la ayuda de la herramienta de software


Labview con su toolkit de diseo de filtro digital, se pueden obtener las funciones de
transeferencia y con esto las ecuaciones diferenciales y sus respectivas constantes.
El filtro elegido fue de tipo ventana Hamming, cuya funcin de transferencia es la
siguiente;

De lo que se puede obtener la siguiente ecuacion diferencial:

La FIGURA 39. a continuacin muestra el filtro en funcion de la frecuencia digital:

FIGURA 39. Filtro calculado en funcin de la frecuencia digital.

Fuente: Autor.

La respuesta al filtro digital se puede observar en la FIGURA 40, FIGURA 41,


FIGURA 42 a continuacin:

Gordillo Padilla 42

FIGURA 40. Respuesta del Sistema de filtro pasa banda digital, primera derivacin.

Fuente: Autor.
FIGURA 41. Respuesta del Sistema de filtro pasa banda digital, segunda derivacin.

Fuente: Autor.
FIGURA 42. Respuesta del Sistema de filtro pasa banda digital, tercera derivacin.

Fuente: Autor.

Se realizaron mdulos separados para cada una de las etapas citadas, de manera que
las siguientes figuras (desde FIGURA 43 hasta la FIGURA 54) corresponden a sus
respectivos circuitos diseados, simulacin y finalmente impresos.

Gordillo Padilla 43

FIGURA 43. Diseo del circuito de adquisicin de seales.

Fuente: Autor.
FIGURA 44. Simulacin del circuito real de adquisicin de seales.

Fuente: Autor.

FIGURA 45. Circuito impreso de la adquisicin de seales.

Fuente: Autor.

Gordillo Padilla 44

FIGURA 46. Diseo del circuito del filtro pasa alto.

Fuente: Autor.
FIGURA 47. Simulacin del circuito real del filtro pasa alto.

Fuente: Autor.

FIGURA 48. Circuito impreso del filtro pasa alto.

Fuente: Autor.

Gordillo Padilla 45
FIGURA 49. Diseo del circuito del filtro pasa bajo.

Fuente: Autor.

FIGURA 50. Simulacin del circuito real del filtro pasa bajo.

Fuente: Autor.

Gordillo Padilla 46

FIGURA 51. Circuito impreso de filtro pasa bajo.

Fuente: Autor.

FIGURA 52. Diseo del circuito de acople de seales.

Fuente: Autor.

Gordillo Padilla 47

FIGURA 53. Simulacin del circuito real de acople de seales.

Fuente: Autor.

FIGURA 54. Circuito impreso de acople de seales.

Fuente: Autor.
Tensimetro.
2.2.1

Principio de Funcionamiento.

Como se haba visto, se denomina tensimetro a aquel equipo que, mediante una
compresin en la extremidad superior, genera un metodo oscilomtrico de deteccin
no invasiva de la presin arterial. Naturalmente dicho proceso se efecta mediante
diferentes medios electrnicos, mismos que se utiliza desde la compresin de la
extremidad hasta la adquisicin e interpretacin de valores adquiridos para generar los
datos finales de tensin arterial.

Gordillo Padilla 48

2.2.2

Diagrama de Bloques.

El proceso que se describi anteriormente se esquematiza mediante bloques en la


FIGURA 55 a continuacin expuesta.
FIGURA 55. Diagrama de bloques del proceso de adquisicin y generacin de datos
en el equipo Tensiomtrico.

Fuente: Autor.
2.2.3

Sensor.

Como en todo proceso de adquisicion de seales, el medio electrnico por excelencia


en contacto con el fenomeno fsico a medir, es el sensor , lgicamente en el caso del
tensimetro, se utilizo un sensor de presin, especficamente el sensor SCC05DD4
(FIGURA 56) el cual nos permite medir una presin de 0 hasta 5 P.S.I.
(258.5746205121946 mm Hg). Como la mayora de sensores, el sensor SCC05DD4
devuelve un valor de voltaje por cada rango de valor del fenmeno fsico a medir, en
este caso la presin; por cada PSI el sensor SCC05DD4 entrega un valor de 1.2
milivoltios.

Gordillo Padilla 49
FIGURA 56. Esquema grfico del sensor SCC05DD4.

Fuente: (Honeywell, 2008).


2.2.4

Desarrollo.

A su vez, para el funcionamiento esperado del sensor, es necesario la implementacin


de un amplificador instrumental a continuacin del mismo, ya que los datos que
devuelve son la presin atmosfrica a travs del pin negativo (consultar catlogo del
sensor) y la presin ingresada por el sistema, mas la presin atmosfrica en el pin
positivo (consultar catalogo del sensor); por otro lado, como se mencion
anteriormente, los valores de voltaje perceptibles por el microcontrolador, en donde se
ingresa y hace el tratamiento de las seales, oscila entre 0 y 5 voltios; se requiere por
lo tanto, un sistema que amplifique proporcionalmente los valores adquiridos
directamente del sensor junto con cualidades de eliminacin de ruido para una
medicin mas precisa.
El amplificador instrumental incorporado es el amplificador

INA122, cuya

caracterstica predominante es su alimentacin, concretamente una fuente asimtrica


desde 2.2V a 36V y cuya salida esta dado por las siguientes ecuaciones :
Vo = (Vin+ Vin ) G
G=5+

200K
RG

Donde:
Vo = Voltaje de Salida.
Vin+ = Voltaje de entrada por el pin no inversor del INA122.
Vin = Voltaje de entrada por el pin inversor del INA122.
G = Ganancia del Amplificador instrumental.
RG= Resistencia de Ganancia.

Gordillo Padilla 50

Como habamos mencionado anteriormente, para conseguir que la presin sensada este
en el rango de 0 a 5V, que es un rango fcilmente detectable por el microcontrolador
sin necesidad de introducir un voltaje de referencia, es necesario amplificar la seal,
para conseguirlo, la ganancia del amplificador instrumental requerida debe ser cercana
a 100, por lo tanto los valores de resistencia de ganancia a implementar en el
amplificador (RG) sern calculados en base a la siguiente ecuacin con su consecuente
valor:
200K
G5
200K
RG =
100 5
RG =

RG = 2.105 K
Por razones comerciales el valor de la resistencia mas cercana es de 2.2K, por lo que
la ganancia ser, consecuentemente,proxima a 95.91. El diagrama del amplificador
con su calculado valor de resistecia que proporciona la ganancia requerida se muestra
a continuacion en la FIGURA 57

FIGURA 57. Amplificador instrumental de ganancia aproximada a 100.

5.0V
VCC
RG

2.2k
3

AI
6

INA122P

5.0V
VCC

U1
1
2
3

+
-

6
5
4

SCC05DD4

Fuente: Autor.

Gordillo Padilla 51
Por otro lado, un factor vital a tomar en cuenta es que las unidades de medicin de
presin arterial no son P.S.I sino mmHg (Milmetros de Mercurio) por lo que es
necesario efectuar los clculos con la siguiente relacin de conversin:
1 P. S. I = 51.718mmHg
La salida del amplificador instrumental tendra las siguientes referencias:
1P. S. I = 12mV G
1 P. S. I = 12mV 95.91
1 P. S. I = 1.15091V
1V = 44.937 mmHg
Se debe recordar tambin que la resolucin del microcontrolador es de 1024 valores
distribudos en 5V, en otras palabras, la resolucin del microcontrolador es de 1024
bits, por lo tanto sus valores de clculo en resolucin con respecto a los valores en mm
Hg se obtienen de la siguiente manera:
5V = 224.685mmHg
5V = 1024b
1b = 0.219041mmHg
Para reducir considerablemente el ruido ambiental, agente generador de error, se
introdujo un filtro Pasivo pasa bajo, con frecuenca de corte aproximado a 100Hz
(FIGURA 58), til para atenuar dicho ruido ambiental.

FIGURA 58. Filtro pasa bajo de 100 Hz aproximadamente.

Salida

RF
3.3k

CF
0.47F

Fuente: Autor.

Para conseguir los valores de resistencia a implementar en el filtro mencionado,


utilizamos su ecuacin correspondiente utilizando un condensador de 0.47uF lo cual
nos arrojara el dato de resistencia requerida Rf:
Rf =

1
2 fc Cf

Gordillo Padilla 52

Rf =

1
2 100Hz 0.47uF

Rf = 3386.27 3.3K
En la FIGURA 59. podemos ver mediante un grfico el comportamiento de la seal
antes y despus de ser atenuada lo cual nos da una idea de la importancia del filtro.

FIGURA 59. Grfico del comportamiento de las seales antes y despus de la


atenuacin.

Fuente: Autor.

Una parte fundamental en el equipo tensiomtrico, es el fragmento generador de


presin en la extremidad, es decir la bomba y electrovlvula , para la activacin de las
mismas, es altamente recomendable aislar la seal de control de la seal de potencia
que activa la bomba, por lo que se ve necesario la utilizacin de optotransistores, que,
dicindolo de forma siempre, permiten controlar diversos mecanismos sin que estn
conectados fsicamente.
El optotransistor usado se encuentra en modo de saturacin y corte, es decir, funciona
como un interruptor, de esta manera evitamos corrientes de fuga que se podran
generar al ser activada la bomba o electrovlvula
En el presente proyecto se utiliz el optotransistor TLP521-2. (FIGURA 60)

Gordillo Padilla 53

FIGURA 60. Optotransistor TLP521.

U2A

TLP521-2

Fuente: Autor.

De forma parecida a la bomba, la electrovlvula es activada por un transistor BJT


3904 que, al igual que la bomba, funciona como interruptor, es decir, se encuentra en
modo de Corte y saturacin, para que el transistor funcione adecuadamente segn lo
requerido, se debe calcular adecuadamente la resistencia que va antes del pin de base
del transistor (resistencia de base), y se hace mediante la siguiente ecuacin obteniendo
el valor de resistencia de base correspondiente:
Vcc
5V
=
= 0.05A
Rc
100
Ic
0.05A
Ib =
=
= 0.25mA
Hfe
200
Ic =

Ibsat = Ib Gar = 0.25mA 4 = 1mA


Rb =

Vcc 0.6V 5V 0.6V


=
= 4.4K
Ibsat
1mA

Rb = Rb1 + Rb2 = 2.2K + 2.2K


Rb1 = 2.2K
Rb2 = 2.2K

Donde:
Vcc = Voltaje de Fuente.
Ic = Corriente de Colector.
Ib = Corriente de Base.
Hfe = Ganancia de Transistor.
Ibsat = Corriente de base en saturacin.
Gar = Valor para garantizar la saturacin en el transistor normalmente entre 2
a 10.

Gordillo Padilla 54
Rb = Resistencia de base.
Rb1 = Resistencia de Base 1.
Rb2 = Resisencia de Base 2.
Como habamos visto en un caso anterior, ya que no existe un valor de resistencia
comercial de 4.4K se pueden usar en serie dos resistencias de 2.2K, con la ventaja
de que una de las resistencias de base se pueden usar para acoplar la seal del
optotransistor como se indica en la FIGURA 61.

FIGURA 61. Implementacin del transistor y optoacoplador con los parmetros


requeridos.

5.0V
VCC
5.0V
VCC
RB2
2.2K
U1A

EValvula

CV

DV
1N4007

100nF
8

2.2K
RB1

Q3
2N3904

TLP521-2

Fuente: Autor.

Para completar el circuito, concretamente para atenuar el ruido generado por los
elementos que generan la presin en la extremidad, se implementa un condensador de
100nF para eliminar el ruido inductivo generado por la electrovlvula y un diodo de
proteccin de corrientes de desahogo, ya que al ser la electrovlvula un elemento
inductivo, al momento de ser desactivada, mantiene corrientes menores circulando a
travs de la misma, mismas corrientes que pueden tender a fugarse hacia la fuente o
daar otros componentes.
A diferencia de la electrovlvula el motor se controla por medio de un transistor
MOSFET (Metal-oxide-semiconductor Field-effect transistor), concretamente el
transistor IRG640, de un tipo N de enriquecimiento que, al igual que los componentes

Gordillo Padilla 55
vistos anteriormente, se encuentra en zona activa y de corte, para que su
funcionamiento sea como un interruptor.
Para futuras referencias, el funcionamiento de los transistores MOSFET de
enriquecimiento esta basado en el control de canales entre las compuertas Drain
(drenaje) y Source(fuente), este control esta ligado a la tensin aplicada en la
compuerta gate(compuerta), siempre y cuando esta supere una tensin de Umbral
(V_TH).
El Voltaje en Gate

(Vg) del transistor esta controlado directamente por el

optotransistor, si esta polarizado directamente, existir una corriente de Colector,


haciendo que la tensin en Vg sea 0V, caso contrario Vg ser 5V siendo estos los
nicos valores de Voltajes en el Gate garantizando el funcionamiento de la bomba y
motor mediante la siguiente demostracin basada en las ecuaciones de funcionamiento
de los transistores de efecto de campo (MOSFET):
Cuando Vg=0
VGS = VG ID R S
ID = 0 ya que VGS seria Negativo y no cumple con VGS VTH
Cuando Vg = 5V
VGS = 5v ID 10
k = 0.014

A
V2

VTH = 2V
ID = k (VGS VTH )2
0.126 1.84ID + 1.4ID 2 = 0
ID = 0.07243055 A
VGS = 5v 0.07243055 A 10
VGS = 4.2756945V
Con lo que cumple VGS VTH y tambin cumple con la exigencia de corriente de la
bomba ya que solamente se necesita 50mA (FIGURA 62.).

Gordillo Padilla 56
FIGURA 62. Esquema de control de bomba y electrovlvula.

5.0V
VCC

5.0V
VCC

5.0V
VCC

CM

DM
1N4007

100nF
RO1
220
U2A

ControlMV

RO2
1k

TLP521-2

Q2
IRF641
RM
10

HDR1X2

Fuente: Autor.

Al iniciar el proceso se activan al mismo tiempo los optotransistores que controlan a


la bomba y a la electrovlvula asegurando as que el aire circule por el mango del
tensimetro sin escaparse, en inflandolo cada vez ms. El sensor captar la presin que
se genere por la fuerza el mango en la mueca del paciente, cuya seal recibida se
visualiza en la FIGURA 63:

FIGURA 63. Visualizacin de la seal captada.

Fuente: Autor.

En el grfico expuesto se puede observar que la presin va aumentando de forma casi


lineal, sin embargo, el fragmento de seal que nos interesa , es una pequea variacin

Gordillo Padilla 57
de presin que se generan casi en medio de la seal completa vista en el grfico anterior
como se observa en la FIGURA 64, que es una ampliacin de la anterior:

FIGURA 64. Fragmento de inters de la seal completa generada por el tensimetro.

Fuente: Autor.

Estas variaciones, corresponden expansin y contraccin de la arteria braquial, y


basndonos en el anlisis de las oscilaciones cclicas, se puede obtener los valores
propios del tensimetro, es decir, los valores de presin arterial diastlica y sistlica.
Para obtener la onda lo ms limpia posible, se necesita filtrar la seal adquirida, por lo
que es necesaria la utilizacin de un filtro pasa banda digital IIR butterworth de modo
2, cuyas frecuencias de corte son 1Hz y 10 Hz.
Para obtener la ecuacin diferencial y los coeficientes para el filtro, hay que normalizar
las frecuencias dentro de las ecuaciones de filtros, de la siguiente manera:
= Ts
Ts =

1
fs

= 2f
=

2f
fs

Donde:
= Frecuencia Digital normalizada.
Ts = Periodo de Muestreo.
fs =Frecuencia de Muestreo.

Gordillo Padilla 58
=Frecuencia angular analgica.
f=Frecuencia analgica.
La frecuencia digital esta entre 0 < <
fs = 1KHz
2
= 0.002
1000
2
=
= 0.02
100

c1 =
c2

Con los valores de frecuencia adquiridos junto con la utilizacin de la herramienta de


software Labview y su toolkit de Filtros digitales, se puede obtener fcilmente la
siguiente funcin de transferencia:

De la cual se obtiene la ecuacin diferencial:

Donde:
y[n] = Salida actual.
y[n-k] = Salida de k muestras anteriores.
x[n] = Muestra actual de entrada.
x[n-k] = k muestra anterior.
La FIGURA 65 muestra la respuesta del filtro digital en funcin de la Potencia vs
Frecuencia.

FIGURA 65. Respuesta del filtro digital en funcin de la Potencia vs Frecuencia.

Fuente: Autor.

Gordillo Padilla 59
Al aplicarse el filtro digital a la seal adquirida se obtendr a la salida la forma de onda
caracterstica al mtodo oscilatorio de medicin de la presin arterial, la forma de onda
resultante se muestra en la FIGURA 66:

FIGURA 66. Forma de onda derivada de la aplicacin del filtro a la seal adquirida.

Fuente: Autor.

En esta onda se puede distinguir que el pico ms alto corresponde a la presin arterial
media (PAM), y el pico inicial ms cercano al 1/3 del pico ms alto es la presin
arterial diastlica (PAD) como se muestra en la FIGURA 67. Este procedimiento es
indispensable para poder calcular la presin sistlica, pues primero se deben reconocer
los puntos de los picos y sus correspondientes valores en la presin ingresada
originalmente de la siguiente forma:

Gordillo Padilla 60

FIGURA 67. Disminucin de picos de seal caractersticos PAD y PAM entre la seal
propia del tensimetro.

Fuente: Autor.

Una vez identificados los picos requeridos, pasamos aplicar las frmulas propias del
tensimetro que nos permiten encontrar los valores propios de tensin arterial como
se muestra a continuacin:
PAM = 380 1b
PAM = 380 0.219041mmHg
PAM = 83.2355mmHg
PAD = 320 0.219041mmHg
PAD = 70.09312mmHg

Gordillo Padilla 61
Adems de esto, se debe considerar lo siguiente:
PP = PAS PAD
PP
3
2PAD + PAS
PAM =
3
PM = PAD +

PAS = 3PAM 2PAD


Donde:
PP = Presin de pulso.
PAM = Presin Arterial Media.
PAD = Presin Arterial Diastlica.
PAS = Presin Arterial Sistlica.
Por lo que:
PAS = 3 83.2355mmHg 2 70.09312
PAS = 109.52 mmHg

El circuito impreso correspondiente al control y adquisicin de datos del tensimetro


digital se muestra en las FIGURA 68, 69 y 70:

FIGURA 68. Diseo del circuito de control y adquisicin de datos del tensimetro
digital.

Fuente: Autor.

Gordillo Padilla 62

FIGURA 69. Simulacin del circuito impreso real del control y adquisicin de datos
del tensimetro digital.

Fuente: Autor.

FIGURA 70. Circuito impreso correspondiente al control y adquisicin de datos del


tensimetro digital.

Fuente: Autor.
Oxmetro.

El marco terico del oxmetro de pulso est citado en el captulo anterior, pero a
manera de resumen, se trabaj con un mdulo de SpO2 cms50dl, el cual maneja un
diodo LED rojo de longitud de onda 660nm, y un diodo LED infrarrojo de 880nm, su
fuente de alimentacin puede ser de 2.6V a 3.6V, la medicin del SpO2 es de 0% a
100% y tiene un rango de pulsaciones por minuto de 30 ppm a 250ppm, adems tiene
un rango de error de medicin de 2%.

Gordillo Padilla 63
2.3.1

Principio de Funcionamiento:

El principio de Funcionamiento del oxmetro de pulso se basa en la ley de


Lambert Beer que relaciona las caractersticas de intensidad de absorcin de la
longitud de onda en la hemoglobina desoxigenada (Hb) y la hemoglobina
oxigenada (HbO2) por un fotodiodo. La relacin depende directamente de
longitud que atraviesa la luz, la concentracin del absorbente en el medio y el
coeficiente de absorcin como se muestra en la siguiente ecuacin:

Iroja,Ir = Isalida 10l


=

4k

Donde:
Iroja,Ir =Intensidad de Luz transmitida por el LED rojo e infrarrojo.
Isalida =Intensidad recibida por el Fotodiodo.
l= Longitud que atraviesa la luz.
= Coeficiente de absorcin.
k = Coeficiente de extincin.
=Longitud de onda de luz aplicada.
El coeficiente de extincin del cuerpo por donde atraviesa el haz, se refiere a la
cantidad de luz absorbida por el mismo segn la longitud de onda, por unidad de masa
o la parte imaginaria del ndice de refraccin.
El oxmetro de pulso brinda una medicin relativa no absoluta entre la cantidad de
HbO2 y Hb lo que se conoce como saturacin funcional SpO2 .

SpO2 = 100 x

HbO2
Hb + HbO2

El SpO2 se determina por la intensidad de luz roja que llega al fotodiodo, despus de
multiplexar el diodo LED rojo y el diodo LED infrarrojo funcionando uno a la vez.
Esta tcnica se basa en el hecho de que el flujo de sangre arterial es pulstil a diferencia
del resto de tejidos y fluidos (FIGURA 71), haciendo que la luz se module
dependiendo del flujo de sangre, se mide entonces la intensidad cuando existe pulso,

Gordillo Padilla 64
y luego la intensidad cuando no existe pulso para cada longitud de onda, la relacin
entre estas mediciones es el parmetro de absorbancia normalizado R, catalizados en
el diagrama de bloques de la FIGURA 72 (Universidad CES, 2007).

FIGURA 71. Esquema del flujo de sangre arterial.

Fuente: (Universidad CES, 2007).

Intensidad Pulsante
(660)
Intensidad
no Pulsante
R=
Intensidad Pulsante
(880)
Intensidad no Pulsante
SpO2 = 100 x R

Gordillo Padilla 65

2.3.2

Diagrama de bloques:

FIGURA 72. Diagrama de bloques del funcionamiento del Oxmetro de pulso.

Fuente: Autor.
2.3.3

Desarrollo.

El mdulo presentado tiene la ventaja de exponer los resultados en forma de un PWM


(Modulacin por ancho de pulsos) donde el porcentaje de SpO2 es el duty Cicle (ciclo
de trabajo) de la seal como se muestra en la FIGURA 73.

Gordillo Padilla 66
FIGURA 73. Ciclo de trabajo del oxmetro en forma de PWM.

Fuente: Autor.
Se puede calcular de diferentes maneras el SpO2 de la seal adquirida, pero en este
caso se calculara la seal con un filtro digital butterworth modo 2, con frecuencia de
corte de 10Hz (FIGURA 74). El clculo del filtro paso bajo se la realiza de manera
similar que para el filtro pasa banda del tensimetro como se muestra a continuacin.
fs = 1KHz
c =

2
= 0.02
100

FIGURA 74. Respuesta del filtro digital en funcin de la Potencia vs Frecuencia.

Fuente: Autor.
El resultado de la seal filtrada es su valor equivalente a una seal analgica, como se
muestra en la FIGURA 75.

Gordillo Padilla 67

FIGURA 75. Resultado de la seal filtrada.

Fuente: Autor.
Para obtener el SpO2 se debe calcula de la siguiente manera:
SpO2 = 100 x

Vfiltrado
Vreferencial

Donde:
Vfiltrado = Voltaje obtenido del filtro.
Vreferencial = Voltaje referencial equivalente al 100% de la seal PWM.
El Microcontrolador.
Una vez cumplidos con los objetivos de obtener la seal deseada de los respectivos
sistemas, el microcontrolador debe ser el encargado de interactuar con el dispositivo
mvil por medio del mdulo bluetooth, esta interaccin debe cumplir con los
siguientes objetivos:

Recibir los Datos del Mdulo Bluetooth.

Convertir las seales ingresadas por los puertos analgicos en digitales.

Realizar procesamiento digital de seales, en especial filtros digitales.

Enviar las respuestas de los procesamientos digitales por el puerto serial hacia
el mdulo Bluetooth.

Activar y desactivar los puertos digitales.

Para cumplir con el propsito de controlar los dispositivos bioelectrnicos


previamente mencionados, se debe obedecer al diagrama de flujo de la FIGURA 76

Gordillo Padilla 68

FIGURA 76. Diagrama de bloques del funcionamiento del microcontrolador.

Fuente: Autor.

Gordillo Padilla 69
3

CAPTULO 3.

SOFTWARE DEL DISPOSITIVO MVIL.


ANDROID.

El sistema operativo Android es una plataforma de Software basada en Linux.


Diseada inicialmente para dispositivos mviles, entre otras cosas, Android permite
controlar dispositivos por medio de bibliotecas desarrolladas o adaptados por Google a
travs del lenguaje de programacin Java. Inicialmente desarrollada por Google Inc.,
al que despus se unieron, un consorcio de 48 compaas de Hardware, Software y
telecomunicaciones, que acordaron promocionar los estndares de cdigos abiertos
para dispositivos mviles. Google, sin embargo, fue la encargada de desarrollar
mayora del cdigo fuente de Android bajo la licencia de Software Apache, una
licencia de software libre y de cdigo abierto a cualquier desarrollador.

Como ya se mencion Android es una plataforma de cdigo abierto. Esta caracterstica


implica que cualquier programador independiente puede crear y desarrollar
aplicaciones escritas con lenguaje C u otros lenguajes y compilarlas a cdigo nativo
de ARM (Interfaz de Aplicacin de Android) (Nuez, 2013).
3.1.1

Caractersticas.

Navegador integrado: basado en el motor open Source Web kit.

Framework de aplicaciones: permite el reemplazo y la reutilizacin de los


componentes.

SQlite: base de datos para almacenamiento estructurado que se integra


directamente con las aplicaciones.

Mquina virtual Dalvik: Base de llamadas de instancias muy similar a Java.

Telefona GSM: dependiente del terminal.

Cmara, GPS, brjula y acelermetro: Dependiente del terminal.

Bluetooth, EDGE, 3g y WiFi: dependiente del terminal.

Multimedia: Soporte para medios con formatos comunes de audio, video e


imgenes planas (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).

Gordillo Padilla 70
-

Pantalla tctil.

3.1.2

Arquitectura de Android.

La arquitectura interna de la plataforma Android, est bsicamente formada por 4


componentes (FIGURA 77):

FIGURA 77. Componentes de la arquitectura Android.

Fuente: (aplicaciones-android.org, 2011).

Gordillo Padilla 71
3.1.3

Aplicaciones.

Todas las aplicaciones creadas a travs de la plataforma Android, incluirn como base
un cliente de email (correo electrnico), calendario, programa de SMS, mapas,
navegador, contactos, y algunos otros servicios adicionales. Todas escritas en el
lenguaje de programacin Java (aplicaciones-android.org, 2011).
3.1.4

Framework de Aplicaciones.

Todo desarrollador de aplicaciones Android, tienen acceso total al cdigo fuente usado
en las aplicaciones base. Con esto se evita que se generen componentes de aplicaciones
distintas, que respondan a la misma accin, dando la posibilidad de que los programas
sean modificados o reemplazados por cualquier usuario sin tener que empezar a
programar sus aplicaciones desde el principio.
3.1.4.1 Libreras.

Android incluye en su base de datos un set de libreras C/C++, que estn al alcance
de todos los desarrolladores a travs del framework de las aplicaciones Android
System C library, libreras de medios, libreras de grficos, 3D, SQlite, etc.

Android incorpora un set de libreras que aportan la mayor parte de las funcionalidades
disponibles en las libreras base del lenguaje de programacin Java. La Mquina
Virtual est basada en registros, y corre clases compiladas por el compilador de Java
que anteriormente han sido transformadas al formato .de (Dalvik Executable) por
la herramienta ''dx''.

Android viene siendo competencia directa a los sistemas operativos mviles como
Windows Mobile, Symbian, iPhone OS 3.0, etc. aunque tambin podra aminorar o
reducir el impacto actual de Microsoft y sus Sistemas Operativos Windows, pues
muchos grandes fabricantes de hardware y ordenadores en general contempla la
posibilidad de implantar el sistema operativo Android en Porttiles, Notebooks, y PC;
como es el caso de la compaa HP.

Gordillo Padilla 72
3.1.5

App Inventor.

En el ao 2010, la empresa multinacional Google, especializada en productos que


tienen que ver con internet y software relacionado; consiente de la complejidad que
hasta entonces supona crear aplicaciones para el sistema operativo ANDROID con el
que cuentan gran cantidad de dispositivos mviles, comenz a desarrollar un programa
que facilitara de gran manera la creacin de dichas aplicaciones por parte de las
personas que no posean conocimientos superiores en el rea de programacin
informtica. A este programa se lo conoce con el nombre de App Inventor.
Un ao despus, aunque el proyecto era muy prometedor, Google decidi dejar de
trabajar en l, no sin antes dejar libre el cdigo para que cualquiera pueda retomar su
labor donde la dejo, y es ah donde entra en escena el Instituto tecnolgico de
Massachusetts (MIT) donde se cre el centro MIT para aprendizaje mvil y, con la
ayuda econmica de parte del mismo Google se daba forma al App Inventor como lo
conocemos (Osuna, 2012).
3.1.5.1 Caractersticas y Ventajas.

En nuestros das el App Inventor se volvi toda una realidad. Este programa no
requiere ser instalado pues se ejecuta desde el propio navegador. Posee un lenguaje
grfico y relativamente sencillo de aprender y dominar, permitiendo que cualquier
usuario novato en asuntos de programacin pueda desarrollar su propia aplicacin.
Sumado a esto, la pgina principal de App Inventor incluye un completo soporte con
anexos tales como:
-

Tutoriales

Informacin relacionada con el programa y sus componentes

Pautas para el desarrollo de aplicaciones en general.

Cabe resaltar que desde su primera versin (fase beta), el programa era absolutamente
funcional y se encontraba al alcance de todos. Actualmente se est poniendo en marcha
una segunda versin del App Inventor que incluye algunos cambios y mejoras que lo
vuelven an ms prctico y fcil de usar sin dejar de lado su amigable esquema
principal de funcionamiento (Osuna, 2012).

Gordillo Padilla 73
3.1.5.2 Esquema de Funcionamiento.

Para empezar a utilizar el App Inventor basta con crear una cuenta de usuario en google
y acceder a ella a travs de la pgina (ai2.appinventor.mit.edu), a partir de la misma,
se puede escoger entre crear una nueva aplicacin (New Project) o trabajar con las
aplicaciones ya previamente iniciadas y almacenadas en nuestra cuenta.( FIGURA 78)

FIGURA 78. Formato de inicio de aplicacin.

Fuente: Autor.

Una vez ingresada en la aplicacin requerida, sea nueva o anterior, podemos apreciar
que el patrn de programacin realiza las sentencias en forma grfica a travs de
bloques, los cuales se pueden ir tomando del banco de bloques ubicado a la derecha
del lienzo, dependiendo si las sentencias son de carcter lgico, control, matemticas,
texto, listas, colores, variables, etc. (FIGURA 79.), de tal manera que el cuerpo del
programa se desarrolle encajando piezas de forma lgica que cumplan una funcin
en conjunto, y que a su vez, estn en concordancia con otro conjunto de piezas armadas
equivalentes

las

sentencias

de

https://sites.google.com/site/appinventormegusta, 2013).

programacin

(Riego,

Gordillo Padilla 74

FIGURA 79. Banco de Bloques.

Fuente: Autor.

Por otro lado, el sistema cuenta con dos tipos de visualizadores, el de bloques (Blocks)
que es donde se desarrolla el programa, y la pantalla de diseo (Designer) que muestra
el diseo o los componentes como tales que se visualizaran en el display del mvil al
momento

de

ejecutar

el

programa.

(Riego,

https://sites.google.com/site/appinventormegusta, 2013). (FIGURA 80 y FIGURA


81.)

Gordillo Padilla 75
FIGURA 80. Visualizador de diseo.

Fuente: Autor.

FIGURA 81.Esquema de bloques.

Fuente: Autor.

Gordillo Padilla 76
A su vez, una vez terminada nuestra aplicacin, la podemos probar a travs de las
siguientes tres opciones (FIGURA 82):

1.- Si se est usando un dispositivo Android y se posee conexin inalmbrica a


Internet (WiFi) (recomendado). Es necesario instalar la aplicacin Companion App
Inventor en tu dispositivo.

2.- Si no se cuenta con un dispositivo Android, hay que instalar el software en la pc


para poder

utilizar el emulador de Android en la pantalla del mismo.

3.- Si no se posee una conexin inalmbrica a Internet (WiFi), Se deber instalar


el software en la pc de modo que se pueda conectar al dispositivo Android a travs de
USB. La opcin de conexin USB puede ser complicada, especialmente en Windows.
Se

recomienda

utilizar

este

como

un

ltimo

recurso

https://sites.google.com/site/appinventormegusta, 2013).

FIGURA 82. Opciones de conexin.

Fuente (Riego, https://sites.google.com/site/appinventormegusta, 2013).

(Riego,

Gordillo Padilla 77
3.1.5.3 Desventajas.

Al ser AppInventor una aplicacin en desarrollo, no es una herramienta lo


suficientemente potente para cumplir todas las necesidades del desarrollador, por lo
que se han superado sus limitantes por medio de APIs que se encuentran en un servidor
al que se puede ser accedido por medio de cualquier red mvil.
Objetivos de la Aplicacin.

Para poder cumplir con los requerimientos de interfaz grfica del dispositivo mvil
necesitamos establecer los siguientes objetivos:

Una pantalla donde se visualiza el ingreso de sesin (login); permitiendo el acceso


solo a usuarios registrados junto con una opcin que permite registrar nuevos
usuarios.

Un Registro en la base de datos la informacin personal del usuario incluyendo


fotografa de perfil.

Un men en el que se pueda elegir la seal que se desea adquirir, junto con
opciones alternativas que permitan modificar datos del usuario, a su vez, al
momento de elegir la seal (ECG, Oxmetro, Tensimetro), se desplegara un
submen de opciones correspondientes con la seal seleccionada, mismos que
detallamos a continuacin:

Electrocardiograma
o Conectar el dispositivo electrnico va bluetooth, caso contrario, denegar
la opcin.
o Adquirir datos en tiempo real y graficar simultneamente las tres
derivaciones del ECG.
o Borrar el registro actual en cualquier momento en caso de error.
o Grabar datos adquiridos en la base de datos.
o Mostrar el resultado final de la adquisicin.
o Revisar historiales de registros anteriores

Gordillo Padilla 78

Oxmetro de Pulso
o Conectar el dispositivo electrnico va bluetooth, caso contrario, denegar
la opcin.
o Adquirir datos en tiempo real y mostrar al usuario el porcentaje de
oxgeno en la sangre.
o Borrar el registro actual en cualquier momento en caso de error.
o Grabar datos adquiridos en la base de datos.
o Revisar historiales de registros anteriores.

Tensimetro
o Conectar el dispositivo electrnico va bluetooth, caso contrario, denegar
la opcin.
o Adquirir datos en tiempo real.
o Calcular los valores de presin diastlica y sistlica basada en los datos
adquiridos.
o Exhibir los valores de presin diastlica y sistlica.
o Borrar el registro actual en cualquier momento en caso de error.
o Grabar datos adquiridos en la base de datos.
o Revisar historiales de registros anteriores.

Nota: Para poder cumplir con los objetivos de interfaz grfica en el dispositivo mvil
es necesario recurrir a aplicaciones web debido a las limitaciones del app inventor.

Gordillo Padilla 79
Desarrollo de Interfaz Grfica en el Dispositivo Mvil.
3.3.1

Pantalla de Bienvenida y Sesin.

Dentro del software de programacin de mviles Android App Inventor, para poder
cumplir con una interfaz atractiva y amigable se requieren los siguientes elementos:
3.3.1.1 VerticalArrangement.

Se encuentra en la seccin Layout dentro del diseo de App inventor, y sirve para
organizar los elementos uno debajo del otro arrastrados sobre ste.
3.3.1.2 HorizontalArrangement.

Se encuentra en la seccin Layout dentro del diseo de App inventor, y sirve para
organizar los elementos uno a lado del otro arrastrados sobre ste.
3.3.1.3 Image.

Se encuentra en la seccin User Interface dentro del diseo de App inventor, este
componente sirve para mostrar una imagen que sea precargada en su propiedad
Picture, o para mostrar cualquier imagen que sea modificada dentro de la seccin de
programacin por bloques del App inventor.
3.3.1.4 Label.

Se encuentra en la seccin User Interface dentro del diseo de App inventor, este
componente sirve para mostrar una porcin de texto que sea precargada en su

Gordillo Padilla 80
propiedad Text o sea modificada dentro de la seccin de programacin por bloques del
App inventor.
3.3.1.5 TextBox.

Se encuentra en la seccin User Interface dentro del diseo de App inventor, este
componente coloca un texto dentro de una caja que sea precargada en la propiedad
Text, a su vez, puede ser modificado dentro de la seccin de programacin por bloques
de App inventor o ingresado por el usuario.
3.3.1.6 PasswordTextBox.

Se encuentra en la seccin User Interface dentro del diseo de App inventor, este
componente coloca el texto oculto tipo contrasea dentro de una caja que sea
precargada en su propiedad Text, es decir, modificado dentro de la seccin de
programacin por bloques del app inventor o ingresado por el usuario.
3.3.1.7 Button.

Se encuentra en la seccin User Interface dentro del diseo de App inventor, este
componente puede detectar los clicks y su aspecto puede ser modificado en sus
propiedades o dentro de la seccin de programacin por bloques de App inventor.
3.3.1.8 Notifier.

Se encuentra en la seccin User Interface dentro del diseo de App inventor, este
componente puede generar alertar y reportes Android.

Gordillo Padilla 81
3.3.1.9 Web.

Se encuentra en la seccin Connectivity dentro del diseo de App inventor, este


componente no es visible y es capaz de generar funciones web tales como http, post,
get, put, etc.
Una vez conocida la funcin de los componentes a usar, se procede a colocar dichos
componentes como se muestra en la FIGURA 83, cambiando sus nombres por defecto
por nombres fcilmente reconocibles, y precargando las imgenes para una mejor
sensacin visual.
FIGURA 83. Aplicacin de los componentes de interfaz grfica de AppInventor.

Fuente: Autor.

La programacin correspondiente obedece al diagrama de flujo de la FIGURA 84 para


cumplir con la funcin de Login o Inicio de sesin de los diferentes usuarios los datos
ingresados se verifican en la base de datos por medio de un servlet donde se acepta o

Gordillo Padilla 82
rechaza el acceso a la aplicacin. Adems, en caso de no ser un usuario registrado,
existe la posibilidad de llamar a otra pantalla para el registro.

FIGURA 84. Diagrama de flujo de la programacin de la aplicacin.

Fuente: Autor.

En el diagrama de bloques de App inventor se puede generar un evento de click en el


botn Conectar (FIGURA 3 9), en este caso, se toman los valores ingresados en los
campos de texto TxtUsuario y TxtPass para invocar al servlet Usuarios. El servlet

Gordillo Padilla 83
Usuarios verifica la coincidencia de los datos que ingresa el usuario con los que existen
en la base de datos, devolviendo un texto con su nombre y apellido en el caso de estar
registrados, y un texto de error en el caso de no estarlo. El diagrama de bloques se
ilustra en la FIGURA 85.
FIGURA 85. Bloques de evento Click del Botn Conectar.

Fuente: Autor.

Cuando el componente web recibe un texto como el que devuelve el servlet se genera
un evento GotText, en este, comprobamos el texto recibido, si el texto es un error, por
medio del NotificadorInicio mostramos un mensaje al usuario Error al ingresar los
datos, en caso contrario se abrir la pantalla Men pasndole el texto recibido. El
bloque de GotText se muestra en la FIGURA 86.

FIGURA 86. Bloques de evento GotText del componente Web.

Gordillo Padilla 84

Fuente: Autor.

Si se presiona el botn Registro se dar paso a la pantalla Registro el bloque se muestra


en la FIGURA 87.

FIGURA 87. Bloque del evento click en el botn Registro.

Fuente: Autor.

Al presionar el botn de atrs se cerrar la aplicacin. El bloque se muestra en la


FIGURA 88.
FIGURA 88. Bloque del evento click en el botn atrs.

Fuente: Autor.

Gordillo Padilla 85
3.3.2

Pantalla de Registro.

La pantalla de registro tiene la capacidad de ingresar la informacin bsica del usuario


para luego ser grabada en la base de datos. Adems advierte de datos ingresados por
usuarios anteriores como nicknames o emails y la no correspondencia de la
verificacin de las contraseas. Como campos se colocaron:
Nickname: Apodo que el usuario desee tener para ingresar a su sesin.
Nombre: Nombre del usuario.
Apellido: Apellido del usuario.
Email: Correo electrnico donde se puede comunicarse con el usuario.
Telfono: Nmero de telfono donde se puede contactar con el usuario.
Contrasea: Contrasea con la cual el usuario desee conectarse a su sesin.
Comprobar Contrasea: Verificacin de la contrasea anteriormente ingresada.
Direccin: Direccin de domicilio o trabajo del usuario.
Ciudad: Ciudad de domicilio o trabajo del usuario.
Provincia/Estado: Provincia o Estado correspondiente al domicilio o trabajo del
usuario.
Pas: Pas de residencia o trabajo del usuario.
Zip Code: Cdigo Postal del domicilio o trabajo del usuario.
Para el diseo de la pantalla del registro se utilizaron componentes previamente
explicados como se lo puede ver en la FIGURA 89 y FIGURA 90.

Gordillo Padilla 86

FIGURA 89. Diseo de la pantalla de Registro en la seccin de App inventor parte1.

Fuente: Autor.

Gordillo Padilla 87

FIGURA 90. Diseo de la pantalla de Registro en la seccin de App inventor parte2.

Fuente: Autor.

Nota: Si los datos ingresados son correctos se da paso al registro, que incluye una
fotografa del usuario para su fcil reconocimiento. El diagrama de bloques de la
pantalla de Registro obedece al diagrama de flujo de la FIGURA 91 y FIGURA 92

Gordillo Padilla 88

FIGURA 91. Diagrama de flujo del funcionamiento de la pantalla de Registro.

Fuente: Autor.

Gordillo Padilla 89

FIGURA 92. Diagrama de flujo del funcionamiento de la pantalla de Registro.

Fuente: Autor.

Gordillo Padilla 90
Para que se cumpla con el diagrama de flujo inicializamos las variables de las banderas
con valores false como se muestra en la FIGURA 93.

FIGURA 93. Bloques de inicializacin de variables.

Fuente: Autor.

Inicializadas las variables, se ingresa los datos del usuario, si se llega a perder el
enfoque en el rea de texto TxtNickname, se dispara un evento llamado LostFocus,
que se encarga de invocar al servlet ComUsuario con el dato ingresado en dicha rea
como se muestra en la FIGURA 94.

FIGURA 94. Bloques del evento LostFocus del componente TxtNickname.

Fuente: Autor.

El servlet ComUsuario verifica si el Nickname recibido ya ha sido previamente


registrado, en cuyo caso devuelve un texto de error, con el que se mostrar en la
etiqueta LblNickname el texto: El usuario ya existe intente otro Nickname con color
rojo, con lo que la bandera Nickname ser false, caso contrario la etiqueta dir El
Nickname si est disponible de color verde, y la variable bandera Nickname pasara a
ser true. El bloque correspondiente se muestra en la FIGURA 95;

Gordillo Padilla 91

FIGURA 95. Bloque del evento GotText del componente web SvtComUsuario.

Fuente: Autor.

Similar situacin ocurre cuando despus de llenar el campo de TxtEmail se pierde el


enfoque, correspondientemente se invocar al servlet CompEmail con el dato
ingresado como se muestra en la FIGURA 96

FIGURA 96. Bloque del evento LostFocus del componente TxtEmail.

Fuente: Autor.

El servlet CompEmail se comporta de manera similar al ComUsuario devolviendo un


error en el caso de que el email ya haya sido registrado previamente, con lo que en el

Gordillo Padilla 92
LblEmail se mostrar de color rojo El email ya corresponde a una cuenta la variable
banderaEmail cambia a false, y de color verde si no haba sido registrado, con la
leyenda El email si est disponible y la variable banderaEmail sera true. Los bloques
se ilustran en la FIGURA 97.
FIGURA 97. Bloque del evento GotText del componente web SvtCompEmail.

Fuente: Autor.

Una vez llenado el campo de TxtPass que corresponde a la comprobacin de la


contrasea se dispara el evento LostFocus, que comprueba en primera instancia que
los campos no estn vacos y que los datos ingresados en el campo TxtContrasena y
TxtPass sean iguales, en cuyo caso la variable banderaPass pasa a ser true y caso
contrario pasara a ser false. Los bloques del evento se ilustran el la FIGURA 98.

Gordillo Padilla 93

FIGURA 98. Bloque del evento LostFocus del componente TxtPass.

Fuente: Autor.

Al presionar el botn Registrar se comprueba que todos los campos estn llenos y
todas las banderas son verdaderas (true), si estas condiciones se cumplen, se procede
a invocar el servlet de Registro pasndole todos los datos ingresados para ser
posteriormente grabados en la base de datos, caso contrario se visualizar una leyenda
en el LblMensajeError con el texto Completar correctamente el formulario como se
ilustra el bloque en la FIGURA 99.

Gordillo Padilla 94
FIGURA 99. Bloque del evento Click del botn Registrar.

Fuente: Autor.

Gordillo Padilla 95

Si el registro fue exitosamente guardado se abrir la pantalla de RegistroImagen con


el Nickname y contrasea obtenidos como se muestra en la FIGURA 100.

FIGURA 100. Bloque del evento GotText del componente web SvtRegistro.

Fuente: Autor.
3.3.3

Pantalla RegistroImagen.

La pantalla de RegistroImagen estar encargada de abrir una pgina web para el


registro de la fotografa de identificacin de usuario, ya que por las limitaciones de
App inventor no se la pude realizar directamente desde la aplicacin.
Una vez registrada la fotografa se abrir la pantalla de Men.
Para efectuar la apertura de una pgina web se necesita el siguiente componente:
3.3.3.1 ActivityStarter.

Se encuentra en la seccin de Connectivity dentro del diseo de App inventor, este


componente es capaz de iniciar diferentes actividades, entre alguna de ellas la apertura
de otras aplicaciones, la inicializacin de la cmara, mostrar la ubicacin en un mapa,
etc. Existen algunas aplicaciones que pueden devolver ciertos valores de resultados.
Conociendo la funcin del ActivityStarter y de los componentes previamente citados,
el diseo quedar como muestra en la FIGURA 101.

Gordillo Padilla 96

FIGURA 101. Diseo de la pantalla RegistroImagen.

Fuente: Autor.

En la parte de la programacin se trata de registrar una imagen existente en el celular


para identificar al usuario al presionar Agregar Foto, y de saltar el registro al
presionar No ahora o el botn Atrs. Lo que obedecer al diagrama de flujo de la
FIGURA 102.

Gordillo Padilla 97
FIGURA 102. Diagrama de flujo de la pantalla RegistroImagen.

Fuente: Autor.

Una vez clara la funcin que debe tener la pantalla Registro imagen se procede a
realizar la programacin en bloques en el App inventor.
En primer lugar se debe inicializar las variables que recibimos de la pantalla anterior,
y consultamos por medio del servlet Usuarios el cdigo con el que fue registrado el
usuario como se muestra en la FIGURA 103, este cdigo servir como nombre para el
registro de la imagen. Los bloques se pueden observar en la FIGURA 104.

Gordillo Padilla 98
FIGURA 103. Bloque de inicializacin de variables y pantalla.

Fuente: Autor.

FIGURA 104. Bloque de evento GotText del componente web SvtUsuario.

Fuente: Autor.
Si se presionan los botones atrs o No ahora se proceder abrir la pantalla de Men
pasando los datos de Nickname y contrasea; como se ilustra en la FIGURA 105.

Gordillo Padilla 99
FIGURA 105. Bloques de los eventos click en los botes BtnDespues Ahora No y
Atrs.

Fuente: Autor.
Finalmente si se presiona el botn Agregar Foto (BtnImagen) se inicializa la
aplicacin de explorador web, pasndole los atributos de la pgina web que queremos
que sea visualizada y sus parmetros como se puede observar en la FIGURA 106.

FIGURA 106. Bloque de evento Click del BtnImagen.

Fuente: Autor.
3.3.4

Pantalla de men.

La pantalla Men ser capaz de:

Presentar un men con las diferentes opciones de las seales biolgicas que se
quiera adquirir.

Mostar la foto y el nombre del usuario que inicio la sesin.

Contener botn para cerrar la sesin actual y otro para modificar la informacin
bsica del usuario.

Gordillo Padilla 100


Para el diseo de la interfaz grfica no se necesitan ningn elemento diferente a los
descritos anteriormente por lo que el diseo en el App inventor quedara de la siguiente
manera (FIGURA 107):

FIGURA 107. Diseo de la pantalla Men.

Fuente: Autor.

La programacin de los bloques de App inventor obedece al diagrama de flujo de la


FIGURA 108

Gordillo Padilla 101


FIGURA 108. Diagrama de flujo de la pantalla Men.

Fuente: Autor.

Para llevar a cabo el diagrama de flujo de la figura; en primera instancia debemos


recibir los datos con los que fue llamada la presente pantalla y separarlos con la
herramienta Split ya que vienen de la forma cdigo Nombre Apellido. Se necesita

Gordillo Padilla 102


separar el cdigo de usuario porque es un parmetro del servlet CargaImag, ste
servlet nos devolver la imagen correspondiente al cdigo de usuario, dicha imagen se
almacenara en la memoria del telfono con el nombre usuario.png y se mostrar en
el componente ImgUsuario, el bloque de este proceso se ilustra en la FIGURA 109.

FIGURA 109. Bloque de Inicializacin de la pantalla Men.

Fuente: Autor.
En caso de ser presionado el botn Cerrar Sesin o Atrs se dar paso nuevamente
a la pantalla de bienvenida o inicio (Screen1), los bloques se pueden observar en la
FIGURA 110

FIGURA 110. Bloques del evento Click de los botones Atrs y Cerrar.

Fuente: Autor.

Gordillo Padilla 103


De manera similar, los diferentes botones restantes nos mostraran las pantallas del
Electrocardiograma, Oxmetro de pulso y Tensimetro, llamndolos a estos con la
misma informacin que ha sido invocada la pantalla men. Adems, el botn Usuarios
nos dar la posibilidad de abrir una pantalla llamada ActualizarDatos, en la que se
puede modificar la informacin bsica del usuario como tambin su foto. En la
FIGURA 111 se puede ilustrar lo explicado.

FIGURA 111. Bloques del evento Click de los componentes BtnUsuarios, BtnEcg,
BtnOximetro, BtnTensiometro.

Fuente: Autor.
3.3.5

Pantalla ActualizarDatos.

La pantalla para la actualizacin de los datos personales del usuario cumplir con los
siguientes objetivos:

Mostrar los datos actuales en las diferentes cajas de texto.

Visualizar la fotografa actual del usuario, y ser capaz de registrar una fotografa
nueva a eleccin del usuario.

Un botn para la actualizacin de datos de usuario, a su vez, la aplicacin pedir


la clave actual para guardar cambios.

Un botn para regresar al men principal.

Gordillo Padilla 104


No se necesita ningn componente nuevo para el diseo de la pantalla por lo que
quedar como se muestra en la FIGURA 112:
FIGURA 112. Diseo de la pantalla ActualizarDatos.

Fuente: Autor.

Para cumplir con los objetivos de la pantalla deber cumplir el esquema del diagrama
de flujo de la FIGURA 113:

Gordillo Padilla 105


FIGURA 113. Diagrama de flujo de la pantalla ActualizarDatos.

Fuente: Autor.
Para cumplir con el diagrama de flujo de la figura; en el evento initialize de la
pantalla (FIGURA 114), se debe primero adquirir los datos pasados por la pantalla
invocadora como los son el id, nombre y apellido del usuario y guardarlos en variables
globales de la pantalla, realizado esto, se invocar al proceso llamado CargarImagen

Gordillo Padilla 106


(FIGURA 115) encargado de llamar al servlet Imag con el parmetro Id, que devuelve
la foto del usuario para ser mostrada en el componente ImgUsuario.
El proceso contina invocando al servlet ConsultarUsuario con el parmetro id, que
devolver todos los datos del usuario, que sern cargados en las respectivas cajas de
texto (FIGURA 116).

FIGURA 114. Evento Initialize de la pantalla ActualizarDatos.

Fuente: Autor.

FIGURA 115. Proceso CargarImagen.

Fuente: Autor.

Gordillo Padilla 107

FIGURA 116. Evento GotText del Componente SvtConsultarUsuario.

Fuente: Autor.

Gordillo Padilla 108


Si se presiona el botn Actualizar (FIGURA 117) se actualizar la imagen del
usuario con el proceso CargarImagen y preguntar

si todos los campos de

informacin estn llenos, de estarlos, se requerir la contrasea actual del usuario, esta
informacin se comprobar en el evento AfterTextInput de la notificacin NtfAvisos
llamando al proceso Actualizar (FIGURA 118).
El procedimiento Actualizar se encarga de invocar al servlet ActualizarUs pasando
los parmetros de Id, passvieja, y todos los campos de las cajas de texto (FIGURA
119), si la contrasea en el parmetro passvieja es igual a la contrasea actual del
usuario entonces los datos ingresados remplazaran a los anteriores, caso contrario se
visualizar un mensaje de error por contraseas no correspondientes.

FIGURA 117. Evento Click del componente BtnActualizar.

Fuente: Autor.

Gordillo Padilla 109

FIGURA 118. Proceso Actualizar.

Fuente: Autor.

Gordillo Padilla 110

FIGURA 119. Evento GotText del componente SvtActualizarDatos.

Fuente: Autor.

Al presionar sobre la imagen de usuario (ImgUsuario) llamaremos a un navegador web


por medio del ActivityStarter ActStFoto que cargar una pgina web con el
parmetro id del usuario, esta pgina permitir cambiar la foto de Usuario (FIGURA
120).
FIGURA 120. Evento TouchDown del componente ImgUsuario.

Fuente: Autor.

Si se quiere regresar a la pantalla Men basta con presionar el botn regresar


(BtnRegresar) o el botn Atrs del sistema, estos llamaran a un proceso llamado
datossalida (FIGURA 121), que se encarga de comprobar si los datos de las cajas
fueron modificados, para pasar como parmetro a la pantalla men, de esta forma se
mantendr actualizado el nombre del usuario en todas las pantallas (FIGURA 122).

Gordillo Padilla 111

FIGURA 121. Evento de presin de los componentes BtnRegresar y Atrs del


sistema.

Fuente: Autor.
FIGURA 122. Proceso datossalida.

Fuente: Autor.

3.3.6

Pantalla ECG:

La pantalla del Electrocardiograma cumple con las siguientes caractersticas:

Establecer conexin por medio de Bluetooth con el dispositivo electrnico de


toma de seales biolgicas.

Enviar comandos para iniciar y detener la adquisicin de datos de las tres


derivaciones propias del ECG.

Generar una grfica en tiempo real de los datos adquiridos.

Gordillo Padilla 112

Una opcin para suprimir la informacin recolectada hasta el momento.

Guardar los adquiridos en la base de datos del servidor.

Mostrar el electrocardiograma definitivo al final de la adquisicin.

Una opcin que permite regresar al men principal

Para cumplir con los objetivos propuestos, es necesario implementar el componente


de temporizador en App Inventor.
3.3.6.1 Clock:

Se encuentra en la seccin de User Interface dentro del diseo de App inventor, este
componente cumple con las funciones que se le designa cada cierto tiempo definido
por el usuario arbitrariamente o por programacin.
Conocido lo necesario para el correcto cumplimiento de las tareas de la pantalla, el
diseo grfico se muestra en la figura (FIGURA 123).
FIGURA 123. Diseo de la Pantalla ECG.

Fuente: Autor.

Gordillo Padilla 113


El programa en el diagrama de bloques de App Inventor obedece al diagrama de flujo
ilustrado en la FIGURA 124:
FIGURA 124. Diagrama de Flujo de la Pantalla ECG.

Fuente: Autor

Para cumplir ntegramente con el diagrama de flujo propuesto en la seccin de bloques


de App Inventor, en primer lugar, se debe recibir los datos con los que fue invocada la
pantalla y grabarla en variables globales, a continuacin, se deben inicializar los

Gordillo Padilla 114


estados de arranque de programa como lo son banderas y variables, se debe
deshabilitar el Timer y llamar a un procedimiento llamado Conectar.
El procedimiento Conectar de la (FIGURA 125): est encargado de inicializar el
Bluetooth y establecer una conexin con el dispositivo encargado de receptar las
seales, en caso de no establecerse la conexin se pedir por medio de un
ActivityStarter el encendido del bluetooth e para intentar una vez el procedimiento de
Conectar (FIGURA 126 y FIGURA 127).

FIGURA 125. Inicializar variables en Pantalla ECG.

Fuente: Autor.

Gordillo Padilla 115


FIGURA 126.Evento Initialize de la Pantalla ECG.

Fuente: Autor.

FIGURA 127.Procedimiento Conectar.

Fuente: Autor.
Si se presiona el Botn iniciar (BtnIniciar) se enviar una seal al dispositivo para
que inicie la recoleccin de datos provenientes del mdulo del electrocardiograma,
simultneamente, se habilita el Timer y el botn de detener (BtnDetener),
lgicamente, se deshabilita el botn de Iniciar (BtnIniciar) como se muestra en la
figura.

Gordillo Padilla 116


El Timer est configurado para generar un evento cada milisegundo ya que de esta
manera se puede mejorar la calidad de dibujo de las 3 derivaciones del
electrocardiograma, dicho evento verifica si el tiempo de adquisicin de datos del
electrocardiograma ha culminado, de no ser este el caso, pregunta si existen datos en
el buffer de recepcin del Bluetooth, si cumple con esta ltima condicin recoge los
datos y los almacena en una variable global, donde van concatenados todos los datos
recibidos.
Estos datos almacenados son primeramente separados ya que se reciben de la siguiente
manera: |ECGI-ECGII-ECGIII| los caracteres | separan los datos recolectados en
el mismo tiempo, y los caracteres - separan la primera, segunda y tercera derivacin
del electrocardiograma.
Separados los datos se grafican uno a uno en el componente CnvECG.
Si el tiempo transcurrido ha finalizado, la informacin recolectada se almacenar en la
base de datos por medio del servlet GrabarECG pasndole los parmetros de id de
usuario y datos recolectados, tambin se llamara al servlet MostrarECGSimple
encargado de devolver el resultado final de la informacin tratada.
Todos los procesos anteriormente citados se ilustran en la FIGURA 128 y FIGURA
129 y FIGURA 130:

Gordillo Padilla 117

FIGURA 128.Evento Timer del Timer Parte 1.

Fuente: Autor.

Gordillo Padilla 118

FIGURA 129. Evento Timer del Timer Parte 2.

Fuente: Autor.

Gordillo Padilla 119

FIGURA 130.Evento Timer del Timer Parte 3.

Fuente: Autor.

Mientras el Timer est habilitado, tambin se habilita el Botn Detener (BtnDetener),


el cual, si es presionado, se encarga de enviar una seal al mdulo de ECG para que
deje de emitir datos y luego pregunta si se quiere conservar los datos recolectados hasta
el momento o borrarlos, con el objetivo de tomar nuevamente la informacin caso
contrario continuar la toma de datos en curso (FIGURA 131).

Gordillo Padilla 120


FIGURA 131. Evento Click del componente BtnDetener y su respectivo notificador.

Fuente: Autor.
Como todas las pantallas al presionarse el Botn Atrs del sistema regresar al men
principal con la nica diferencia de que finalizar la conexin Bluetooth (FIGURA
132).
FIGURA 132. Evento BackPressed del botn Atrs del sistema.

Fuente: Autor.

Gordillo Padilla 121


3.3.7

Pantalla Oxmetro.

La pantalla de Oxmetro cumple con las siguientes caractersticas

Establecer conexin por medio de Bluetooth con el dispositivo electrnico de


toma de seales biolgicas.

Enviar comandos para iniciar y detener la adquisicin del porcentaje de oxgeno


en la sangre.

Mostrar en pantalla el porcentaje del oxgeno en la sangre.

Una opcin para suprimir la informacin recolectada hasta ese momento.

Guardar los adquiridos en la base de datos del servidor.

Una opcin que permite regresar al men principal

La pantalla Oxmetro es muy similar a la de electrocardiograma con la diferencia de


que los datos sern mostrados en una Etiqueta y no en componente canvas. El diseo
de la pantalla se muestra en la FIGURA 133.
FIGURA 133. Diseo de la Pantalla Oxmetro.

Fuente: Autor.

Gordillo Padilla 122


El programa en el diagrama de bloques de App Inventor obedece al diagrama de flujo
ilustrado en la FIGURA 134:

FIGURA 134. Diagrama de Flujo de la Pantalla Oxmetro.

Fuente: Autor.

Gordillo Padilla 123


Para cumplir ntegramente con el diagrama de flujo propuesto en la seccin de bloques
de App Inventor, en primer lugar se debe recibir los datos con los que fue invocada la
pantalla y grabarla en variables globales, luego se deben inicializar los estados de
arranque de programa como lo son botones, etiquetas y variables, se debe deshabilitar
el Timer y llamar a un procedimiento llamado Conectar.
El procedimiento Conectar de la figura: es el mismo de la pantalla ECG est
encargado de inicializar el Bluetooth (FIGURA 135 FIGURA 136) y establecer una
conexin con el dispositivo encargado de receptar las seales, en caso de no
establecerse la conexin se pedir por medio de un ActivityStarter el encendido del
bluetooth e para intentar una vez el procedimiento de Conectar (FIGURA 137).

FIGURA 135. Inicializar variables en Pantalla Oxmetro.

Fuente: Autor.

FIGURA 136. Evento Initialize de la Pantalla Oxmetro.

Fuente: Autor.

Gordillo Padilla 124


FIGURA 137. Procedimiento Conectar.

Fuente: Autor.
Si se presiona el Botn iniciar (BtnIniciar) enviar una seal al dispositivo para que
inicie la recoleccin de datos provenientes del mdulo de electrocardiograma, adems,
se habilita el Timer y el botn de detener (BtnDetener) y se deshabilita el botn de
Iniciar (BtnIniciar) como se muestra en la FIGURA 138
FIGURA 138. Evento Click del componente BtnIniciar.

Fuente: Autor.

El Timer est configurado para generar un evento cada segundo a diferencia de la


pantalla de ECG ya que no es necesario tomar datos con la misma velocidad, en primer
lugar se verifica si existen datos en el buffer del Bluetooth, y en caso de haberlos los
separa y los muestra en pantalla, ya que los datos se muestran de la forma: I dato1 I
dato2 I dato3 (FIGURA 139, FIGURA 140, FIGURA 141).

Gordillo Padilla 125

FIGURA 139. Evento Timer del Timer Parte 1.

Fuente: Autor.

Gordillo Padilla 126


FIGURA 140. Evento Timer del Timer Parte 2.

Fuente: Autor.

Gordillo Padilla 127

FIGURA 141. Evento Timer del Timer Parte 3.

Fuente: Autor.
Mientras el Timer este habilitado, tambin se habilita el botn Detener
(BtnDetener), el cual, si es presionado, se encarga de enviar una seal al mdulo de
ECG para que deje de emitir datos y pregunta si quiere conservar los datos recolectados
hasta el momento o borrarlos, con el objetivo de tomar nuevamente la informacin,
caso contrario continuar la toma de datos en curso (FIGURA 142).

Gordillo Padilla 128


FIGURA 142. Evento Click del componente BtnDetener y su respectivo notificador.

Fuente: Autor.
Como todas las pantallas, al presionarse el Botn Atrs del sistema regresar al men
principal con la nica diferencia de que finalizar la conexin Bluetooth (FIGURA
143).

FIGURA 143. Evento BackPressed del botn Atrs del sistema.

Fuente: Autor.

Gordillo Padilla 129


4

CAPTULO 4.

SOFTWARE DEL SERVICIO WEB


JAVA.

Lo que hoy conocemos como el software de nombre JAVA fue inicialmente


desarrollado por James Gosling, perteneciente a la empresa Sun Microsystems en
1990. Inicialmente nombrado como OAK, el nombre fue modificado pues ya estaba
registrado por otra empresa.
Gosling bsicamente quera crear un lenguaje de programacin que solucionara los
fallos del lenguaje C y C++, posteriormente l y su equipo optaron por crear un nuevo
lenguaje de programacin mucho ms sencillo capaz de ser ejecutado en cualquier
entorno, tomando las caractersticas esenciales de un leguaje robusto y eliminando
funciones no imprescindibles.
Posteriormente, Bill Joy, cofundador de Sun, modifico el diseo del lenguaje para
poder ejecutarlo junto con internet y de esta manera hacerlo competitivo con el
entonces lder de software Microsoft, y es as como en 1995 JAVA fue presentado con
una enorme acogida por sus caractersticas de independencia y sencillez.
4.1.1

Definicin.

Se puede definir a JAVA como un lenguaje de programacin del cual se derivan


tecnologas de software y plataformas informticas basados en el mismo lenguaje. Esto
nos permite, entre otras cosas, la generacin de herramientas de software, juegos,
aplicaciones comerciales y como veremos ms adelante, aplicaciones dinmicas que
interactan a travs de internet con usuarios web (Mestras, 2004).
4.1.2

Caractersticas.

JAVA es principalmente un lenguaje de programacin orientada a objetos, siendo un


objeto como una unidad dentro de un programa compuesto por datos almacenados
y tareas a realizables, java utiliza objetos en sus interacciones para elaborar programas
y aplicaciones.

Gordillo Padilla 130


A su vez, JAVA emplea tcnicas tales como Encapsulamiento (ocultamiento de datos
de un objeto), Herencia (crear nuevas clases partiendo de una clase ya existente) y
polimorfismo (instrucciones sintcticamente iguales para objetos de distinto tipo).
A ms de esto, JAVA goza de caractersticas tales como:
-

No existen violaciones al tipo de dato o variable una vez declarada.

Gestin automtica de tratamiento de memoria

Multihilo (soporte para ocurrencia de eventos).

Constructores deslindados de la arquitectura del ordenador.

Conjunto de bibliotecas que posibilitan:


- Interfaces Graficas en 2D y 3D
- Conectividad
- Funciones Matemticas.

Por su capacidad de ser ejecutado en mltiples plataformas, y contar con una gama de
soporte y opciones para interactuar con el usuario, JAVA constituye un lenguaje
idneo para aplicaciones web.
En resumen podemos enumerar las siguientes ventajas que ofrece JAVA:
-

Sencillez.

Robusto y Seguro.

Portable.

Alto Rendimiento

Dinmico.

SERVLETS, HTML, JSP, NODE js. Conceptos y Caractersticas


Para desarrollar programas, proyectos, o aplicaciones en general que interacten con
internet, tenemos que tener claros ciertos conceptos y caractersticas de ciertos
elementos que intervienen en la programacin web, misma que pasamos a analizar a
continuacin (Mestras, 2004).
4.1.3

Servlet.

Los Servlets son programas escritos en JAVA que se ejecutan a travs de un servidor
web, que es un contenedor web que proporciona un medio para la ejecucin y
almacenamiento de distintos elementos web, en este caso los servlets o pginas HTML
(Mestras, 2004) (FIGURA 144).

Gordillo Padilla 131


Su uso comn es para crear pginas web dinmicas partiendo de una peticin enviada
por el navegador web, sus caractersticas principales son:
-

Independencia de plataforma de lanzamiento.

Uso ms eficiente de memoria.

Reutilizacin. (Persistencia).

FIGURA 144. Esquema grfico de las funciones de un Servlet.

Fuente: (Mestras, 2004).


Al momento de enviar informacin a un servlet tenemos dos formas de hacerlo:
mediante el mtodo GET y el mtodo POST
4.1.3.1 Mtodo POST.
Este mtodo solo esta accesible desde los formularios. Se envan los parmetros de
forma implcita junto a la pgina, es decir, al pasar los parmetros, nosotros no vemos
reflejado en ningn sitio qu parmetros son y cul es su valor (Gonzalez, 2006).
4.1.3.2 Mtodo GET.
A travs de este mtodo se envan los parmetros de forma explcita junto a la pgina,
mostrando en la barra de navegacin los parmetros y sus valores (Gonzalez, 2006).
Son esas largas cadenas que aparecen en algunas pginas en nuestra barra de
navegacin, por ejm: buscar?id=1806&valor=0987&texto=todo&...

Gordillo Padilla 132

Servlets Biokit UDA


4.2.1

Servlet ActualizarUs.java.

Actualiza o renueva los datos del usuario, incluyendo su Id y Contrasea (FIGURA


145), para esto, el usuario debe ingresar los datos actuales de Id y contrasea de
usuario, una vez ingresados, estos pasan a ser comparados con los datos de Id y
contrasea albergados en la base de datos hasta ese momento, si los datos ingresados
coinciden con los datos almacenados en la base, el servlet permitir modificar los
siguientes elementos:
-

Id. (Numero asignado con el que est registrado el usuario en la base de


datos)

Password. (Clave de acceso).

Nickname. (Nombre o Seudnimo de reconocimiento de usuario).

Nombre.

Apellido.

Correo Electrnico.

Telfono.

Direccin.

Ciudad.

Estado.

Pas.

Cdigo Zip.

Ejemplo:
http://localhost:8084/BiokitUda/ActualizarUs?id=1&passvieja=xavier1006&nickna
me=xavi&nombre=xavier&apellido=padilla&email=xavi_padilla77@hotmail.com&
pass=xavier1006&telefono=+593987899428&direccion=1322%20129th&ciudad=New%20York&estado=New%20York&pais=USA&zip=1135
6
FIGURA 145. Ejemplo de Servlet Actualizar.

Gordillo Padilla 133

Fuente: Autor.
4.2.2

Servlet CargarImagen.java.

Recibe un archivo en protocolo multiparte y recibe un parmetro Id con el que se


guardara y asignara el archivo recibido. En su ejecucin, carga una imagen
preseleccionada en el servidor, que se visualiza en la pgina del usuario como foto de
perfil.
4.2.3

Servlet ComUsuario.java.

Comprueba si el Nickname de usuario con el que se est registrando ha sido ocupado


por otro usuario, en caso de no estarlo se permitir el acceso y mostrara el nombre de
usuario, caso contrario se ejecutara un mensaje de error (FIGURA 146).
Parmetros:

User: es el campo que se requiere comprobar su existencia previa.

Ejemplo:
http://localhost:8084/BiokitUda/ComUsuario?user=xavi

FIGURA 146. Ejemplo de Servlet ComUsuario.

Fuente: Autor.

Gordillo Padilla 134


4.2.4

Servlet ComEmail.java.

Comprueba si el E-Mail de usuario con el que se est registrando ha sido ocupado por
otro usuario, en caso de no estarlo se permitir el acceso y mostrara el nombre de
usuario, caso contrario se ejecutara un mensaje de error (FIGURA 147).

Parmetros:

email: es el campo que se requiere comprobar su existencia previa.

Ejemplo:
http://localhost:8084/BiokitUda/CompEmail?email=xavi_padilla77@hotmail.com

FIGURA 147. Ejemplo de Servlet ComEmail.java.

Fuente: Autor.
4.2.5

Servlet ConsultarUsuario.java.

Devuelve todos los datos de usuario (FIGURA 148) separados por el smbolo dichos
parmetros son los siguientes:
-

Id. (Numero asignado con el que est registrado el usuario en la base de datos)

Password. (Clave de acceso).

Nickname. (Nombre o Seudnimo de reconocimiento de usuario).

Nombre.

Apellido.

Correo Electrnico.

Telfono.

Direccin.

Gordillo Padilla 135


-

Ciudad.

Estado.

Pas.

Cdigo Zip.
Parmetros:

id: nmero de identificacin con la que fue creada la cuenta de usuario.

Ejemplo:
http://localhost:8084/BiokitUda/ConsultarUsuario?id=1

FIGURA 148. Ejemplo de Servlet ConsultarUsuario.java.

Fuente: Autor.
4.2.6

Servlet GrabarECG.java.

Graba los parmetros propios del Electrocardiograma (fecha, hora, Id, ECG), en una
sola cadena (string) separado cada parmetro y cada string por guiones y barras
respectivamente; para posteriormente separar y asignar los datos particulares de cada
string en cada ubicacin correspondiente en la tabla de la base de datos (toquenizar),
tomando como referencia el carcter barra para los strings y el carcter guion para
los datos individuales a ser asignados en la base en un segundo toquenizado (FIGURA
149).
Parmetros:

Datos: Son los datos del ECG que se requieren grabar en la base de datos, cada
grupo se dividen por el caracter |, y dentro de cada grupo se separan las
derivaciones por el caracter -.

Gordillo Padilla 136

Id: nmero de identificacin con la que fue creada la cuenta de usuario.

Fecha: Fecha con la que se requiere grabar los datos adquiridos.

Hora: Hora con la que se requiere grabar los datos adquiridos.

Ejemplo:
http://localhost:8084/BiokitUda/GrabarECG?datos=|-321-324-526|-215-412-854|652-236-512|&id=1&fecha=2014-03-05&hora=9:13:12

FIGURA 149. Ejemplo de Servlet GrabarECG.java.

Fuente: Autor.
4.2.7

Servlet Imag.java.

Devuelve la foto de perfil del usuario previamente seleccionada y cargada, con solo
ingresar el Id (FIGURA 150).

Ejemplo:
http://localhost:8084/BiokitUda/Imag?id=1

Gordillo Padilla 137


FIGURA 150. Ejemplo de Servlet Imag.java.

Fuente: Autor.

Parmetros.

4.2.8

Id: nmero de identificacin con la que fue creada la cuenta de usuario.

Servlet MostrarECGSimple.java.

Lee, desde la base de datos, el Id, la fecha, la hora ingresados y devuelve una imagen
(.png) con los valores del ECG del momento correspondiente a los datos ingresados
(FIGURA 151).
Ejemplo:
http://localhost:8084/BiokitUda/MostrarECGSimple?User=1&Fecha=2013-1220&Hora=17:56:15

Gordillo Padilla 138

FIGURA 151. Ejemplo de Servlet MostrarECGSimple.java.

Fuente: Autor.
4.2.9

Servlet Perfil.java.

Devuelve una pgina web al ingresar el Id del usuario, (FIGURA 152) dicha pgina
posee y exhibe los siguientes elementos:
-

Fotografa de Perfil.

Nombre.

Apellido.

Correo Electrnico.

Telfono.

Direccin.

Ciudad.

Estado.

Pas.

Cdigo Zip.

Ejemplo:
http://localhost:8084/BiokitUda/Perfil?id=1

Gordillo Padilla 139

FIGURA 152. Ejemplo de Servlet Perfil.java.

Fuente: Autor.
4.2.10 Servlet Registro.java.

Creado nicamente para la creacin de nuevos usuarios, con datos inexistentes en la


base de datos de usuarios, se ingresan directamente los datos del mismo sin ningn
tipo de restriccin (no se requiere Password), se ingresan todos los parmetros
enumerados anteriormente excepto el numero Id que se asigna automticamente
(FIGURA 153).
Ejemplo:
http://localhost:8084/BiokitUda/Registro?user=pabloperez&nombre=pablo&apellido
=perez&email=pperez@hotmail.com&pass=pablo&telefono=+593987012365&direc
cion=Av%20Americas&ciudad=Cuenca&estado=Azuay&pais=Ecuador&zip=10101

Gordillo Padilla 140

FIGURA 153. Ejemplo de Servlet Registro.java.

Fuente: Autor.
4.2.11 Servlet Usuarios.java.

Comprueba si el usuario es administrador o cliente, lo que, en la prctica, corresponde


a la distincin entre Medico o Paciente, esto se realiza a travs de la pantalla de Login
donde se ingresa el Nickname de usuario y la contrasea del mismo, y a su vez,
devuelve la pgina del usuario en el caso de web, o la Id, nombre y apellido del usuario
en una hoja de texto al ingresar desde el mvil (FIGURA 154 y FIGURA 155).
Ejemplo:
http://localhost:8084/BiokitUda/Usuarios?user=xavi&pass=xavier1006&lugar=movil

FIGURA 154. Ejemplo de Servlet Usuarios.java.

Fuente: Autor.
Ejemplo:
http://localhost:8084/BiokitUda/Usuarios?user=xavi&pass=xavier1006&lugar=web

Gordillo Padilla 141


FIGURA 155. Ejemplo de Servlet ConsultarUsuario.java aplicado en dispositivo.

Fuente: Autor.
Pginas Web.
4.3.1

HTML.

(Hyper Text Markup Languaje) Es el lenguaje usado para definir pginas web
mediante etiquetas en las que se especifican elementos como textos o grficos
componentes de la pgina web. Se lo construye desde un editor de texto para pginas
web y se lo almacena con la extensin. HTML o .htm.
Este lenguaje consta de etiquetas escritas entre los smbolos <> con una implicacin
en cada letra que va dentro de estos, por ejm <B> para texto en negrita (bold). <P>
para un prrafo o <A> para un enlace, etc.
Entre sus ventajas podemos enumerar:
-

Fcil de entender.

Pocas etiquetas.

Compatibles con cualquier visualizador.

Ficheros pequeos y veloces.

No requiere programas adicionales.

Gordillo Padilla 142


Lamentablemente tiene un nmero limitado de etiquetas y no es posible crear ms lo
que limita las opciones de diseo, a ms de carecer una vista previa del producto final
(Alvarez, 2001).
4.3.2

JSP.

(JAVA Server Pages) Es una tecnologa de software diseada para crear pginas web
mediante programacin JAVA, lo que nos permite ejecutarlas en mltiples servidores
gracias a la caracterstica multiplataforma con la que cuenta JAVA.
Las paginas JSP estn escritas en cdigo HTML/XML basadas en etiquetas especiales
que programan los archivos de ordenes o procesamiento (scripts) JAVA.
El mvil; de las paginas JSP radica en los servlets, que como ya hemos visto, son
programas JAVA que se ejecutan a travs de un servidor, de ah que podemos ver a
JSP como una manera simplificada de construir servlets, pues el servidor interpreta el
cdigo de la pgina JSP y construye el cdigo JAVA del servlet que se necesite, dicho
servlet a su vez, genera el documento HTML que se ver en la pantalla de navegacin
(FIGURA 156).

FIGURA 156. Esquema de funcionamiento del mvil JSP.

Fuente: (lvarez, 2002).

Gordillo Padilla 143


Entre sus ventajas, JSP posee un lenguaje de propsito general, haciendo posible su
uso en otras aplicaciones aparte de las web, junto con su portabilidad por heredar la
multiplataformidad de JAVA, JSP constituye una herramienta muy til para la
construccin

de

aplicaciones

mayormente

web

(lvarez,

http://www.desarrolloweb.com, 2002).
4.3.3

JavaScript y NODEjs.

Java Script es un lenguaje de programacin cuya utilidad radica en que los programas
creados pueden ser insertados en una pgina web, dndonos la posibilidad de crear
diferentes efectos o interactuar con los usuarios.
Entre sus caractersticas podemos mencionar que es un lenguaje basado en acciones
que posee menos restricciones, gran parte de la programacin en este lenguaje est
centrada en describir objetos, escribir funciones que respondan a movimientos del
mouse, aperturas, utilizacin de teclas, cargas de pginas entre otros.
Hay dos tipos de JavaScript: por un lado est el que se ejecuta en el cliente, el
JavaScript propiamente dicho, denominado Navigator JavaScript. Y un JavaScript que
se ejecuta en el servidor y se denomina LiveWire JavaScript
Node.js es una plataforma construida en tiempo de ejecucin de JavaScript de Chrome
para construir fcilmente aplicaciones rpidas de red escalables. Node.js utiliza un
modelo de Entrada / Salida dirigida por eventos, dndole caractersticas de ligereza y
eficiencia, ideal para aplicaciones en tiempo real de datos intensivos que se ejecutan a
travs de dispositivos distribuidos. NODEjs es un servidor de aplicaciones
complementario de Java Script pues genera un entorno de ejecucin para este, del lado
del servidor (desarrolloweb.com, 2008).
4.3.4

Encriptacin Multiparte.

Al enviar un formulario, el navegador interpreta esta accin como un intento por enviar
de red correctamente envuelto en una estructura de mensaje de protocolo TCP/IP a
travs del protocolo HTTP. Al enviar los datos, se puede utilizar ya sea el mtodo
POST o GET para enviar datos a travs de dicho protocolo HTTP.

Gordillo Padilla 144


El mtodo POST le pide a su navegador construir un mensaje HTTP y poner todo el
contenido en el encabezado del mensaje (una forma muy til de hacer las cosas, ms
seguros y tambin flexibles).El mtodo GET tiene algunas limitaciones sobre
representacin de datos y la longitud.
Al enviar un archivo, es necesario contar protocolo HTTP para enviar un archivo con
varias caractersticas de informacin en su interior. De esta manera es posible enviar
sistemticamente datos para el receptor y deje que abra el archivo con el formato
actual. Este es un requisito del protocolo HTTP. No se debera enviar archivos
utilizando parmetros ENCTYPE por defecto, porque el receptor podra encontrar
problemas al leerlo
Mediante la utilizacin de estos mtodos se asegura de que algunos algoritmos de
seguridad funcionan en tus mensajes. Esta informacin tambin es utilizada por routers
de nivel de aplicacin con el propsito de efectuar la labor de servidores de seguridad
para datos externos (Morillo, 2012).
Pginas Web BiokitUda.

El proyecto propuesto est divido en pginas web destinadas al usuario y al mdico,


aunque poseen ciertas diferencias que radican mayormente en el acceso a la
informacin la mayora se utilizan en ambos casos y las pasamos a enumerar a
continuacin con sus respectivos parmetros que la componen dentro del contexto de
programacin:
4.4.1

Biokituda.jsp.

Es la pgina de cada usuario del sistema, en donde se podrn realizar las consultas de
los datos previamente adquiridos, adems se podr cambiar la foto de perfil al gusto
de cada usuario (FIGURA 157).
Ejemplo:
http://localhost:8084/BiokitUda/Biokituda.jsp

Gordillo Padilla 145


FIGURA 157. Biokituda.jsp.

Fuente: Autor.
4.4.2

Medico.jsp.

Es una pgina exclusiva para los mdicos para que puedan revisar los datos adquiridos
por los diferentes pacientes, ya que en esta contaran con una lista desplegable que
mostrara todos los usuarios registrados en el sistema (FIGURA 158).
Adems y al igual que la pgina de usuarios (BiokitUda.jsp), se podr cambiar la foto
de perfil del mdico y cerrar la respectiva sesin (FIGURA 159 y FIGURA 160).
Ejemplo:
http://localhost:8084/BiokitUda/Medico.jsp

Gordillo Padilla 146


FIGURA 158.Medico.jsp.

Fuente: Autor.

FIGURA 159. Medico.jsp.

Fuente: Autor.

Gordillo Padilla 147

FIGURA 160. Medico.jsp.

Fuente: Autor.
4.4.3

CargaIma.jsp.

Carga y exhibe las imgenes utilizadas en las fotografas de perfil de usuario.


Verifica que la sesin sea previamente abierta y evita que los datos se muestren en el
URL como medida de seguridad (FIGURA 161).

http://localhost:8084/BiokitUda/CargaIma.jsp

Gordillo Padilla 148


FIGURA 161. CargaIma.jsp.

Fuente: Autor.
4.4.4

Cerrar.jsp.

No es exactamente una pgina visible como la conceptualizamos, estrictamente es el


cdigo que utilizamos para cerrar las cesiones de usuario.
4.4.5

Imagen.jsp.

Efecta una labor de bypass entre la pgina de login del biokit y la pgina dedicada al
mdico o administrador.
4.4.6

Index.jsp.

Es la pgina principal de bienvenida donde se ingresa el nombre de usuario y la


contrasea (FIGURA 162)

Gordillo Padilla 149


FIGURA 162. Index.jsp.

Fuente: Autor.

Gordillo Padilla 150

CAPTULO 5.

BASE DE DATOS
Software para manejo de datos.
5.1.1

Base de datos.

Una base de datos (siglas en ingles DB). Es un conjunto ordenado de informacin


almacenado en un espacio de memoria en un ordenador, al cual diferentes usuarios
designados pueden acceder o modificar a travs de un programa gestor.
Las bases de datos tradicionales suelen organizarse por campos registros y archivos.
Un campo es un fragmento nico de informacin, un registro es un sistema completo
de campos, a su vez el archivo constituye una coleccin de registros. Por esta razn
podemos decir que una base de datos es a la final un sistema electrnico ordenado de
archivos (Martinez, 2002).
5.1.2

MySQL.

En la dcada de los 80 Michael Widenius, programador de complejas aplicaciones


basadas en el lenguaje de programacin BASIC, al no tener a su alcance un sistema
satisfactorio de almacenamiento de datos comenz a construir uno propio. En 1995
con la ayuda de David Axmark, Widenius presento el resultado de su trabajo: El
lenguaje SQL para datos, cuyas siglas en ingles significan Lenguaje estructurado de
consulta, siendo ahora el estndar ms utilizado para trabajar con bases de datos
relacionales; junto con la posibilidad de acceso a travs de internet. As como inicio el
gestor MySQL junto con la empresa a la que se le atribuye su creacin y propiedad:
MySQL AB.
La gran evolucin de MySQL desde su inicio se debe en gran parte a las peticiones y
sugerencias de usuarios del producto alrededor del mundo, que a su vez son tomadas
en cuenta por parte de la empresa sueca MySQL AB que continuamente mejora el
cdigo original a travs de sus programadores (McGraw-Hill, 2008).

Gordillo Padilla 151


5.1.2.1 Definicin.

MySQL puede ser definido como un gestor o servidor de bases de datos relacionales.
Para agregar, acceder y almacenar datos en una base de datos se requiere una
aplicacin que sirva como administrador de dicha base de datos que nos permita
interactuar con dicha base, que es la funcin que desempea MySQL.
Como ya mencionamos, una base de datos es, dicho de forma simple, un conjunto
ordenado de informacin, al hablar de base de datos relacionados, nos referimos a un
almacenamiento de datos en tablas separadas unas de otras, en lugar de colocarse la
informacin en un solo lugar, utilizamos tablas enlazadas entre s por diferentes
condiciones, esto nos permite combinar datos de diferentes tablas y acceder a la
informacin de forma ms flexible y veloz (Bravo, 2007).
5.1.2.2 Caractersticas de MySQL.
Una de las principales caractersticas de MySQL es la de ser Open Source, trmino
en ingles que significa que relativamente cualquier persona en el mundo puede
descargar el software de MySQL desde Internet y utilizarlo de forma gratuita. De
hecho, de ser necesario, cualquier usuario puede cambiar el cdigo fuente de acuerdo
a sus necesidades, pues MySQL utiliza una licencia llamada GPL (Licencia Publica
General), con la posibilidad de extenderse a una licencia comercial segn ciertas
condiciones.
A ms de esto, podemos mencionar de forma general, que MySQL como tal, posee
rapidez de respuesta, relativa seguridad por medio de un sistema de Password, y
facilidad de uso; debido a que este programa fue desarrollado originalmente para
manejar grandes bases de datos de forma ms veloz que los dems servidores
existentes hasta ese momento.
Entre los detalles de carcter tcnico del servidor, MySQL FIGURA 166 es un sistema
basado en la metodologa cliente/servidor, el servidor como tal est elaborado a travs
del leguaje SQL multihilo, cuenta con gran variedad de APIs (Interfaces de
aplicacin), junto con diversas bibliotecas enlazables entre s, constituyendo un
sistema eficiente, robusto y de fcil uso (mysql.com, 2011).

Gordillo Padilla 152


FIGURA 163. Logo de MySQL y productos relacionados.

Fuente: (mysql.com, 2011).


5.1.2.3 Diagrama o modelo entidad-relacin.
A veces denominado por sus siglas en ingls, E-R "Entity relationship", o del
espaol DER "Diagrama de Entidad Relacin") es una herramienta para el modelado
de datos que permite representar las entidades relevantes de un sistema de
informacin as como sus interrelaciones y propiedades (Ochando, 2014).
(, FIGURA 168, FIGURA 169.
Desarrollo.

El manejo de los datos recolectados de los distintos servicios que se brinda se debe
manejar de tal manera que se optimice siempre la cantidad de informacin ingresada
en la base de datos por lo que se dise la base de datos de la siguiente manera:

Gordillo Padilla 153


5.2.1

Electrocardiograma.

La base de datos del servicio del electrocardiograma se maneja siguiendo el diagrama


entidad relacin descrito en la FIGURA 167 sugiriendo que por cada usuario se pueden
tener diferentes registros de las 3 derivaciones del electrocardiograma, estos registros
tendrn su propio identificador y su propia fecha y hora.
En el relacionador Tiene se asigna el identificador de la tabla del electrocardiograma
al identificador de la tabla usuario, optimizando de esta manera la informacin que se
agregue por cada usuario.

FIGURA 164.Diagrama entidad Relacin del Manejo de datos en ECG.

Fuente: Autor.

5.2.2

Oxmetro.

La base de datos del servicio del oxmetro se maneja siguiendo el diagrama entidad
relacin descrito en la FIGURA 168 sugiriendo que por cada usuario se pueden tener
diferentes registros de los niveles de oxgeno de la sangre, estos registros tendrn su
propio identificador y su propia fecha y hora.
En el relacionador Tiene se asigna el identificador de la tabla del oxmetro al
identificador de la tabla usuario optimizando de esta manera la informacin que se
agregue por cada usuario.

Gordillo Padilla 154

FIGURA 165.Diagrama entidad Relacin del Manejo de datos en Oxmetro de Pulso.

Fuente: Autor.
5.2.3

Tensimetro.

La base de datos del servicio del tensimetro se maneja siguiendo el diagrama entidad
relacin descrito en la FIGURA 169 sugiriendo que por cada usuario se pueden tener
diferentes registros de la presin arterial diastlica y sistlica, estos registros tendrn
su propio identificador y su propia fecha y hora.
En el relacionador Tiene se asigna el identificador de la tabla del tensimetro al
identificador de la tabla usuario optimizando de esta manera la informacin que se
agregue por cada usuario.
FIGURA 166. Diagrama entidad Relacin del Manejo de datos en Tensimetro.

Fuente: Autor.

Gordillo Padilla 155


6

CONCLUSIONES

Obviamente aspectos del presente tema de tesis que tienen que ver con su utilidad, su
aplicabilidad o su alcance dentro de determinadas circunstancias; son temas de opinin
personal por parte de las personas que de alguna manera han tenido acceso a esta
informacin, y de hecho, se puede decir que estos aspectos prcticamente caen en la
categora de lo subjetivo. Por lo expuesto, sobra decir que al momento de exponer las
conclusiones, que de hecho, puede decirse que es una de las ms importantes, no se
incluirn este tipo de temas, sino ms bien, los tpicos que tiene que ver con las
experiencias, problemticas, recomendaciones,

y dems aspectos objetivos que

vinieron surgiendo conforme se desarrollaba el proyecto, mismos de los que, en un


todo, se puede decir que es de lo que se trata, la ingeniera como tal. Dichos eventos,
se pasan a listar a continuacin, todos con una breve resea de los detalles que los
conforman.

Ruido 60hz Lamentablemente, uno de los mayores problemas que surgieron


al momento del desarrollo del proyecto, fue que, al trabajar con seal elctricas
provenientes de rganos del cuerpo humano y por ende seales elctricas muy
dbiles, se filtraba excesiva cantidad de ruido en cada una de las fases de
desarrollo, lo que hasta cierto punto era previsible y atenuado mediante filtros
tradicionales por as decirlos, sin embargo surgi un tipo de ruido que
contaminaba la pureza de la seal proveniente de la mismsima fuente de
alimentacin, o dicho de otra forma, del tomacorriente convencional conocido
por todos. Como es bien sabido, esta fuente proporciona energa elctrica de
corriente alterna que trabaja con 60 Hz de frecuencia, lo que significa que , a
ms de obviamente proveer la energa para el funcionamiento del equipo,
filtraba ruido en la seal; para dicha contingencia result necesario
implementar un filtro especial conocido cono filtro NOTCH activo, que en
resumen, se caracteriza por rechazar una frecuencia determinada que este
interfiriendo con un circuito, en nuestro caso la frecuencia es de 60Hz generada
por la fuente de energa.

Utilidad de App Inventor. A estas alturas de la exposicin, y fuera de la


importancia que tiene o pudiera llegar a tener el proyecto, sin lugar a dudas

Gordillo Padilla 156


queda claro que el entorno de desarrollo que responde al nombre de App
inventor es una herramienta de software extremadamente til y con ventajas
adicionales igualmente innegables, sin embargo, derivado de la experiencia en
el desarrollo del tema, se puede afirmar que el software en cuestin es til para
relativamente sencillos, pero comienza a verse escaso de recursos al momento
del desarrollo de proyectos de mayor envergadura, pues no es capaz de
procesar una mayor cantidad de seales en un determinado instante de tiempo
con la misma velocidad o frecuencia que lo hiciera si se trabajara con una
menor cantidad de seales en el mismo instante de tiempo. Si bien es cierto, el
lenguaje de programacin de App Inventor es sumamente cmodo, y por ende
til, al momento de trabajar o desarrollar proyectos de mayores requerimientos
se sugiere echar mano de entornos de programacin Android de bajo nivel,
sase software como Android Studio o Eclipse.

Programacin Arduino En cuanto a la programacin de microcontrolador,


hay un punto muy parecido al anterior, y es que la versatilidad de Arduino
permite tambin una programacin de microcontrolador en bajo nivel, tambin
extremadamente til para propsitos de mayor detalle tales como adquisicin
de seales, convertidores AD y datos en general.

Filtros Digitales Sin ahondar demasiado, un filtro es un elemento que solo


permite pasar a travs de l, la parte til de una determinada seal, el asunto en
cuestin es que al existir muchos tipos de filtros o tcnicas de filtraje, a veces
puede escogerse algn tipo de filtro que a la final no resulte tan conveniente,
por esta razn, y en cuanto al desarrollo del proyecto se refiere, es altamente
recomendable utilizar filtros digitales de referencia los que provienen de
elementos precisos como microcontroladores, por encima de los filtros
analgicos tradicionales, ya que estos ltimos no son capaces de generar una
seal lo suficientemente til, lo que en consecuencia sacrifica velocidad en lo
que respecta a adquisicin de datos y se traduce en perdida de los mismos.

Gordillo Padilla 157


7

BIBLIOGRAFA.

ALVAREZ, M. A. (1 de Enero de 2001). http://www.desarrolloweb.com.


(desarrolloweb.com)

Recuperado

el

Junio

de

2014,

de

http://www.desarrolloweb.com/articulos/que-es-html.html
LVAREZ, M. A. (8 de Julio de 2002). http://www.desarrolloweb.com.
(desarrolloweb.com/articulos)

Recuperado

el

Junio

de

2014,

de

http://www.desarrolloweb.com/articulos/831.php
LVAREZ,

M.

A.

(8

DE

JULIO

HTTP://WWW.DESARROLLOWEB.COM.

DE

2002).

OBTENIDO

DE

http://www.desarrolloweb.com/articulos/831.php aplicaciones-android.org. (8
de Septiembre de 2011). http://www.aplicaciones-android.org. Recuperado el
Mayo de 2014, de http://www.aplicaciones-android.org/sistema-operativoandroid/
AZUAY, U. d. (2005). http://www.uazuay.edu.ec. (uazuay.edu.ec) Recuperado el
Julio

de

2014,

de

http://www.uazuay.edu.ec/analisis/El%20modelo%20relacional.pdf
BRANDAN, N. A. (2008). http://docs.moodle.org/. Recuperado el Enero de 2014, de
http://docs.moodle.org/all/es/images_es/5/5b/Hemoglobina.pdf
BRAVO,

I.

M.

(2007).

http://indira-informatica.blogspot.com/.

(indira-

informatica.blogspot.com/) Recuperado el Julio de 2014, de http://indirainformatica.blogspot.com/2007/09/qu-es-mysql.html


BRITO, R. (11 de febrero de 2013). es.slideshare.net. (slideshare) Recuperado el
Abril de 2014, de http://es.slideshare.net/yanri94/sensores-de-presin
CUEVA, I. A. (2008). http://www.monografias.com/. Recuperado el Marzo de 2014,
dehttp://www.monografias.com/trabajos90/electromedicina/electromedicina.s
htmldesarrolloweb.com.
(desarrolloweb.com)

(2008).
Recuperado

http://www.desarrolloweb.com.
el

Junio

de

2014,

de

http://www.desarrolloweb.com/javascript/#quees
GEOSALUD.

(s.f.).

http://www.geosalud.com.

Obtenido

de

http://www.geosalud.com/hipertension/procedimiento_ha.htm
GONZALEZ,E.

(2006).

(aprenderaprogramar.com)

http://www.aprenderaprogramar.com.
Recuperado

el

Junio

de

2014,

de

http://www.aprenderaprogramar.com/index.php?option=com_content&view=
article&id=527:get-y-post-html-method-formas-de-envio-de-datos-en-

Gordillo Padilla 158


formulario-diferencias-y-ventajas-ejemplos-cu00721b&catid=69:tutorialbasico-programador-web-html-desde-cero&Itemid=192
HONEYWELL. (Noviembre de 2008). http://sensing.honeywell.com/. (Honeywell)
Recuperado

el

Abril

de

2014,

de

http://sensing.honeywell.com/index.php/ci_id/49876/la_id/1/document/1/re_i
d/0 http://www.geosalud.com/. (s.f.). (Webmaster GeoSalud) Recuperado el 20
de

abril

de

2014,

de

http://www.geosalud.com/hipertension/procedimiento_ha.htm
KUBOTA., J. C. (16 de Agosto de 2009). http://es.scribd.com/. (scribd) Recuperado
el 20 de Febrero de 2014, de http://es.scribd.com/doc/18665760/Elementos-deEspectroscopia-y-Ley-de-Lambert-Beer
MARTINEZ, J. A. (13 de Agosto de 2002). http://www.monografias.com.
(monografias.com)

Recuperado

el

Julio

de

2014,

de

http://www.monografias.com/trabajos11/basda/basda.shtml
MCGRAW-HILL,

t.

(30

(mailxmail.com)

de

10

de

Recuperado

2008).
el

http://www.mailxmail.com.

Julio

de

2014,

de

http://www.mailxmail.com/curso-mysql-informatica/mysql-origenes-historia
MESTRAS, J. P. (2004). http://www.fdi.ucm.es. (Dep. Sistemas Informticos y
Programacin. Universidad Complutense Madrid) Recuperado el Junio de
2014, de http://www.fdi.ucm.es/profesor/jpavon/poo/02IntroJava.pdf
MORILLO, A. E. (2012). http://recsi2012.mondragon.edu/es. (mondragon.edu/es)
Recuperado

el

Junio

de

2014,

de

http://recsi2012.mondragon.edu/es/programa/recsi2012_submission_31.pdf
MULTSTOCK.

(2012).

http://www.multstock.com.

Obtenido

de

http://www.multstock.com.br/nossos-produtos/oximetro-de-pulso-md300c/
mysql.com. (2011). http://dev.mysql.com. (mysql.com) Recuperado el Julio de
2014, de http://dev.mysql.com/doc/refman/5.0/es/features.html
NUEZ, K. (18 de Julio de 2013). es.slideshare.net. (es.slideshare.net) Recuperado
el Mayo de 2014, de http://es.slideshare.net/karenonunez/sistema-operativoandroid-versiones-historia
OCHANDO, M. B. (20 de febrero de 2014). http://ccdoc-basesdedatos.blogspot.com.
Recuperado

el

Julio

de

2014,

de

http://ccdoc-

basesdedatos.blogspot.com/2013/02/modelo-entidad-relacion-er.html

Gordillo Padilla 159


OSUNA, I. O. (Julio de 2012). http://www.elandroidelibre.com. Recuperado el Junio
de 2014, de http://www.elandroidelibre.com/2012/03/app-inventor-de-nuevodisponible-para-que-crees-tusaplicaciones.html?aceptarCookies=023fa46f41713fa1bb43049828b49cef747
2e293
PASQUIER, D. R. (19 de Enero de 2013). http://www.medicinapreventiva.com.ve/.
(medicinapreventiva.com.ve)

Recuperado

el

Marzo

de

2014,

de

Obtenido

de

Obtenido

de

http://www.medicinapreventiva.com.ve/auxilio/signos/tension.htm
PREZ,

V.

(23

de

septiembre

de

2010).

Laguia2000.

http://matematica.laguia2000.com/general/ley-de-beer-lambert
RAMON,A.

X.

(13

de

Marzo

de

2013).

blogspot.com.

http://alexalteno1.blogspot.com/2013/03/triangulo-de-einthoven.html
RIEGO,A.R.

(24

de

Enero

de

2013).

https://sites.google.com/site/appinventormegusta. Recuperado el Junio de


2014, de https://sites.google.com/site/appinventormegusta/primeros-pasos
RIEGO,A.R.

(24

de

Enero

de

2013).

https://sites.google.com/site/appinventormegusta. Recuperado el Junio de


2014, de https://sites.google.com/site/appinventormegusta/conceptos
RIEGO,A.R.

(24

de

Enero

de

2013).

https://sites.google.com/site/appinventormegusta. Recuperado el Junio de


2014, de https://sites.google.com/site/appinventormegusta/instalacion
ROBREDO.,A. R. (1993). Microelectronica 92. (U. d. Cantabria, Ed.) Santander,
Espana: Graficas Calima S.A. Recuperado el Abril de 2014, de
http://books.google.com.ec/books?id=lFoQLyduGC4C&pg=PA114&dq=piez
orresistivo+modulo&hl=es&sa=X&ei=n8DNU8PcHKzesAStkYCIBA&ved=
0CE4Q6wEwCQ#v=onepage&q=piezorresistivo%20modulo&f=false
SARDIAS, M. R. (2008). http://www.monografias.com/. Recuperado el 4 de abril
de

2014,

de

http://www.monografias.com/trabajos58/medicion-tension-

arterial/medicion-tension-arterial.shtml
SARDIAS, M. R. (2008). http://www.monografias.com/. Recuperado el 4 de abril
de

2014,

de

http://www.monografias.com/trabajos58/medicion-tension-

arterial/medicion-tension-arterial2.shtml

Gordillo Padilla 160


SAVN, D. T. (31 de Enero de 2007). revistaciencias.com. Recuperado el Abril de
2014,

de

http://www.revistaciencias.com/publicaciones/EEZpklkZZkOTohDvCL.php
SYLVIA PALACIOS M., C. . (2010). http://www.scielo.cl/. Recuperado el 10 de
Febrero de 2014, de http://www.scielo.cl/pdf/rcher/v26n1/art10.pdf
TOLOZA, A. M. (2005). http://www.dalcame.com. (Dalcame) Recuperado el 10 de
Octubre de 2014, de http://www.dalcame.com/ecg.html#.U80zBeN5NUU. 1.
TOLOZA, A. M. (2005). http://www.dalcame.com/. ( Grupo de investigacion
biomedica

DALCAME)

Recuperado

el

Enero

de

2014,

de

http://www.dalcame.com/ecg.html#.U80zBeN5NUU
UNIVERSIDAD CES. (2007). http://its.uvm.edu. (Universidad CES) Recuperado el
Mayo de 2014, de http://its.uvm.edu/medtech/Tmodule_es.html

Gordillo Padilla 161


8

ANEXOS.

ANEXO 1: Circuito de Entrada del Electrocardiograma.

Gordillo Padilla 162


ANEXO 2: Circuito de Filtro Pasa Alto del Electrocardiograma.

Gordillo Padilla 163


ANEXO 3: Circuito de Filtro Pasa Bajo del Electrocardiograma.

Gordillo Padilla 164


ANEXO 4: Circuito de Filtro Notch del Electrocardiograma.

Gordillo Padilla 165


ANEXO 5: Circuito de Tensimetro Digital.

Gordillo Padilla 166


ANEXO 6: Circuito de Acople del Electrocardiograma y Mdulo de Oxmetro.

Gordillo Padilla 167


ANEXO 7: Cdigo de Index.html
1
2 <!DOCTYPE HTML>
3 <HTML lang="en">
4
<head>
5
<meta charset="UTF-8" />
6
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
7
<title>Inicio</title>
8
<meta name="viewport">
9
<meta content="no-cache">
10
<link href="img/ico1.png" type="image/x-icon" rel="shortcut icon" />
11
<link rel="stylesheet" type="text/css" href="css/demo.css" />
12
<link rel="stylesheet" type="text/css" href="css/style.css" />
13
<link rel="stylesheet" type="text/css" href="css/style2.css" />
14
<link rel="stylesheet" type="text/css" href="css/animate-custom.css" />
15
<script type="text/javascript" src="js/modernizr.custom.04022.js"></script>
16
href='http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700,300,300italic'
rel='stylesheet' type='text/css'/>
17
<style type="text/css">
18
<!-19
body {
20
font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;
21
background-color: #000;
22
margin: 0;
23
padding: 0;
24
color: #000;
25
background-image:url(img/map.png);
26
}
27
28
ul, ol, dl {
29
padding: 0;
30
margin: 0;
31
}
32
h1, h2, h3, h4, h5, h6, p {
33
margin-top: 0;
34
padding-right: 15px;
35
padding-left: 15px;
36
}
37
a img {
38
border: none;
39
}
40
41
a:link {
42
color:#414958;
43
text-decoration: underline;
44
}
45
a:visited {
46
color: #4E5869;
47
text-decoration: underline;
48
}
49
a:hover, a:active, a:focus {
50
text-decoration: none;
51
}
52
53
.container {
54
width: 100%;
55
height: 100%;
56
background-color: #FFF;
57
margin: 0 auto;
58
color: #FFF;
59
background-image: none;
60
text-align: center;
61
}
62
63
.header {
64
background-color: #000;
65
background-image:url(img/map.png);
66
text-align:left;
67
}
68
.cajas_texto {
69
background-color: #FFF;
70
text-align:left;
71
font: 85%/1.4 Verdana, Arial, Helvetica, sans-serif;
72
}
73
.botones {
74
background-color: #000;
75
text-align: center;
76
font: 85%/1.4 Verdana, Arial, Helvetica, sans-serif , bold;
77
width: auto;

<link

Gordillo Padilla 168


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160

color: #FFF;
padding-right: 15px;
padding-left: 15px;
left: 80px;
position: relative;
}
.icono {
background-color: #FFF;
text-align: center;
font: 85%/1.4 Verdana, Arial, Helvetica, sans-serif , bold;
width: auto;
color: #000;
padding-right: 15px;
padding-left: 15px;
left: 60px;
position: relative;
}
.sidebar1 {
float: right;
width: 55%;
height: auto;
background-color: #FFFFFF;
padding-bottom: 100px;
color: #000;
text-align:left;
}
.content {
padding: 10px 0;
width: 45%;
float: right;
}
.content ul, .content ol {
padding: 0 15px 15px 40px;
}
ul.nav {
list-style: none;
border-top: 1px solid #666;
margin-bottom: 15px;
background-image: url(../tesis/leather_black.jpg);
}
ul.nav li {
border-bottom: 1px solid #666;
}
ul.nav a, ul.nav a:visited {
padding: 5px 5px 5px 15px;
display: block;
text-decoration: none;
background-color: #FFFFFF;
color: #000;
}
ul.nav a:hover, ul.nav a:active, ul.nav a:focus {
background-color: #FFFFFF;
color: #FFF;
}
.footer {
padding: 10px 0;
background-color: #000000;
background-image:url(img/map.png);
position: relative;
clear: both;
font-family: Verdana, Geneva, sans-serif;
color: #FFF;
text-align: center;
}
.fltrt {
float: right;
margin-left: 8px;
}
.fltlft {
float: left;
margin-right: 8px;
}
.clearfloat {
clear:both;
height:0;
font-size: 1px;
line-height: 0px;
}

Gordillo Padilla 169


161
-->
162
</style></head>
164
<body>
166
<div class="container">
167
<div class="header">
168
<img src="img/uda.png" width="200" height="200">
171
</div>
172
<div class="sidebar1">
173
<p>&nbsp;</p>
174
<div id="container_demo" >
175
<a class="hiddenanchor" id="toregister"></a>
176
<a class="hiddenanchor" id="tologin"></a>
177
<div id="wrapper">
178
<div id="login" class="animate form">
179
<form action="Usuarios?lugar=web" method="POST">
180
<h1>Ingresar</h1>
181
<p>
182
<label for="username" class="uname" data-icon="u" > Usuario
</label>
183
<input id="user" name="user" required type="text"
placeholder="JuanPerez"/>
184
</p>
185
<p>
186
<label for="password" class="youpasswd" data-icon="p">
Contrasea </label>
187
<input id="pass" name="pass" required type="password"
placeholder="ejemplo: X8df!90E" />
188
</p>
190
<p class="login button">
191
<input type="submit" value="Ingresar" />
192
</p>
193
<p class="change_link">
194
Aun no tienes cuenta?
195
<a href="#toregister" class="to_register">Registrate</a>
196
</p>
197
</form>
198
</div>
200
<div id="register" class="animate form">
201
<form action="mysuperscript.php" autocomplete="on">
202
<h1> Registrar </h1>
203
<p>
204
<label for="usernamesignup" class="uname" dataicon="u">Usuario</label>
205
<input id="usernamesignup" name="usernamesignup" required
type="text" placeholder="mysuperusername690" />
206
</p>
207
<p>
208
<label for="emailsignup" class="youmail" data-icon="e" >
Email</label>
209
<input id="emailsignup" name="emailsignup" required
type="email" placeholder="mysupermail@mail.com"/>
210
</p>
211
<p>
212
<label for="passwordsignup" class="youpasswd" dataicon="p">Contrasea </label>
213
<input id="passwordsignup" name="passwordsignup" required
type="password" placeholder="eg. X8df!90EO"/>
214
</p>
215
<p>
216
<label for="passwordsignup_confirm" class="youpasswd" dataicon="p">Repetir Contrasea </label>
217
<input id="passwordsignup_confirm" name="passwordsignup_confirm"
required type="password" placeholder="eg. X8df!90EO"/>
218
</p>
219
<p class="signin button">
220
<input type="submit" value="Sign up"/>
221
</p>
222
<p class="change_link">
223
Ya eres miembro ?
224
<a href="#tologin" class="to_register">Ingresar</a>
225
</p>
226
</form>
227
</div>
229
</div>
230
</div>
231
</div>
232
<div class="content">
233
<div class="sp-slideshow">
235
<input id="button-1" type="radio" name="radio-set" class="sp-selector-1"
checked="checked" />
236
<label for="button-1" class="button-label-1"></label>
237
<input id="button-2" type="radio" name="radio-set" class="sp-selector-2"
/>

Gordillo Padilla 170


238
<label for="button-2" class="button-label-2"></label>
239
<input id="button-3" type="radio" name="radio-set" class="sp-selector-3"
/>
240
<label for="button-3" class="button-label-3"></label>
241
<input id="button-4" type="radio" name="radio-set" class="sp-selector-4"
/>
242
<label for="button-4" class="button-label-4"></label>
243
<input id="button-5" type="radio" name="radio-set" class="sp-selector-5"
/>
244
<label for="button-5" class="button-label-5"></label>
245
<label for="button-1" class="sp-arrow sp-a1"></label>
246
<label for="button-2" class="sp-arrow sp-a2"></label>
247
<label for="button-3" class="sp-arrow sp-a3"></label>
248
<label for="button-4" class="sp-arrow sp-a4"></label>
249
<label for="button-5" class="sp-arrow sp-a5"></label>
250
<div class="sp-content">
251
<div class="sp-parallax-bg"></div>
252
<ul class="sp-slider clearfix">
253
<li><img src="img/image1.png" alt="image01" /></li>
254
<li><img src="img/image2.png" alt="image02" /></li>
255
<li><img src="img/image3.png" alt="image03" /></li>
256
<li><img src="img/image4.png" alt="image04" /></li>
257
<li><img src="img/image5.png" alt="image05" /></li>
258
</ul>
259
</div>
260
</div>
261
</div>
262
<div class="footer">
263
<table border="0" cellpadding="0" align="center">
264
<tbody>
265
<tr>
266
<td><img src="img/electrocardiograma.png" width="200" height="150"
/></td>
267
<td><img src="img/BioKitUda_clip_image001.png" alt="" width="63"
height="137" /></td>
268
<td><img src="img/oximetro.png" width="200" height="150" /></td>
269
<td><img src="img/BioKitUda_clip_image001.png" alt="" width="63"
height="137" /></td>
270
<td><img src="img/tensiometro.png" width="200" height="150" /></td>
271
</tr>
272
</tbody>
273
</table>
274
<p>Derechos Reservados..</p>
275
</div>
276
</div>
277
</body>
278 </html>

Gordillo Padilla 171


ANEXO 8: Cdigo de BiokitUda.jsp
1 <%
2
response.setHeader("Cache-Control", "no-store"); //HTTP 1.1
3
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
4
response.setDateHeader("Expires", 0); %>
5
<%@
page
contentType="text/html;
charset=utf-8"
language="java"
import="java.sql.*"
errorPage="" session="true"%>
6
<!DOCTYPE
html
PUBLIC
"-//W3C//DTD
XHTML
1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7 <%
8
HttpSession sesion = request.getSession();
9
String id = (String) sesion.getAttribute("id");
10
String nombre = (String) sesion.getAttribute("nombre");
11
String apellido = (String) sesion.getAttribute("apellido");
12
if (id == null || nombre == null || apellido == null) {
13
response.sendRedirect("CerrarSesion.jsp");
14
} else {
15
sesion.setAttribute("user", id);
16
sesion.setAttribute("modo", "web");
17
sesion.setAttribute("nuevo", "no");
18
}
19 %>
20
21 <html xmlns="http://www.w3.org/1999/xhtml">
22
<head>
23
<link href="img/ico1.png" type="image/x-icon" rel="shortcut icon" />
24
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
25
<title>BioKitUda</title>
26
<style type="text/css">
27
<!-28
body {
29
font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;
30
background-color: #42413C;
31
margin: 0;
32
padding: 0;
33
color: #000;
34
}
35
ul, ol, dl {
36
padding: 0;
37
margin: 0;
38
}
39
h1, h2, h3, h4, h5, h6, p {
40
margin-top: 0;
41
padding-right: 15px;
42
padding-left: 15px;
43
}
44
a img {
45
border: none;
46
}
47
48
a:link {
49
color: #FFF;
50
text-decoration: underline;
51
}
52
a:visited {
53
color: #FFF;
54
text-decoration: underline;
55
}
56
a:hover, a:active, a:focus {
57
text-decoration: none;
58
}
59
60
.container {
61
width: 100%;
62
height: 100%;
63
background-color: #FFF;
64
margin: 0 auto;
65
}
66
67
.header {
68
background-color: #000;
69
background-image: url(img/map.png);
70
color: #FFF;
71
text-align: center;
72
}
73
74
.sidebar1 {
75
float: left;
76
max-width: 30%; min-width: 20%;
77
height: 100%;

Gordillo Padilla 172


78
background-color: #FFF;
79
text-align: center;
80
81
}
82
.content {
83
background-color: #FFF;
84
width: 80%;
85
float: left;
86
text-align: left;
87
}
88
89
.footer {
90
padding: 10px 0;
91
background-color: #000;
92
background-image: url(img/map.png);
93
}
94
95
.fltrt {
96
float: right;
97
margin-left: 8px;
98
}
99
.fltlft {
100
float: left;
101
margin-right: 8px;
102
}
103
.clearfloat {
104
clear:both;
105
height:0;
106
font-size: 1px;
107
line-height: 0px;
108
}
109
-->
110
</style></head>
111
112
<script language="javascript">
113
function abrir(Fd, Hd, Us) {
114
var Tb;
115
if (document.formulario.Tablas[0].checked) {
116
parent.principal.location.href = "MostrarECGSimple?Fecha=" + Fd + "&Hora=" +
Hd + "&User=" + Us;
117
}
118
if (document.formulario.Tablas[1].checked) {
119
parent.principal.location.href = "MostrarOximetroWeb?fecha=" + Fd + "&hora=" +
Hd + "&id=" + Us;
120
}
121
if (document.formulario.Tablas[2].checked) {
122
parent.principal.location.href = "MostrarTensiometroWeb?fecha=" + Fd + "&hora="
+ Hd + "&id=" + Us;
123
}
124
125
}
126
</script>
127
<body>
128
<div class="container">
129
<div class="header">
130
<table width="100%" border="0">
131
<tr>
132
<td width="15%"><img src="img/uda.png" width="100" height="100"/></a></td>
133
<td width="70%"><div align="center"><h1>Proyecto Biokit</h1> </div></td>
134
<td width="15%"><img src='usuarios/${id}.jpg' style="max-width: 100px;
max-height: 100px" /></a></td>
135
</tr>
136
</table>
137
<table width="100%" border="0">
138
<tr>
139
<td width="15%"><a href="CerrarSesion.jsp"><b>Cerrar Sesion</b></a></td>
140
<td width="70%"><div align="center"><h1></h1> </div></td>
141
<td width="15%"><a href="cargaima.jsp" id="enlace"><b>${nombre}
${apellido} </b></a></td>
142
</tr>
143
</table>
144
<p>&nbsp;</p>
145
<!-- end .header --> </div>
146
<div class="sidebar1" >
147
<iframe src="PerfilUsuario?user=xavi" name="perfil" width=100% height=752px
frameborder="0"></iframe>
148
</div>
149
<div class="content">
150
<h1>
151
152
</h1>
153
<table width=100% border="0" >
154
<tr>

Gordillo Padilla 173


155
<td><iframe src="" name="principal" width=100% height="450"
frameborder="0"></iframe></td>
156
</tr>
157
<tr>
158
<td>
159
<form name="formulario">
160
<table width="200" border="0" align="center">
161
<tr>
162
<td><table border="0">
163
<tr>
164
<td><input type="radio" name="Tablas"
value="ecg" id="ecg"checked="checked" onclick="eventofechas();"/></td>
165
<td><img src="img/ecg8x4.png" width="150"
height="75" alt="ecg" /></td>
166
</tr>
167
<tr>
168
<td><input type="radio" name="Tablas"
value="oximetro" id="oximetro" onclick="eventofechas();"/></td>
169
<td><img src="img/oximetro8x4.png"
width="150" height="75" alt="oximetro" /></td>
170
</tr>
171
<tr>
172
<td><input type="radio" name="Tablas"
value="tensiometro" id="tensiometro" onclick="eventofechas();"/></td>
173
<td><img src="img/tensiometro8x4.png"
width="150" height="75" alt="tensiometro" /></td>
174
</tr>
175
</table></td>
176
<fieldset>
177
<td><table width="200" border="0" align="left">
178
<tr>
179
<td>Usuario:
180
<select name="sUser"
id="sUser"></select></td>
181
</tr>
182
<tr>
183
<td><table border="0" align="left">
184
<thead>
185
Ingresar Datos:
186
</thead>
187
<tbody>
188
<tr>
189
<td>Fecha:
190
<input type="date"
name="fec" id="fec"/></td>
191
<td>
192
</td>
193
</tr>
194
<tr>
195
<td>Hora:
196
<select name="sPro"
id="sPro" ></select> </td>
197
<td></td>
198
</tr>
199
<tr></tr>
200
</tbody>
201
</table></td>
202
</tr>
203
<tr>
204
<td><input type="button"
onClick="abrir(document.formulario.fec.value,
document.formulario.sPro.value,
document.formulario.sUser.value);" value="Abrir"></input></td>
205
</tr>
206
</table>
207
</fieldset>
208
</td>
209
</tr>
210
</table>
211
</form>
212
</td>
213
</tr>
214
</table>
215
216
<script
type="text/javascript"
src="http://192.168.10.2:3000/socket.io/socket.io.js"></script>
217
<script type="text/javascript">
218
var io =
io.connect("http://192.168.10.2:3000/");
219
220
var sUser =
document.getElementById('sUser');
221
var sPro = document.getElementById('sPro');
222
var sDis = document.getElementById('sDis');

Gordillo Padilla 174


223
224
var fecha = document.getElementById('fec');
225
fecha.setAttribute("onchange",
"eventofechas()");
226
fecha.setAttribute("onkeypress",
"eventofechas()");
227
sUser.setAttribute("onchange",
"eventousuarios()");
228
229
230
function eventousuarios() {
231
parent.perfil.location.href =
"PerfilUsuario?user=" + sUser.options[sUser.selectedIndex].text;
232
eventofechas();
233
}
234
235
function eventofechas() {
236
if (document.formulario.Tablas[0].checked)
{
237
io.emit("horas", {fecha:
fecha.value, id: sUser.value});
238
}
239
if (document.formulario.Tablas[1].checked)
{
240
io.emit("horasoximetro",
{fecha: fecha.value, id: sUser.value});
241
}
242
if (document.formulario.Tablas[2].checked)
{
243
io.emit("horastensiometro",
{fecha: fecha.value, id: sUser.value});
244
}
245
}
246
function hora() {
247
248
}
249
io.on("usuarios", function(data) {
250
var totDep = data.length;
251
sUser.length = totDep;
252
253
for (var i = 0; i < totDep;
i++) {
254
sUser.options[i] = new
Option(data[i].nickname, data[i].id);
255
}
256
;
257
258
eventofechas();
259
});
260
261
io.on("horas", function(data) {
262
var totPro = data.length;
263
sPro.length = totPro;
264
265
for (var i = 0; i < totPro;
i++) {
266
sPro.options[i] = new
Option(data[i].hora, data[i].hora);
267
}
268
;
269
270
});
271
io.on("horasoximetro", function(data)
{
272
var totPro = data.length;
273
sPro.length = totPro;
274
275
for (var i = 0; i < totPro;
i++) {
276
sPro.options[i] = new
Option(data[i].hora, data[i].hora);
277
}
278
;
279
280
});
281
282
io.on("horastensiometro",
function(data) {
283
var totPro = data.length;
284
sPro.length = totPro;
285
286
for (var i = 0; i < totPro;
i++) {

Gordillo Padilla 175


287
Option(data[i].hora, data[i].hora);
288
289
290
291
292
293
</script>
294
</div>
295
<div class="footer">
296
<p>&nbsp;</p>
297
<p>&nbsp;</p>
298
<p>&nbsp;</p>
299
<p>&nbsp;</p>
300
301
</div>
302
</div>
303
</body>
304 </html>

sPro.options[i] = new
}
;
});

Gordillo Padilla 176


ANEXO 9: Cdigo de Cargaima.jsp
1 <%
2
response.setHeader("Cache-Control", "no-store"); //HTTP 1.1
3
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
4
response.setDateHeader("Expires", 0); %>
5 <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*"
errorPage="" %>
6 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7 <%
8
HttpSession sesion = request.getSession();
9
String user_id = (String) sesion.getAttribute("user");
10
String modo = (String) sesion.getAttribute("modo");
11
String nuevo = (String) sesion.getAttribute("nuevo");
12
sesion.setAttribute("user", user_id);
13
sesion.setAttribute("modo", "web");
14 %>
15 <%
16
String Us = "CargarImagen?ID=" + user_id + "&modo=" + modo;
17
String ima;
18
if (nuevo.equals("si")) {
19
ima = "img/NoUserImage.jpg";
20
} else {
21
ima = "usuarios/" + user_id + ".jpg";
22
};
23 %>
24 <html xmlns="http://www.w3.org/1999/xhtml">
25
<head>
26
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
27
<title>Cargar Imagen</title>
28
<style type="text/css">
29
<!-30
body {
31
font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;
32
background-color: #000;
33
margin: 0;
34
padding: 0;
35
color: #000;
36
background-image: url(img/map.png);
37
}
38
ul, ol, dl {
39
padding: 0;
40
margin: 0;
41
}
42
h1, h2, h3, h4, h5, h6, p {
43
margin-top: 0;
44
padding-right: 15px;
45
padding-left: 15px;
46
font-family: Verdana, Arial, Helvetica, sans-serif;
47
text-align: center;
48
}
49
a img {
50
border: none;
51
}
52
53
a:link {
54
color: #fff;
55
text-decoration: underline;
56
}
57
a:visited {
58
color: #6E6C64;
59
text-decoration: underline;
60
}
61
a:hover, a:active, a:focus {
62
text-decoration: none;
63
}
64
65
.container {
66
width: 480px;
67
background-color: #FFF;
68
margin: 0 auto;
69
}
70
71
.header {
72
background-color: #000;
73
font-family: Verdana, Geneva, sans-serif;
74
font-size: 36px;
75
font-style: normal;
76
line-height: normal;
77
color: #FFF;

Gordillo Padilla 177


78
font-weight: bold;
79
background-image: url(img/map.png);
80
}
81
82
.content {
83
padding: 10px 0;
84
font-family: Verdana, Arial, Helvetica, sans-serif;
85
}
86
87
.footer {
88
padding: 10px 0;
89
background-color: #000000;
90
color: #FFF;
91
background-image: url(img/map.png);
92
}
93
.fltrt {
94
float: right;
95
margin-left: 8px;
96
}
97
.fltlft {
98
float: left;
99
margin-right: 8px;
100
}
101
.clearfloat {
102
clear:both;
103
height:0;
104
font-size: 1px;
105
line-height: 0px;
106
}
107
.container .header table tr td {
108
text-align: center;
109
font-family: "Arial Black", Gadget, sans-serif;
110
}
111
-->
112
</style></head>
113
114
<body>
115
116
<div class="container">
117
118
<div class="header">
119
<table width="485" border="0" cellpadding="000">
120
<tr>
121
<td width="178"><img src="img/uda.png" alt="UDA" name="logo"
width="178" height="180" id="logo" /></td>
122
<td width="301">BIOKIT</td>
123
</tr>
124
</table>
125
126
<hr /></div>
127
128
<div class="content">
129
<h1>Seleccionar Imagen</h1>
130
<p><img src="<%= ima%>" style="max-width: 229px; max-height: 229px" /></p>
131
<form action=<%= Us%> method="post" enctype="multipart/form-data"
name="formularioimagen" id="formularioimagen">
132
<p>
133
134
<input type="file" name="CargarImag" id="CargarImag" />
135
</p>
136
<p>
137
<input type="submit" name="Subir" id="Subir" value="Enviar" />
138
</p>
139
</form>
140
</div>
141
<div class="footer">
142
<p>Biokit UDA derechos reservados</p>
143
144
</div>
145
</div>
146
</body>
147 </html>
148

Gordillo Padilla 178

ANEXO 10: Cdigo de CerrarSesion.jsp


1
2
3
4
5
6
7
8
9
10

<%

response.setHeader("Cache-Control", "no-store"); //HTTP 1.1


response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0);; %>
<%@ page session="true" %>
<%
HttpSession sesionOk = request.getSession();
sesionOk.invalidate();
response.sendRedirect("index.html");
%>

Gordillo Padilla 179


ANEXO 11: Cdigo de ActualizarUs.
1 package Servlets;
2
3 import java.io.*;
4 import java.sql.*;
5 import javax.servlet.*;
6 import javax.servlet.http.*;
7
8 public class ActualizarUs extends HttpServlet
9 {
10
private Connection conexion = null;
11
private Statement sentencia = null;
12
private ResultSet conjuntoResultados = null;
13
private String controlador = "com.mysql.jdbc.Driver";
14
private String url = "jdbc:mysql://localhost/proyecto";
15
private String usuario = "root";
16
private String clave = "xavier1006";
17
private String texto = "";
18
19
public void init(ServletConfig conf) throws ServletException
20
{
21
super.init(conf);
22
}
23
24
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
25
throws ServletException, IOException {
26
String id=request.getParameter("id");
27
String passvieja=request.getParameter("passvieja");
28
String nickname=request.getParameter("nickname");
29
String nombre=request.getParameter("nombre");
30
String apellido=request.getParameter("apellido");
31
String email=request.getParameter("email");
32
String pass=request.getParameter("pass");
33
String telefono=request.getParameter("telefono");
34
String direccion=request.getParameter("direccion");
35
String ciudad=request.getParameter("ciudad");
36
String estado=request.getParameter("estado");
37
String pais=request.getParameter("pais");
38
String zip=request.getParameter("zip");
39
try
40
{
41
Class.forName(controlador);
42
conexion = DriverManager.getConnection(url, usuario, clave);
43
}
44
catch (ClassNotFoundException e)
45
{
46
System.err.println("No se puede cargar el controlador JDBC: " + e);
47
System.exit(1);
48
}
49
catch (SQLException e)
50
{
51
System.err.println("No se puede conectar con la base de datos: " + e);
52
if (conexion != null)
53
{
54
try
55
{
56
conexion.close();
57
}
58
catch (SQLException ee)
59
{
60
System.err.println("No puede cerrar la conexion: " + ee);
61
}
62
}
63
System.exit(2);
64
}
65
try
66
{
67
String consulta = "SELECT * FROM usuarios WHERE id='"+ id +"' and
contrasena='"+passvieja+"';";
68
sentencia = conexion.createStatement();
69
conjuntoResultados = sentencia.executeQuery(consulta);
70
boolean registros = conjuntoResultados.first();
71
72
if (!registros)
73
{
74
texto="error";
75
sentencia.close();
76
response.setContentType("text/plain");
77
response.setContentLength(texto.length());
78
PrintWriter salida = response.getWriter();

Gordillo Padilla 180


79
salida.println(texto);
80
}
81
else{
82
String actualizar = "update usuarios set nickname='"+ nickname +"'
,nombre='"+nombre+"',apellido='"+apellido+"',email='"+email+"',Telefono='"+telefono+"',contrasena
='"+pass+"',direccion='"+direccion+"',ciudad='"+ciudad+"',estado='"+estado+"',pais='"+pais+"',zip
='"+zip+"' where id="+id+";";
83
sentencia = conexion.createStatement();
84
sentencia.executeUpdate(actualizar);
85
sentencia.close();
86
response.setContentType("text/plain");
87
texto="OK";
88
response.setContentLength(texto.length());
89
PrintWriter salida = response.getWriter();
90
salida.println(texto);
91
}
92
93
}
94
catch (SQLException e)
95
{
96
System.err.println("Error de SQL: " + e);
97
if (conexion != null)
98
{
99
try
100
{
101
conexion.close();
102
}
103
catch (SQLException ee)
104
{
105
System.err.println("No puede cerrar la conexion: " + ee);
106
}
107
}
108
System.exit(3);
109
}
110
111
if (conexion != null)
112
{
113
try
114
{
115
conexion.close();
116
}
117
catch (SQLException ee)
118
{
119
System.err.println("No puede cerrar la conexion: " + ee);
120
}
121
}
122
}
123
124
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
125
{
126
processRequest(req,res);
127
}
128
129
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
130
{
131
processRequest(req,res);;
132
}
133 }

Gordillo Padilla 181


ANEXO 12: Cdigo de CargarImagen.
1 package Servlets;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6 import java.util.List;
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12 import org.apache.commons.fileupload.FileItem;
13 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
14 import org.apache.commons.fileupload.servlet.ServletFileUpload;
15
16 public class CargarImagen extends HttpServlet {
17
private static final long serialVersionUID = 1L;
18
private static final String UPLOAD_DIRECTORY = "usuarios";
19
private static final int MEMORY_THRESHOLD
= 1024 * 1024 * 3; // 3MB
20
private static final int MAX_FILE_SIZE
= 1024 * 1024 * 40; // 40MB
21
private static final int MAX_REQUEST_SIZE
= 1024 * 1024 * 50; // 50MB
22
String id="";
23
24
protected void doPost(HttpServletRequest request,
25
HttpServletResponse response) throws ServletException, IOException {
26
id=request.getParameter("ID");
27
String modo =request.getParameter("modo");
28
HttpSession session = request.getSession(true);
29
String mode =(String) session.getAttribute("modo");
30
if (!ServletFileUpload.isMultipartContent(request)) {
31
PrintWriter writer = response.getWriter();
32
writer.println("Error: el tipo de requerimento debe ser multiparte
enctype=multipart/form-data.");
33
writer.flush();
34
return;
35
}
36
DiskFileItemFactory factory = new DiskFileItemFactory();
37
factory.setSizeThreshold(MEMORY_THRESHOLD);
38
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
39
ServletFileUpload upload = new ServletFileUpload(factory);
40
upload.setFileSizeMax(MAX_FILE_SIZE);
41
upload.setSizeMax(MAX_REQUEST_SIZE);
42
String uploadPath = getServletContext().getRealPath("") + File.separator +
UPLOAD_DIRECTORY;
43
File uploadDir = new File(uploadPath);
44
if (!uploadDir.exists()) {
45
uploadDir.mkdir();
46
}
47
try {
48
@SuppressWarnings("unchecked")
49
List<FileItem> formItems = upload.parseRequest(request);
50
51
if (formItems != null && formItems.size() > 0) {
52
for (FileItem item : formItems) {
53
if (!item.isFormField()) {
54
String fileName = id + ".jpg";
55
String filePath = uploadPath + File.separator + fileName;
56
File storeFile = new File(filePath);
57
item.write(storeFile);
58
}
59
}
60
}
61
} catch (Exception ex) {
62
request.setAttribute("message",
63
"There was an error: " + ex.getMessage());
64
}
65
if (mode.equals("web")){
66
response.sendRedirect("Biokituda.jsp");
67
}
68
else {
69
response.sendRedirect("http://192.168.10.4:8383/BiokitU/index.html?id="+id);
70
}
71
72
}
73 }

Gordillo Padilla 182


ANEXO 13: Cdigo de ComUsuario.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

package Servlets;
import
import
import
import

java.io.*;
java.sql.*;
javax.servlet.*;
javax.servlet.http.*;

public class ComUsuario extends HttpServlet


{
private Connection conexion = null;
private Statement sentencia = null;
private ResultSet conjuntoResultados = null;
private final String controlador = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://localhost/proyecto";
private final String usuario = "root";
private final String clave = "xavier1006";
private String texto = "";
String user="";
String id="";
@Override
public void init(ServletConfig conf) throws ServletException
{
super.init(conf);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
user=request.getParameter("user");
try
{
Class.forName(controlador);
conexion = DriverManager.getConnection(url, usuario, clave);
}
catch (ClassNotFoundException e)
{
System.err.println("No se puede cargar el controlador JDBC: " + e);
System.exit(1);
}
catch (SQLException e)
{
System.err.println("No se puede conectar con la base de datos: " + e);
if (conexion != null)
{
try
{
conexion.close();
}
catch (SQLException ee)
{
System.err.println("No puede cerrar la conexion: " + ee);
}
}
System.exit(2);
}
try
{
String consulta = "SELECT nickname FROM usuarios WHERE nickname='"+ user +"';";
sentencia = conexion.createStatement();
conjuntoResultados = sentencia.executeQuery(consulta);
boolean registros = conjuntoResultados.first();
if (!registros)
{
texto="ok";
}
else{
conjuntoResultados.beforeFirst();
texto="error";
}
sentencia.close();
response.setContentType("text/plain");
response.setContentLength(texto.length());
PrintWriter salida = response.getWriter();
salida.println(texto);
}
catch (SQLException e)
{
System.err.println("Error de SQL: " + e);
if (conexion != null)

Gordillo Padilla 183


80
{
81
try
82
{
83
conexion.close();
84
}
85
catch (SQLException ee)
86
{
87
System.err.println("No puede cerrar la conexion: " + ee);
88
}
89
}
90
System.exit(3);
91
}
92
93
if (conexion != null)
94
{
95
try
96
{
97
conexion.close();
98
}
99
catch (SQLException ee)
100
{
101
System.err.println("No puede cerrar la conexion: " + ee);
102
}
103
}
104
}
105
106
@Override
107
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
108
{
109
processRequest(req,res);
110
}
111
112
private void mostrarResultados(ResultSet conjuntoResultados) throws SQLException
113
{
114
boolean registros = conjuntoResultados.next();
115
116
if (!registros)
117
{
118
System.out.println("No hay datos");
119
return;
120
}
121
122
try
123
{
124
do
125
{
126
porFila(conjuntoResultados);
127
} while (conjuntoResultados.next());
128
}
129
catch (SQLException e)
130
{
131
System.err.println("Error al mostrar los datos: " + e);
132
if (conexion != null)
133
{
134
try
135
{
136
conexion.close();
137
}
138
catch (SQLException ee)
139
{
140
System.err.println("No puede cerrar la conexion: " + ee);
141
}
142
}
143
System.exit(4);
144
}
145
}
146
147
private void porFila(ResultSet conjuntoResultados) throws SQLException
148
{
149
150
id = conjuntoResultados.getString(1);
151
String nombre = conjuntoResultados.getString(2);
152
153
texto = nombre;
154
}
155
156
@Override
157
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
158
{
159
processRequest(req,res);
160
}}

Gordillo Padilla 184


ANEXO 14: Cdigo de CompEmail.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

package Servlets;
import
import
import
import

java.io.*;
java.sql.*;
javax.servlet.*;
javax.servlet.http.*;

public class CompEmail extends HttpServlet


{
private Connection conexion = null;
private Statement sentencia = null;
private ResultSet conjuntoResultados = null;
private final String controlador = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://localhost/proyecto";
private final String usuario = "root";
private final String clave = "xavier1006";
private String texto = "";
String email="";
String id="";
public void init(ServletConfig conf) throws ServletException
{
super.init(conf);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
email=request.getParameter("email");
try
{
Class.forName(controlador);
conexion = DriverManager.getConnection(url, usuario, clave);
}
catch (ClassNotFoundException e)
{
System.err.println("No se puede cargar el controlador JDBC: " + e);
System.exit(1);
}
catch (SQLException e)
{
System.err.println("No se puede conectar con la base de datos: " + e);
if (conexion != null)
{
try
{
conexion.close();
}
catch (SQLException ee)
{
System.err.println("No puede cerrar la conexion: " + ee);
}
}
System.exit(2);
}
try
{
String consulta = "SELECT email FROM usuarios WHERE email='"+ email +"';";
sentencia = conexion.createStatement();
conjuntoResultados = sentencia.executeQuery(consulta);
boolean registros = conjuntoResultados.first();
if (!registros)
{
texto="ok";
}
else{
conjuntoResultados.beforeFirst();
texto="error";
}
sentencia.close();
response.setContentType("text/plain");
response.setContentLength(texto.length());
PrintWriter salida = response.getWriter();
salida.println(texto);
}
catch (SQLException e)
{
System.err.println("Error de SQL: " + e);
if (conexion != null)

Gordillo Padilla 185


80
{
81
try
82
{
83
conexion.close();
84
}
85
catch (SQLException ee)
86
{
87
System.err.println("No puede cerrar la conexion: " + ee);
88
}
89
}
90
System.exit(3);
91
}
92
93
if (conexion != null)
94
{
95
try
96
{
97
conexion.close();
98
}
99
catch (SQLException ee)
100
{
101
System.err.println("No puede cerrar la conexion: " + ee);
102
}
103
}
104
}
105
106
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
107
{
108
processRequest(req,res);
109
}
110
111
private void mostrarResultados(ResultSet conjuntoResultados) throws SQLException
112
{
113
boolean registros = conjuntoResultados.next();
114
115
if (!registros)
116
{
117
System.out.println("No hay datos");
118
return;
119
}
120
121
try
122
{
123
do
124
{
125
porFila(conjuntoResultados);
126
} while (conjuntoResultados.next());
127
}
128
catch (SQLException e)
129
{
130
System.err.println("Error al mostrar los datos: " + e);
131
if (conexion != null)
132
{
133
try
134
{
135
conexion.close();
136
}
137
catch (SQLException ee)
138
{
139
System.err.println("No puede cerrar la conexion: " + ee);
140
}
141
}
142
System.exit(4);
143
}
144
}
145
146
private void porFila(ResultSet conjuntoResultados) throws SQLException
147
{
148
id = conjuntoResultados.getString(1);
149
String nombre = conjuntoResultados.getString(2);
150
texto = nombre;
151
}
152
153
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
154
{
155
processRequest(req,res);;
156
}
157 }

Gordillo Padilla 186


ANEXO 15: Cdigo de GrabarECG.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

package Servlets;
import
import
import
import
import

java.io.*;
java.sql.*;
javax.servlet.*;
javax.servlet.http.*;
java.util.StringTokenizer;

public class GrabarECG extends HttpServlet


{
private Connection conexion = null;
private Statement sentencia = null;
private ResultSet conjuntoResultados = null;
private String controlador = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost/proyecto";
private String usuario = "root";
private String clave = "xavier1006";
private String texto = "";
String datos="";
String id="";
String [] puntos;
double[] ECGI;
double[] ECGII;
double[] ECGIII;
int numPuntos=0;
int punto=0;
String fecha="";
String hora="";
double d=0.0;
public void init(ServletConfig conf) throws ServletException
{
super.init(conf);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
datos=request.getParameter("datos");
id=request.getParameter("id");
fecha=request.getParameter("fecha");
hora=request.getParameter("hora");
StringTokenizer tokens = new StringTokenizer(datos);
numPuntos=tokens.countTokens();
puntos=new String[numPuntos];
ECGI=new double[numPuntos];
ECGII=new double[numPuntos];
ECGIII=new double[numPuntos];
punto=0;
tokens.nextToken();
for(int j=0;j<numPuntos-2;j++){
puntos[j]=tokens.nextToken();
StringTokenizer tokendos = new StringTokenizer(puntos[j],"*");
while(tokendos.hasMoreTokens()){
ECGI[j]=Double.parseDouble(tokendos.nextToken());
ECGII[j]=Double.parseDouble(tokendos.nextToken())+1024;
ECGIII[j]=Double.parseDouble(tokendos.nextToken())+2048;
}
}
try
{
Class.forName(controlador);
conexion = DriverManager.getConnection(url, usuario, clave);
}
catch (ClassNotFoundException e)
{
System.err.println("No se puede cargar el controlador JDBC: " + e);
System.exit(1);
}
catch (SQLException e)
{
System.err.println("No se puede conectar con la base de datos: " + e);
if (conexion != null)
{
try
{
conexion.close();
}
catch (SQLException ee)

Gordillo Padilla 187


81
{
82
System.err.println("No puede cerrar la conexion: " + ee);
83
}
84
}
85
System.exit(2);
86
}
87
try
88
{
89
90
for(int j=0;j<numPuntos-2;j++){
91
String consulta = "INSERT INTO ecg (id, ECGI, ECGII, ECGIII, fecha, hora) VALUES
('" + id + "', '"+ ECGI[j] + "', '" + ECGII[j] + "', '"+ ECGIII[j] + "', '"+ fecha + "', '" + hora
+ "');";
92
sentencia = conexion.createStatement();
93
sentencia.executeUpdate(consulta);
94
95
}
96
sentencia.close();
97
response.setContentType("text/plain");
98
texto="OK";
99
response.setContentLength(texto.length());
100
PrintWriter salida = response.getWriter();
101
salida.println(texto);
102
//texto = user;
103
}
104
catch (SQLException e)
105
{
106
System.err.println("Error de SQL: " + e);
107
if (conexion != null)
108
{
109
try
110
{
111
conexion.close();
112
}
113
catch (SQLException ee)
114
{
115
System.err.println("No puede cerrar la conexion: " + ee);
116
}
117
}
118
System.exit(3);
119
}
120
121
if (conexion != null)
122
{
123
try
124
{
125
conexion.close();
126
}
127
catch (SQLException ee)
128
{
129
System.err.println("No puede cerrar la conexion: " + ee);
130
}
131
}
132
}
133
134
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
135
{
136
processRequest(req,res);
137
}
138
139
140
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
141
{
142
processRequest(req,res);;
143
}
144 }
145
146

Gordillo Padilla 188


ANEXO 16: Cdigo de GrabarOximetro.
1 package Servlets;
2
3 import java.io.*;
4 import java.sql.*;
5 import javax.servlet.*;
6 import javax.servlet.http.*;
7
8 public class GrabarOximetro extends HttpServlet {
9
10
private Connection conexion = null;
11
private Statement sentencia = null;
12
private ResultSet conjuntoResultados = null;
13
private String controlador = "com.mysql.jdbc.Driver";
14
private String url = "jdbc:mysql://localhost/proyecto";
15
private String usuario = "root";
16
private String clave = "xavier1006";
17
private String texto = "";
18
String datos = "";
19
String id = "";
20
String[] puntos;
21
double[] ECGI;
22
double[] ECGII;
23
double[] ECGIII;
24
int numPuntos = 0;
25
int punto = 0;
26
String fecha = "";
27
String hora = "";
28
double d = 0.0;
29
PreparedStatement spPrepararsentecias;
30
31
public void init(ServletConfig conf) throws ServletException {
32
super.init(conf);
33
}
34
35
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
36
throws ServletException, IOException {
37
datos = request.getParameter("oxigeno");
38
id = request.getParameter("id");
39
fecha = request.getParameter("fecha");
40
hora = request.getParameter("hora");
41
42
try {
43
Class.forName(controlador);
44
conexion = DriverManager.getConnection(url, usuario, clave);
45
} catch (ClassNotFoundException e) {
46
System.err.println("No se puede cargar el controlador JDBC: " + e);
47
System.exit(1);
48
} catch (SQLException e) {
49
System.err.println("No se puede conectar con la base de datos: " + e);
50
if (conexion != null) {
51
try {
52
conexion.close();
53
} catch (SQLException ee) {
54
System.err.println("No puede cerrar la conexion: " + ee);
55
}
56
}
57
System.exit(2);
58
}
59
try {
60
61
String sentenciaInsert = "INSERT INTO oximetro (id,datos,fecha,hora) values
(?,?,?,?);";
62
63
//conexion.prepareStatement(sentenciaInsert);
64
spPrepararsentecias = conexion.prepareStatement(sentenciaInsert);
65
spPrepararsentecias.setString(1, id);
66
spPrepararsentecias.setString(2, datos);
67
spPrepararsentecias.setString(3, fecha);
68
spPrepararsentecias.setString(4, hora);
69
spPrepararsentecias.executeUpdate();
70
spPrepararsentecias.close();
71
72
response.setContentType("text/plain");
73
texto = "OK";
74
response.setContentLength(texto.length());
75
PrintWriter salida = response.getWriter();
76
salida.println(texto);
77
//texto = user;
78
} catch (SQLException e) {

Gordillo Padilla 189


79
System.err.println("Error de SQL: " + e);
80
if (conexion != null) {
81
try {
82
conexion.close();
83
} catch (SQLException ee) {
84
System.err.println("No puede cerrar la conexion: " + ee);
85
}
86
}
87
System.exit(3);
88
}
89
90
if (conexion != null) {
91
try {
92
conexion.close();
93
} catch (SQLException ee) {
94
System.err.println("No puede cerrar la conexion: " + ee);
95
}
96
}
97
}
98
99
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
100
processRequest(req, res);
101
}
102
103
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
104
processRequest(req, res);;
105
}
106 }
107

Gordillo Padilla 190


ANEXO 17: Cdigo de GrabarTensiometro.
1 package Servlets;
2
3 import java.io.*;
4 import java.sql.*;
5 import javax.servlet.*;
6 import javax.servlet.http.*;
7
8 public class GrabarTensiometro extends HttpServlet {
9
10
private Connection conexion = null;
11
private Statement sentencia = null;
12
private ResultSet conjuntoResultados = null;
13
private String controlador = "com.mysql.jdbc.Driver";
14
private String url = "jdbc:mysql://localhost/proyecto";
15
private String usuario = "root";
16
private String clave = "xavier1006";
17
private String texto = "";
18
String datos = "";
19
String id = "";
20
String[] puntos;
21
double[] ECGI;
22
double[] ECGII;
23
double[] ECGIII;
24
int numPuntos = 0;
25
int punto = 0;
26
String fecha = "";
27
String hora = "";
28
double d = 0.0;
29
PreparedStatement spPrepararsentecias;
30
31
public void init(ServletConfig conf) throws ServletException {
32
super.init(conf);
33
}
34
35
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
36
throws ServletException, IOException {
37
String diastolica = request.getParameter("diastolica");
38
String sistolica = request.getParameter("sistolica");
39
id = request.getParameter("id");
40
fecha = request.getParameter("fecha");
41
hora = request.getParameter("hora");
42
43
try {
44
Class.forName(controlador);
45
conexion = DriverManager.getConnection(url, usuario, clave);
46
} catch (ClassNotFoundException e) {
47
System.err.println("No se puede cargar el controlador JDBC: " + e);
48
System.exit(1);
49
} catch (SQLException e) {
50
System.err.println("No se puede conectar con la base de datos: " + e);
51
if (conexion != null) {
52
try {
53
conexion.close();
54
} catch (SQLException ee) {
55
System.err.println("No puede cerrar la conexion: " + ee);
56
}
57
}
58
System.exit(2);
59
}
60
try {
61
String sentenciaInsert = "INSERT INTO tensiometro (id,diastolica,sistolica,fecha,hora)
values (?,?,?,?,?);";
62
spPrepararsentecias = conexion.prepareStatement(sentenciaInsert);
63
spPrepararsentecias.setString(1, id);
64
spPrepararsentecias.setString(2, diastolica);
65
spPrepararsentecias.setString(3, sistolica);
66
spPrepararsentecias.setString(4, fecha);
67
spPrepararsentecias.setString(5, hora);
68
spPrepararsentecias.executeUpdate();
69
spPrepararsentecias.close();
70
71
response.setContentType("text/plain");
72
texto = "OK";
73
response.setContentLength(texto.length());
74
PrintWriter salida = response.getWriter();
75
salida.println(texto);
76
} catch (SQLException e) {
77
System.err.println("Error de SQL: " + e);
78
if (conexion != null) {

Gordillo Padilla 191


79
try {
80
conexion.close();
81
} catch (SQLException ee) {
82
System.err.println("No puede cerrar la conexion: " + ee);
83
}
84
}
85
System.exit(3);
86
}
87
88
if (conexion != null) {
89
try {
90
conexion.close();
91
} catch (SQLException ee) {
92
System.err.println("No puede cerrar la conexion: " + ee);
93
}
94
}
95
}
96
97
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
98
processRequest(req, res);
99
}
100
101
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
102
processRequest(req, res);;
103
}
104 }
105

Gordillo Padilla 192


ANEXO 18: Cdigo de Imag.
1 package Servlets;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.OutputStream;
7 import javax.servlet.ServletContext;
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 public class Imag extends HttpServlet {
14
15
String id = "";
16
17
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
18
throws ServletException, IOException {
19
id = request.getParameter("id");
20
ServletContext sc = getServletContext();
21
String im = "/usuarios/" + id + ".jpg";
22
String filename = sc.getRealPath(im);
23
String mimeType = sc.getMimeType(filename);
24
if (mimeType == null) {
25
sc.log("Could not get MIME type of " + filename);
26
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
27
return;
28
}
29
response.setContentType(mimeType);
30
File file = new File(filename);
31
response.setContentLength((int) file.length());
32
FileInputStream in = new FileInputStream(file);
33
OutputStream out = response.getOutputStream();
34
byte[] buf = new byte[1024];
35
int count = 0;
36
while ((count = in.read(buf)) >= 0) {
37
out.write(buf, 0, count);
38
}
39
in.close();
40
out.close();
41
}
52
@Override
53
protected void doGet(HttpServletRequest request, HttpServletResponse response)
54
throws ServletException, IOException {
55
processRequest(request, response);
56
}
66
@Override
67
protected void doPost(HttpServletRequest request, HttpServletResponse response)
68
throws ServletException, IOException {
69
processRequest(request, response);
70
}
77
@Override
78
public String getServletInfo() {
79
return "Short description";
80
}/
81 }
ANEXO 13: Cdigo de MostrarE.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

package Servlets;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import

java.awt.BasicStroke;
java.awt.*;
java.io.IOException;
java.io.OutputStream;
javax.servlet.ServletException;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
org.jfree.chart.ChartFactory;
org.jfree.chart.ChartUtilities;
org.jfree.chart.JFreeChart;
org.jfree.chart.plot.PlotOrientation;
org.jfree.chart.plot.XYPlot;
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
org.jfree.data.xy.XYDataset;
org.jfree.data.xy.XYSeries;
org.jfree.data.xy.XYSeriesCollection;
java.sql.SQLException;
java.util.StringTokenizer;

Gordillo Padilla 193


22 import org.jfree.chart.axis.NumberAxis;
23 import org.jfree.chart.axis.NumberTickUnit;
24 import org.jfree.chart.axis.TickUnits;
25
26 public class MostrarE extends HttpServlet {
27
28
String datos = "";
29
String[] puntos;
30
static int numPuntos = 0;
31
double[] ECGI;
32
double[] ECGII;
33
double[] ECGIII;
34
static int punto = 0;
35
double d = 0.0;
36
37
private XYDataset generaDatos() throws SQLException {
38
39
XYSeries serie1 = new XYSeries("% ECGI");
40
XYSeries serie2 = new XYSeries("% ECGII");
41
XYSeries serie3 = new XYSeries("% ECGIII");
42
for (int j = 0; j < numPuntos - 2; j++) {
43
serie1.add(j + 1, ECGI[j]);
44
serie2.add(j + 1, ECGII[j]);
45
serie3.add(j + 1, ECGIII[j]);
46
}
47
XYSeriesCollection xyseriescollection = new XYSeriesCollection();
48
xyseriescollection.addSeries(serie1);
49
xyseriescollection.addSeries(serie2);
50
xyseriescollection.addSeries(serie3);
51
52
return xyseriescollection;
53
}
54
55
private static JFreeChart generaGrafico(XYDataset xydataset) throws IOException {
56
JFreeChart jfreechart = ChartFactory.createXYLineChart(
57
"", "", "",
58
xydataset, PlotOrientation.VERTICAL,
59
false, true, false);
60
61
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
62
jfreechart.setBorderPaint(Color.BLACK);
63
jfreechart.setBorderVisible(false);
64
jfreechart.removeLegend();
65
jfreechart.removeLegend();
66
jfreechart.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
67
68
xyplot.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
69
xyplot.getRenderer().setSeriesPaint(0, Color.white);
70
xyplot.getRenderer().setSeriesPaint(1, Color.white);
71
xyplot.getRenderer().setSeriesPaint(2, Color.white);
72
if (numPuntos > 0) {
73
NumberAxis axisdominio = (NumberAxis) xyplot.getDomainAxis();
74
NumberTickUnit ntu2 = new NumberTickUnit(20);
75
NumberTickUnit ntu3 = new NumberTickUnit(20);
76
TickUnits unidades = new TickUnits();
77
unidades.add(ntu2);
78
unidades.add(ntu3);
79
axisdominio.setStandardTickUnits(unidades);
80
axisdominio.setTickLabelsVisible(false);
81
axisdominio.setMinorTickMarksVisible(true);
82
axisdominio.setMinorTickCount(5);
83
xyplot.setDomainAxis(axisdominio);
84
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)
xyplot.getRenderer();
85
BasicStroke result = new BasicStroke(2.0f);
86
xylineandshaperenderer.setStroke(result);
87
}
88
NumberAxis axis = (NumberAxis) xyplot.getRangeAxis();
89
axis.setTickLabelsVisible(false);
90
NumberTickUnit ntu = new NumberTickUnit(256);
91
axis.setTickUnit(ntu);
92
axis.setMinorTickMarksVisible(true);
93
axis.setMinorTickCount(5);
94
axis.setTickLabelsVisible(false);
95
xyplot.setRangeAxis(axis);
96
xyplot.setDomainMinorGridlinesVisible(true);
97
xyplot.setRangeMinorGridlinesVisible(true);
98
xyplot.setDomainMinorGridlinePaint(Color.GRAY);
99
xyplot.setRangeMinorGridlinePaint(Color.GRAY);
100
float[] style = {2, 1};
101
xyplot.setRangeMinorGridlineStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));

Gordillo Padilla 194


102
xyplot.setDomainMinorGridlineStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
103
xyplot.setDomainGridlineStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
104
xyplot.setRangeGridlineStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
105
xyplot.setDomainGridlinePaint(Color.LIGHT_GRAY);
106
xyplot.setRangeGridlinePaint(Color.LIGHT_GRAY);
107
return jfreechart;
108
}
109
110
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
111
datos = request.getParameter("datos");
112
StringTokenizer tokens = new StringTokenizer(datos);
113
numPuntos = tokens.countTokens();
114
puntos = new String[numPuntos];
115
ECGI = new double[numPuntos];
116
ECGII = new double[numPuntos];
117
ECGIII = new double[numPuntos];
118
punto = 0;
119
tokens.nextToken();
120
for (int j = 0; j < numPuntos - 2; j++) {
121
puntos[j] = tokens.nextToken();
122
StringTokenizer tokendos = new StringTokenizer(puntos[j], "*");
123
while (tokendos.hasMoreTokens()) {
124
ECGI[j] = Double.parseDouble(tokendos.nextToken());
125
ECGII[j] = Double.parseDouble(tokendos.nextToken()) + 1024;
126
ECGIII[j] = Double.parseDouble(tokendos.nextToken()) + 2048;
127
}
128
}
129
response.setContentType("image/png");
130
OutputStream out = response.getOutputStream();
131
XYDataset dataset = generaDatos();
132
JFreeChart grafico = generaGrafico(dataset);
133
ChartUtilities.writeChartAsPNG(out, grafico, 4801, 801);
134
out.close();
135
}
136
137
@Override
138
protected void doGet(HttpServletRequest request, HttpServletResponse response)
139
throws ServletException, IOException {
140
try {
141
processRequest(request, response);
142
} catch (SQLException ex) {
143
144
}
145
}
146
147
@Override
148
protected void doPost(HttpServletRequest request, HttpServletResponse response)
149
throws ServletException, IOException {
150
try {
151
processRequest(request, response);
152
} catch (SQLException ex) {
153
154
}
155
}
156
157
@Override
158
public String getServletInfo() {
159
return "Short description";
160
}
161 }
162

Gordillo Padilla 195


ANEXO 19: Cdigo de MostrarECGSimple.
1 package Servlets;
2
3 import java.awt.BasicStroke;
4 import java.awt.Color;
5 import java.io.IOException;
6 import java.io.OutputStream;
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import org.jfree.chart.ChartFactory;
12 import org.jfree.chart.ChartUtilities;
13 import org.jfree.chart.JFreeChart;
14 import org.jfree.chart.plot.PlotOrientation;
15 import org.jfree.chart.plot.XYPlot;
16 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
17 import org.jfree.data.xy.XYDataset;
18 import org.jfree.data.xy.XYSeries;
19 import org.jfree.data.xy.XYSeriesCollection;
20 import java.sql.Connection;
21 import java.sql.DriverManager;
22 import java.sql.PreparedStatement;
23 import java.sql.ResultSet;
24 import java.sql.SQLException;
25 import org.jfree.chart.axis.NumberAxis;
26 import org.jfree.chart.axis.NumberTickUnit;
27 import org.jfree.chart.axis.TickUnits;
28
29 public class MostrarECGSimple extends HttpServlet {
30
31
private Connection conexion = null;
32
private String controlador = "com.mysql.jdbc.Driver";
33
private String url = "jdbc:mysql://localhost/proyecto";
34
private String usuario = "root";
35
private String clave = "xavier1006";
36
int indice = 0;
37
double[] ECGI;
38
double[] ECGII;
39
double[] ECGIII;
40
static String[] fecha;
41
int i = 0;
42
static int longitud;
43
String fechaecg = "";
44
String horaecg = "";
45
String user = "";
46
47
private void obtenerDatos() throws SQLException {
48
try {
49
Class.forName(controlador);
50
conexion = DriverManager.getConnection(url, usuario, clave);
51
} catch (ClassNotFoundException e) {
52
System.err.println("No se puede cargar el controlador JDBC: " + e);
53
System.exit(1);
54
} catch (SQLException e) {
55
System.err.println("No se puede conectar con la base de datos: " + e);
56
if (conexion != null) {
57
try {
58
conexion.close();
59
} catch (SQLException ee) {
60
System.err.println("No puede cerrar la conexion: " + ee);
61
}
62
}
63
System.exit(2);
64
}
65
66
try {
67
PreparedStatement obtenerDirecciones = conexion.prepareStatement("select
ecgi,ecgii,ecgiii,fecha,hora from ecg where fecha='" + fechaecg + "' and id=" + user + " and hora='"
+ horaecg + "';");
68
ResultSet resultado = obtenerDirecciones.executeQuery();
69
resultado.last();
70
indice = resultado.getRow();
71
longitud = indice;
72
resultado.first();
73
ECGI = new double[indice + 1];
74
ECGII = new double[indice + 1];
75
ECGIII = new double[indice + 1];
76
fecha = new String[indice + 1];
77
i = 0;

Gordillo Padilla 196


78
while (resultado.next()) {
79
ECGI[i] = Double.parseDouble(resultado.getString(1));
80
ECGII[i] = Double.parseDouble(resultado.getString(2));
81
ECGIII[i] = Double.parseDouble(resultado.getString(3));
82
fecha[i] = resultado.getString(4) + "\n" + resultado.getString(5);
83
i = i + 1;
84
}
85
} finally {
86
conexion.close();
87
}
88
}
89
90
private XYDataset generaDatos() throws SQLException {
91
obtenerDatos();
92
XYSeries serie1 = new XYSeries("% ECGI");
93
XYSeries serie2 = new XYSeries("% ECGII");
94
XYSeries serie3 = new XYSeries("% ECGIII");
95
for (int j = 0; j < indice - 1; j++) {
96
serie1.add(j + 1, ECGI[j]);
97
serie2.add(j + 1, ECGII[j]);
98
serie3.add(j + 1, ECGIII[j]);
99
}
100
XYSeriesCollection xyseriescollection = new XYSeriesCollection();
101
xyseriescollection.addSeries(serie1);
102
xyseriescollection.addSeries(serie2);
103
xyseriescollection.addSeries(serie3);
104
return xyseriescollection;
105
}
106
107
private static JFreeChart generaGrafico(XYDataset xydataset) {
108
JFreeChart jfreechart = ChartFactory.createXYLineChart(
109
"", "", "",
110
xydataset, PlotOrientation.VERTICAL,
111
false, true, false);
112
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
113
jfreechart.setBorderPaint(Color.BLACK);
114
jfreechart.setBorderVisible(false);
115
jfreechart.removeLegend();
116
xyplot.setBackgroundPaint(Color.BLACK);
117
xyplot.getRenderer().setSeriesPaint(0, Color.white);
118
xyplot.getRenderer().setSeriesPaint(1, Color.white);
119
xyplot.getRenderer().setSeriesPaint(2, Color.white);
120
if (longitud > 0) {
121
NumberAxis axisdominio = (NumberAxis) xyplot.getDomainAxis();
122
NumberTickUnit ntu2 = new NumberTickUnit(20);
123
NumberTickUnit ntu3 = new NumberTickUnit(20);
124
TickUnits unidades = new TickUnits();
125
unidades.add(ntu2);
126
unidades.add(ntu3);
127
axisdominio.setStandardTickUnits(unidades);
128
axisdominio.setTickLabelsVisible(false);
129
axisdominio.setMinorTickMarksVisible(true);
130
axisdominio.setMinorTickCount(5);
131
xyplot.setDomainAxis(axisdominio);
132
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)
xyplot.getRenderer();
133
BasicStroke result = new BasicStroke(2.0f);
134
xylineandshaperenderer.setStroke(result);
135
}
136
NumberAxis axis = (NumberAxis) xyplot.getRangeAxis();
137
axis.setTickLabelsVisible(false);
138
NumberTickUnit ntu = new NumberTickUnit(256);
139
axis.setTickUnit(ntu);
140
axis.setMinorTickMarksVisible(true);
141
axis.setMinorTickCount(5);
142
axis.setTickLabelsVisible(false);
143
xyplot.setRangeAxis(axis);
144
xyplot.setDomainMinorGridlinesVisible(true);
145
xyplot.setRangeMinorGridlinesVisible(true);
146
xyplot.setDomainMinorGridlinePaint(Color.GRAY);
147
xyplot.setRangeMinorGridlinePaint(Color.GRAY);
148
float[] style = {2, 1};
149
xyplot.setRangeMinorGridlineStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
150
xyplot.setDomainMinorGridlineStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
151
xyplot.setDomainGridlineStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
152
xyplot.setRangeGridlineStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 5.0f, style, 0.0f));
153
xyplot.setDomainGridlinePaint(Color.LIGHT_GRAY);
154
xyplot.setRangeGridlinePaint(Color.LIGHT_GRAY);
155
return jfreechart;

Gordillo Padilla 197


156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198 }
199

}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
i = 0;
longitud = 0;
indice = 0;
fechaecg = request.getParameter("Fecha");
horaecg = request.getParameter("Hora");
user = request.getParameter("User");
response.setContentType("image/png");
OutputStream out = response.getOutputStream();
XYDataset dataset = generaDatos();
JFreeChart grafico = generaGrafico(dataset);
ChartUtilities.writeChartAsPNG(out, grafico, 4325, 435);
out.close();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
public String getServletInfo() {
return "Short description";
}

Gordillo Padilla 198


ANEXO 20: Cdigo de MostrarOximetro.
1 package Servlets;
2
3 import java.awt.*;
4 import java.io.IOException;
5 import java.io.OutputStream;
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10 import org.jfree.chart.ChartFactory;
11 import org.jfree.chart.ChartUtilities;
12 import org.jfree.chart.JFreeChart;
13 import java.sql.SQLException;
14 import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
15 import org.jfree.chart.plot.PiePlot;
16 import org.jfree.data.general.DefaultPieDataset;
17
18 public class MostrarOximetro extends HttpServlet {
19
20
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
21
String oxigeno = request.getParameter("oxigeno");
22
DefaultPieDataset pieDataset = new DefaultPieDataset();
23
pieDataset.setValue("Oxigeno", Integer.parseInt(oxigeno));
24
pieDataset.setValue("Carbono", 100 - Integer.parseInt(oxigeno));
25
JFreeChart chart = ChartFactory.createPieChart("Nivel de SaO2 en la Sangre",
26
pieDataset,
27
false,
28
true,
29
false
30
);
31
32
PiePlot plot = (PiePlot) chart.getPlot();
33
chart.getTitle().setPaint(Color.WHITE);
34
chart.getTitle().setFont(new Font("Arial", Font.BOLD, 50));
35
plot.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
36
chart.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
37
plot.setOutlineVisible(false);
38
plot.setSectionPaint(0, Color.LIGHT_GRAY);
39
plot.setSectionPaint(1, Color.GRAY);
40
plot.setLabelFont(new Font("Arial", Font.BOLD, 25));
41
plot.setLabelLinkStroke(new BasicStroke(4f));
42
plot.setLabelLinkPaint(Color.WHITE);
43
plot.setLabelBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
44
plot.setLabelPaint(Color.WHITE);
45
plot.setLabelShadowPaint(new Color(0xFF, 0xFF, 0xFF, 0));
46
plot.setLabelOutlinePaint(new Color(0xFF, 0xFF, 0xFF, 0));
47
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {2}"));
48
plot.setExplodePercent(0, 0.3);
49
plot.setShadowPaint(Color.DARK_GRAY);
50
plot.setInteriorGap(0.0);
51
plot.setCircular(true);
52
try {
53
response.setContentType("image/png");
54
OutputStream out = response.getOutputStream();
55
ChartUtilities.writeChartAsPNG(out, chart, 800, 800);
56
out.close();
57
} catch (IOException e) {
58
System.err.println("Problem occurred creating chart.");
59
}
60
}
61
62
@Override
63
protected void doGet(HttpServletRequest request, HttpServletResponse response)
64
throws ServletException, IOException {
65
try {
66
processRequest(request, response);
67
} catch (SQLException ex) {
68
69
}
70
}
71
72
@Override
73
protected void doPost(HttpServletRequest request, HttpServletResponse response)
74
throws ServletException, IOException {
75
try {
76
processRequest(request, response);
77
} catch (SQLException ex) {

Gordillo Padilla 199


ANEXO 21: Cdigo de MostrarOximetroWeb.
1 package Servlets;
2
3 import java.awt.*;
4 import java.io.PrintWriter;
5 import java.sql.Connection;
6 import java.sql.DriverManager;
7 import java.sql.ResultSet;
8 import java.sql.Statement;
9 import java.io.IOException;
10 import java.io.OutputStream;
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15 import org.jfree.chart.ChartFactory;
16 import org.jfree.chart.ChartUtilities;
17 import org.jfree.chart.JFreeChart;
18 import java.sql.SQLException;
19 import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
20 import org.jfree.chart.plot.PiePlot;
21 import org.jfree.data.general.DefaultPieDataset;
22
23 public class MostrarOximetroWeb extends HttpServlet {
24
25
private Connection conexion = null;
26
private Statement sentencia = null;
27
private ResultSet conjuntoResultados = null;
28
private final String controlador = "com.mysql.jdbc.Driver";
29
private final String url = "jdbc:mysql://localhost/proyecto";
30
private final String usuario = "root";
31
private final String clave = "xavier1006";
32
private String texto = "";
33
String datos = "";
34
35
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
36
String id = request.getParameter("id");
37
String fecha = request.getParameter("fecha");
38
String hora = request.getParameter("hora");
39
try {
40
Class.forName(controlador);
41
conexion = DriverManager.getConnection(url, usuario, clave);
42
} catch (ClassNotFoundException e) {
43
System.err.println("No se puede cargar el controlador JDBC: " + e);
44
System.exit(1);
45
} catch (SQLException e) {
46
System.err.println("No se puede conectar con la base de datos: " + e);
47
if (conexion != null) {
48
try {
49
conexion.close();
50
} catch (SQLException ee) {
51
System.err.println("No puede cerrar la conexion: " + ee);
52
}
53
}
54
System.exit(2);
55
}
56
try {
57
String consulta = "SELECT datos from oximetro where id='" + id + "' and fecha='" +
fecha + "' and hora='" + hora + "';";
58
sentencia = conexion.createStatement();
59
conjuntoResultados = sentencia.executeQuery(consulta);
60
boolean registros = conjuntoResultados.first();
61
if (!registros) {
62
texto = "error";
63
sentencia.close();
64
response.setContentType("text/plain");
65
response.setContentLength(texto.length());
66
PrintWriter salida = response.getWriter();
67
salida.println(texto);
68
} else {
69
conjuntoResultados.beforeFirst();
70
conjuntoResultados.next();
71
String oxigeno = conjuntoResultados.getString(1);
72
DefaultPieDataset pieDataset = new DefaultPieDataset();
73
pieDataset.setValue("Oxigeno", Integer.parseInt(oxigeno));
74
pieDataset.setValue("Carbono", 100 - Integer.parseInt(oxigeno));
75
JFreeChart chart = ChartFactory.createPieChart("",
76
pieDataset,
77
false,

Gordillo Padilla 200


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153 }
154

true,
false
);
PiePlot plot = (PiePlot) chart.getPlot();
plot.setBackgroundPaint(Color.BLACK);
chart.setBackgroundPaint(Color.BLACK);
plot.setOutlineVisible(false);
plot.setSectionPaint(0, Color.LIGHT_GRAY);
plot.setSectionPaint(1, Color.GRAY);
plot.setShadowXOffset(0D);
plot.setLabelFont(new Font("Arial", Font.BOLD, 25));
plot.setLabelLinkStroke(new BasicStroke(4f));
plot.setLabelLinkPaint(Color.WHITE);
plot.setLabelBackgroundPaint(Color.BLACK);
plot.setLabelPaint(Color.WHITE);
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {2}"));
plot.setExplodePercent(0, 0.3);
plot.setInteriorGap(0.01);
try {
response.setContentType("image/png");
OutputStream out = response.getOutputStream();
ChartUtilities.writeChartAsPNG(out, chart, 1200, 430);
out.close();
} catch (IOException e) {
System.err.println("Error");
}
}
} catch (SQLException e) {
System.err.println("Error de SQL: " + e);
if (conexion != null) {
try {
conexion.close();
} catch (SQLException ee) {
System.err.println("No puede cerrar la conexion: " + ee);
}
}
System.exit(3);
}
if (conexion != null) {
try {
conexion.close();
} catch (SQLException ee) {
System.err.println("No puede cerrar la conexion: " + ee);
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
public String getServletInfo() {
return "Short description";
}

Gordillo Padilla 201


ANEXO 22: Cdigo de MostrarTensiometro.
1 package Servlets;
2
3 import java.awt.*;
4 import java.io.IOException;
5 import java.io.OutputStream;
6 import java.sql.SQLException;
7 import java.text.DecimalFormat;
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import org.jfree.chart.ChartFactory;
13 import org.jfree.chart.ChartUtilities;
14 import org.jfree.chart.JFreeChart;
15 import org.jfree.chart.axis.CategoryAxis;
16 import org.jfree.chart.axis.NumberTickUnit;
17 import org.jfree.chart.axis.TickUnits;
18 import org.jfree.chart.axis.ValueAxis;
19 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
20 import org.jfree.chart.plot.CategoryPlot;
21 import org.jfree.chart.plot.PlotOrientation;
22 import org.jfree.chart.renderer.category.BarRenderer;
23 import org.jfree.data.category.DefaultCategoryDataset;
24 import org.jfree.ui.RectangleInsets;
25
26 public class MostrarTensiometro extends HttpServlet {
27
String datos = "";
28
double[] puntos;
29
int numPuntos = 0;
30
int punto = 0;
31
double d = 0.0;
32
static Image imagen = Toolkit.getDefaultToolkit().getImage("chart.png");
33
34
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
35
String diastolica = request.getParameter("diastolica");
36
String sistolica = request.getParameter("sistolica");
37
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
38
dataset.setValue(Integer.parseInt(diastolica), "Diastolica", "Diastolica");
39
dataset.setValue(Integer.parseInt(sistolica), "Sistolica", "Sistolica");
40
JFreeChart chart = ChartFactory.createBarChart("Nivel de Presion Sanguinea",
41
"", "mmhg", dataset, PlotOrientation.VERTICAL, false, true, false);
42
chart.setBackgroundPaint(Color.BLACK);
43
chart.setBorderPaint(Color.BLACK);
44
chart.getTitle().setPaint(Color.WHITE);
45
chart.getTitle().setFont(new Font("Arial", Font.BOLD, 50));
46
CategoryPlot plot = chart.getCategoryPlot();
47
plot.setOutlineVisible(false);
48
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 0D));
49
plot.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
50
chart.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF, 0));
51
BarRenderer renderer = (BarRenderer) plot.getRenderer();
52
renderer.setBarPainter(new CustomBarPainter());
53
renderer.setShadowVisible(false);
54
GradientPaint gradientGray = new GradientPaint(0.0F, 0.0F, Color.LIGHT_GRAY, 0.0F,
0.0F, Color.LIGHT_GRAY);
55
renderer.setSeriesPaint(0, gradientGray);
56
GradientPaint gradientRed = new GradientPaint(0.0F, 0.0F, Color.GRAY, 0.0F, 0.0F,
Color.GRAY);
57
renderer.setSeriesPaint(1, gradientRed);
58
renderer.setItemMargin(-0.6D);
59
renderer.setBaseItemLabelsVisible(true);
60
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", new
DecimalFormat("#0.0#")));
61
renderer.setBaseItemLabelFont(new Font("Arial", Font.BOLD, 40));
62
renderer.setBaseItemLabelPaint(Color.WHITE);
63
renderer.setItemMargin(-1);
64
plot.setRenderer(renderer);
65
ValueAxis rango = plot.getRangeAxis();
66
rango.setTickLabelPaint(Color.WHITE);
67
rango.setLabelPaint(Color.WHITE);
68
rango.setRange(0, 200);
69
rango.setLabelFont(new Font("Arial", Font.BOLD, 25));
70
rango.setTickLabelFont(new Font("Arial", Font.BOLD, 25));
71
NumberTickUnit ntu2 = new NumberTickUnit(20);
72
TickUnits unidades = new TickUnits();
73
unidades.add(ntu2);
74
rango.setStandardTickUnits(unidades);
75
rango.setAxisLineStroke(new BasicStroke(4f));

Gordillo Padilla 202


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 }

rango.setAxisLinePaint(Color.WHITE);
CategoryAxis cAxis = plot.getDomainAxis();
cAxis.setLowerMargin(0.01D);
cAxis.setUpperMargin(0.01D);
cAxis.setTickMarksVisible(false);
cAxis.setAxisLinePaint(Color.white);
cAxis.setLabelPaint(Color.WHITE);
cAxis.setTickLabelPaint(Color.WHITE);
cAxis.setTickLabelFont(new Font("Arial", Font.BOLD, 30));
cAxis.setLabelFont(new Font("Arial", Font.BOLD, 25));
cAxis.setAxisLineStroke(new BasicStroke(4f));
plot.setRangeGridlinePaint(Color.WHITE);
plot.setRangeGridlineStroke(new BasicStroke(2f));
plot.setDomainGridlinePaint(Color.WHITE);
plot.setDomainGridlineStroke(new BasicStroke(2f));
try {
response.setContentType("image/png");
OutputStream out = response.getOutputStream();
ChartUtilities.writeChartAsPNG(out, chart, 800, 800);
out.close();
} catch (IOException e) {
System.err.println("Problem occurred creating chart.");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
public String getServletInfo() {
return "Short description";
}

Gordillo Padilla 203


ANEXO 23: Cdigo de MostrarTensiometroWeb.
1 package Servlets;
2
3 import java.awt.*;
4 import java.io.IOException;
5 import java.io.OutputStream;
6 import java.io.PrintWriter;
7 import java.sql.Connection;
8 import java.sql.DriverManager;
9 import java.sql.ResultSet;
10 import java.sql.SQLException;
11 import java.sql.Statement;
12 import java.text.DecimalFormat;
13 import javax.servlet.ServletException;
14 import javax.servlet.http.HttpServlet;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17 import org.jfree.chart.ChartFactory;
18 import org.jfree.chart.ChartUtilities;
19 import org.jfree.chart.JFreeChart;
20 import org.jfree.chart.axis.CategoryAxis;
21 import org.jfree.chart.axis.NumberTickUnit;
22 import org.jfree.chart.axis.TickUnits;
23 import org.jfree.chart.axis.ValueAxis;
24 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
25 import org.jfree.chart.plot.CategoryPlot;
26 import org.jfree.chart.plot.PlotOrientation;
27 import org.jfree.chart.renderer.category.BarRenderer;
28 import org.jfree.data.category.DefaultCategoryDataset;
29 import org.jfree.ui.RectangleInsets;
30
31 public class MostrarTensiometroWeb extends HttpServlet {
32
33
private Connection conexion = null;
34
private Statement sentencia = null;
35
private ResultSet conjuntoResultados = null;
36
private final String controlador = "com.mysql.jdbc.Driver";
37
private final String url = "jdbc:mysql://localhost/proyecto";
38
private final String usuario = "root";
39
private final String clave = "xavier1006";
40
private String texto = "";
41
String datos = "";
42
43
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
44
String id = request.getParameter("id");
45
String fecha = request.getParameter("fecha");
46
String hora = request.getParameter("hora");
47
try {
48
Class.forName(controlador);
49
conexion = DriverManager.getConnection(url, usuario, clave);
50
} catch (ClassNotFoundException e) {
51
System.err.println("No se puede cargar el controlador JDBC: " + e);
52
System.exit(1);
53
} catch (SQLException e) {
54
System.err.println("No se puede conectar con la base de datos: " + e);
55
if (conexion != null) {
56
try {
57
conexion.close();
58
} catch (SQLException ee) {
59
System.err.println("No puede cerrar la conexion: " + ee);
60
}
61
}
62
System.exit(2);
63
}
64
try {
65
String consulta = "SELECT diastolica, sistolica from tensiometro where id='" + id
+ "' and fecha='" + fecha + "' and hora='" + hora + "';";
66
sentencia = conexion.createStatement();
67
conjuntoResultados = sentencia.executeQuery(consulta);
68
boolean registros = conjuntoResultados.first();
69
if (!registros) {
70
texto = "error";
71
sentencia.close();
72
response.setContentType("text/plain");
73
response.setContentLength(texto.length());
74
PrintWriter salida = response.getWriter();
75
salida.println(texto);
76
} else {
77
conjuntoResultados.beforeFirst();

Gordillo Padilla 204


78
conjuntoResultados.next();
79
String diastolica = conjuntoResultados.getString(1);
80
String sistolica = conjuntoResultados.getString(2);
81
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
82
dataset.setValue(Integer.parseInt(diastolica), "Diastolica", "Diastolica");
83
dataset.setValue(Integer.parseInt(sistolica), "Sistolica", "Sistolica");
84
JFreeChart chart = ChartFactory.createBarChart("",
85
"", "mmhg", dataset, PlotOrientation.VERTICAL, false, true, false);
86
chart.setBackgroundPaint(Color.BLACK);
87
chart.setBorderPaint(Color.BLACK);
88
CategoryPlot plot = chart.getCategoryPlot();
89
plot.setOutlineVisible(false);
90
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 0D));
91
BarRenderer renderer = (BarRenderer) plot.getRenderer();
92
renderer.setBarPainter(new CustomBarPainter());
93
renderer.setShadowVisible(false);
94
GradientPaint gradientGray = new GradientPaint(0.0F, 0.0F, Color.LIGHT_GRAY,
0.0F, 0.0F, Color.LIGHT_GRAY);
95
renderer.setSeriesPaint(0, gradientGray);
96
GradientPaint gradientRed = new GradientPaint(0.0F, 0.0F, Color.LIGHT_GRAY,
0.0F, 0.0F, Color.LIGHT_GRAY);
97
renderer.setSeriesPaint(1, gradientRed);
98
renderer.setItemMargin(-0.6D);
99
renderer.setBaseItemLabelsVisible(true);
100
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",
new DecimalFormat("#0.0#")));
101
renderer.setBaseItemLabelFont(new Font("Arial", Font.BOLD, 25));
102
renderer.setBaseItemLabelPaint(Color.WHITE);
103
renderer.setItemMargin(-1);
104
plot.setRenderer(renderer);
105
ValueAxis rango = plot.getRangeAxis();
106
rango.setTickLabelPaint(Color.WHITE);
107
rango.setLabelPaint(Color.WHITE);
108
rango.setRange(0, 200);
109
rango.setLabelFont(new Font("Arial", Font.BOLD, 25));
110
rango.setAxisLineStroke(new BasicStroke(4f));
111
rango.setAxisLinePaint(Color.WHITE);
112
rango.setTickLabelFont(new Font("Arial", Font.BOLD, 25));
113
NumberTickUnit ntu2 = new NumberTickUnit(20);
114
TickUnits unidades = new TickUnits();
115
unidades.add(ntu2);
116
rango.setStandardTickUnits(unidades);
117
CategoryAxis cAxis = plot.getDomainAxis();
118
cAxis.setLowerMargin(0.01D);
119
cAxis.setUpperMargin(0.01D);
120
cAxis.setTickMarksVisible(false);
121
cAxis.setAxisLinePaint(Color.white);
122
cAxis.setLabelPaint(Color.WHITE);
123
cAxis.setTickLabelPaint(Color.WHITE);
124
cAxis.setTickLabelFont(new Font("Arial", Font.BOLD, 30));
125
cAxis.setLabelFont(new Font("Arial", Font.BOLD, 25));
126
cAxis.setAxisLineStroke(new BasicStroke(4f));
127
plot.setBackgroundPaint(Color.BLACK);
128
plot.setRangeGridlinePaint(Color.WHITE);
129
plot.setDomainGridlinePaint(Color.WHITE);
130
plot.setRangeGridlinePaint(Color.WHITE);
131
plot.setRangeGridlineStroke(new BasicStroke(2f));
132
plot.setDomainGridlinePaint(Color.WHITE);
133
plot.setDomainGridlineStroke(new BasicStroke(2f));
134
try {
135
response.setContentType("image/png");
136
OutputStream out = response.getOutputStream();
137
ChartUtilities.writeChartAsPNG(out, chart, 1200, 430);
138
out.close();
139
} catch (IOException e) {
140
System.err.println("Problem occurred creating chart.");
141
}
142
}
143
} catch (SQLException e) {
144
System.err.println("Error de SQL: " + e);
145
if (conexion != null) {
146
try {
147
conexion.close();
148
} catch (SQLException ee) {
149
System.err.println("No puede cerrar la conexion: " + ee);
150
}
151
}
152
System.exit(3);
153
}
154
155
if (conexion != null) {
156
try {
157
conexion.close();

Gordillo Padilla 205


158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 }

} catch (SQLException ee) {


System.err.println("No puede cerrar la conexion: " + ee);
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
}
}
@Override
public String getServletInfo() {
return "Short description";
}

Gordillo Padilla 206


ANEXO 24: Cdigo de Perfil.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

package Servlets;
import
import
import
import

java.io.*;
java.sql.*;
javax.servlet.*;
javax.servlet.http.*;

public class Perfil extends HttpServlet {


private Connection conexion = null;
private Statement sentencia = null;
private ResultSet conjuntoResultados = null;
private final String controlador = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://localhost/proyecto";
private final String usuario = "root";
private final String clave = "xavier1006";
private String texto = "";
String user = "";
String pass = "";
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
user = request.getParameter("user");
try {
Class.forName(controlador);
conexion = DriverManager.getConnection(url, usuario, clave);
} catch (ClassNotFoundException e) {
System.err.println("No se puede cargar el controlador JDBC: " + e);
System.exit(1);
} catch (SQLException e) {
System.err.println("No se puede conectar con la base de datos: " + e);
if (conexion != null) {
try {
conexion.close();
} catch (SQLException ee) {
System.err.println("No puede cerrar la conexion: " + ee);
}
}
System.exit(2);
}
try {
String consulta = "SELECT * FROM usuarios WHERE nickname='" + user + "';";
sentencia = conexion.createStatement();
conjuntoResultados = sentencia.executeQuery(consulta);
boolean registros = conjuntoResultados.first();
if (!registros) {
texto = "error";
sentencia.close();
response.setContentType("text/plain");
response.setContentLength(texto.length());
PrintWriter salida = response.getWriter();
salida.println(texto);
} else {
conjuntoResultados.beforeFirst();
conjuntoResultados.next();
String id = conjuntoResultados.getString(1);
String nombre = conjuntoResultados.getString(3);
String apellido = conjuntoResultados.getString(4);
String email = conjuntoResultados.getString(5);
String direccion = conjuntoResultados.getString(7);
String ciudad = conjuntoResultados.getString(8);
String estado = conjuntoResultados.getString(9);
String pais = conjuntoResultados.getString(10);
String zip = conjuntoResultados.getString(11);
String telefono = conjuntoResultados.getString(12);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Perfil</title>");
out.println("</head>");
out.println("<style type='text/css'>");

Gordillo Padilla 207


80
out.println("h1 {\n"
81
+ " background-color: #000;\n"
82
+ " color: #FFF;\n"
83
+ " text-align: center;\n"
84
+ "}\n" + ".container {\n"
85
+ "width: 300px;\n"
86
+ "overflow: hidden;}"
87
);
88
out.println("body {\n"
89
+ " font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;\n"
90
+ " background-color: #FFF;\n"
91
+ " margin: 0;\n"
92
+ " padding: 0;\n"
93
+ " color: #000;\n"
94
+ "}");
95
out.println("</style>");
96
out.println("<body background-color: #000>");
97
out.println("<div class='container'> <h1>" + nombre + " " + apellido +
"</h1>");
98
out.println("<div align='center'><img src='usuarios/" + id + ".jpg'
style='max-width: 300px; max-height: 300px'/></div>");
99
out.println("<p><b>Email: </b>" + email + "</p>");
100
out.println("<p><b>Telefono: </b>" + telefono + "</p>");
101
out.println("<p><b>Direccion: </b>" + direccion + "</p>");
102
out.println("<p><b>Ciudad: </b>" + ciudad + "</p>");
103
out.println("<p><b>Estado / Provincia: </b>" + estado + "</p>");
104
out.println("<p><b>Pais: </b>" + pais + "</p>");
105
out.println("<p><b>Zip Code: </b>" + zip + "</p></div>");
106
out.println("</body>");
107
out.println("</html>");
108
} finally {
109
out.close();
110
}
111
}
112
} catch (SQLException e) {
113
System.err.println("Error de SQL: " + e);
114
if (conexion != null) {
115
try {
116
conexion.close();
117
} catch (SQLException ee) {
118
System.err.println("No puede cerrar la conexion: " + ee);
119
}
120
}
121
System.exit(3);
122
}
123
if (conexion != null) {
124
try {
125
conexion.close();
126
} catch (SQLException ee) {
127
System.err.println("No puede cerrar la conexion: " + ee);
128
}
129
}
130
}
131
132
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
133
processRequest(req, res);
134
}
135
136
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
137
processRequest(req, res);;
138
}
139 }
140

Gordillo Padilla 208


ANEXO 25: Cdigo de Registro.
1 package Servlets;
2
3 import java.io.*;
4 import java.sql.*;
5 import javax.servlet.*;
6 import javax.servlet.http.*;
7
8 public class Registro extends HttpServlet {
9
10
private Connection conexion = null;
11
private Statement sentencia = null;
12
private ResultSet conjuntoResultados = null;
13
private String controlador = "com.mysql.jdbc.Driver";
14
private String url = "jdbc:mysql://localhost/proyecto";
15
private String usuario = "root";
16
private String clave = "xavier1006";
17
private String texto = "";
18
String user = "";
19
String nombre = "";
20
String apellido = "";
21
String email = "";
22
String pass = "";
23
String direccion = "";
24
String ciudad = "";
25
String estado = "";
26
String pais = "";
27
String zip = "";
28
String id = "";
29
30
public void init(ServletConfig conf) throws ServletException {
31
super.init(conf);
32
}
33
34
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
35
throws ServletException, IOException {
36
user = request.getParameter("user");
37
nombre = request.getParameter("nombre");
38
apellido = request.getParameter("apellido");
39
email = request.getParameter("email");
40
pass = request.getParameter("pass");
41
direccion = request.getParameter("direccion");
42
ciudad = request.getParameter("ciudad");
43
estado = request.getParameter("estado");
44
pais = request.getParameter("pais");
45
zip = request.getParameter("zip");
46
try {
47
Class.forName(controlador);
48
conexion = DriverManager.getConnection(url, usuario, clave);
49
} catch (ClassNotFoundException e) {
50
System.err.println("No se puede cargar el controlador JDBC: " + e);
51
System.exit(1);
52
} catch (SQLException e) {
53
System.err.println("No se puede conectar con la base de datos: " + e);
54
if (conexion != null) {
55
try {
56
conexion.close();
57
} catch (SQLException ee) {
58
System.err.println("No puede cerrar la conexion: " + ee);
59
}
60
}
61
System.exit(2);
62
}
63
try {
64
String consulta = "INSERT INTO usuarios (nickname, nombre, apellido, email,
contrasena, direccion, ciudad, estado, pais, zip) VALUES ('" + user + "', '" + nombre + "', '" +
apellido + "', '" + email + "', '" + pass + "', '" + direccion + "', '" + ciudad + "', '" + estado
+ "', '" + pais + "', '" + zip + "');";
65
sentencia = conexion.createStatement();
66
sentencia.executeUpdate(consulta);
67
sentencia.close();
68
response.setContentType("text/plain");
69
texto = "OK";
70
response.setContentLength(texto.length());
71
PrintWriter salida = response.getWriter();
72
salida.println(texto);
73
} catch (SQLException e) {
74
System.err.println("Error de SQL: " + e);
75
if (conexion != null) {
76
try {

Gordillo Padilla 209


77
conexion.close();
78
} catch (SQLException ee) {
79
System.err.println("No puede cerrar la conexion: " + ee);
80
}
81
}
82
System.exit(3);
83
}
84
85
if (conexion != null) {
86
try {
87
conexion.close();
88
} catch (SQLException ee) {
89
System.err.println("No puede cerrar la conexion: " + ee);
90
}
91
}
92
}
93
94
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
95
processRequest(req, res);
96
}
97
98
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
99
processRequest(req, res);;
100
}
101 }

Gordillo Padilla 210


ANEXO 26: Cdigo de Usuarios.
1 package Servlets;
2
3 import java.io.*;
4 import java.sql.*;
5 import javax.servlet.*;
6 import javax.servlet.http.*;
7
8 public class Usuarios extends HttpServlet {
9
10
private Connection conexion = null;
11
private Statement sentencia = null;
12
private ResultSet conjuntoResultados = null;
13
private final String controlador = "com.mysql.jdbc.Driver";
14
private final String url = "jdbc:mysql://localhost/proyecto";
15
private final String usuario = "root";
16
private final String clave = "xavier1006";
17
private String texto = "";
18
String user = "";
19
String pass = "";
20
String lugar = "";
21
22
public void init(ServletConfig conf) throws ServletException {
23
super.init(conf);
24
}
25
26
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
27
throws ServletException, IOException {
28
user = request.getParameter("user");
29
pass = request.getParameter("pass");
30
lugar = request.getParameter("lugar");
31
try {
32
Class.forName(controlador);
33
conexion = DriverManager.getConnection(url, usuario, clave);
34
} catch (ClassNotFoundException e) {
35
System.err.println("No se puede cargar el controlador JDBC: " + e);
36
System.exit(1);
37
} catch (SQLException e) {
38
System.err.println("No se puede conectar con la base de datos: " + e);
39
if (conexion != null) {
40
try {
41
conexion.close();
42
} catch (SQLException ee) {
43
System.err.println("No puede cerrar la conexion: " + ee);
44
}
45
}
46
System.exit(2);
47
}
48
try {
49
50
String consulta = "SELECT id, nombre, apellido FROM usuarios WHERE nickname='" +
user + "' and contrasena='" + pass + "';";
51
sentencia = conexion.createStatement();
52
conjuntoResultados = sentencia.executeQuery(consulta);
53
boolean registros = conjuntoResultados.first();
54
if (!registros) {
55
texto = "error";
56
sentencia.close();
57
response.setContentType("text/plain");
58
response.setContentLength(texto.length());
59
PrintWriter salida = response.getWriter();
60
salida.println(texto);
61
} else {
62
conjuntoResultados.beforeFirst();
63
conjuntoResultados.next();
64
String id = conjuntoResultados.getString(1);
65
String nombre = conjuntoResultados.getString(2);
66
String apellido = conjuntoResultados.getString(3);
67
texto = id + " " + nombre + " " + apellido;
68
if (lugar.equals("web")) {
69
HttpSession session = request.getSession(true);
70
session.setAttribute("id", id);
71
session.setAttribute("nombre", nombre);
72
session.setAttribute("apellido", apellido);
73
response.sendRedirect("Medico.jsp");
74
} else {
75
sentencia.close();
76
response.setContentType("text/plain");
77
response.setContentLength(texto.length());
78
PrintWriter salida = response.getWriter();

Gordillo Padilla 211


79
salida.println(texto);
80
texto = user;
81
}
82
}
83
} catch (SQLException e) {
84
System.err.println("Error de SQL: " + e);
85
if (conexion != null) {
86
try {
87
conexion.close();
88
} catch (SQLException ee) {
89
System.err.println("No puede cerrar la conexion: " + ee);
90
}
91
}
92
System.exit(3);
93
}
94
if (conexion != null) {
95
try {
96
conexion.close();
97
} catch (SQLException ee) {
98
System.err.println("No puede cerrar la conexion: " + ee);
99
}
100
}
101
}
102
103
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
104
processRequest(req, res);
105
}
106
107
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
108
processRequest(req, res);;
109
}
110 }
111

Gordillo Padilla 212


ANEXO 27: Cdigo de Microcontrolador Arduino.
const int N = 40;
int dato = 70;
double C1[N + 1] = { -0.0000000000000000, 0.0000054780433854, 0.0001638824035711,
0.0002376755713784, -0.0007932382647990, -0.0021409097603455, 0.0002468297903606,
0.0065366170430009, 0.0061198647936651, -0.0087803792474312, -0.0207214047914443, 0.0021242249315332, 0.0340195817953215, 0.0317591716500565, -0.0255076645573009, 0.0646690766288130, -0.0152322636957401, 0.0695678047014489, 0.0677889686315982, 0.0304055189085567, 0.9077999999999999, -0.0304055189085567, 0.0677889686315982,
0.0695678047014489, -0.0152322636957401, -0.0646690766288130, -0.0255076645573009,
0.0317591716500565, 0.0340195817953215, -0.0021242249315332, -0.0207214047914443, 0.0087803792474312, 0.0061198647936651, 0.0065366170430009, 0.0002468297903606, 0.0021409097603455, -0.0007932382647990, 0.0002376755713784, 0.0001638824035711,
0.0000054780433854, -0.0000000000000000 };
double V1[N + 1], V2[N + 1], V3[N + 1];
double picos[100];
int pres[100];
int Vd1, Vd2, Vd3, Vten, VOxi;
double d1 = 0.0, d2 = 0.0, d3 = 0.0;
double xo = 0.0, xo1 = 0.0, xo2 = 0.0, yo = 0.0, yo1 = 0.0, yo2 = 0.0;
double xt = 0.0, xt1 = 0.0, xt2 = 0.0, yt = 0.0, yt1 = 0.0, yt2 = 0.0;
int cont = 0;
void setup() {
Serial.begin(9600);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
for (int i = 0; i <= N; i++) {
V1[i] = 0;
V2[i] = 0;
V3[i] = 0;
};
for (int i = 0; i < 100; i++) {
picos[i] = 0;
pres[i] = 0;
};
}
void loop() {
if (Serial.available() > 0) {
dato = Serial.read();
}
else {
if (dato == 67) {
digitalWrite(5, HIGH);
VOxi = analogRead(A4);
xo = VOxi * 1.0;
yo = 0.000435306 * xo + 0.000870613 * xo1 + 0.000435306 * xo2 + 1.94012 * yo1 - 0.941865 *
yo2;
xo2 = xo1;
xo1 = xo;
yo2 = yo1;
yo1 = yo;
double porcen = (yo / 400) * 100;
Serial.println((int) porcen);
}
if (dato == 68) {
double mayor = 0;
int indi = 0;
for (int i = 4; i < cont; i++) {
if (picos[i] > mayor) {
mayor = picos[i];
indi = i;
}
};
Serial.println("****");
Serial.println((int)((double)pres[5] * 0.21941685546875));
Serial.println((int)((double)(3 * pres[indi] - 2 * pres[5]) * 0.21941685546875));
Serial.println("****");
dato = 70;
}
else if (dato == 66) {
Vten = analogRead(A3);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
xt = Vten * 1.0;
yt = 0.0625699 * xt + 0.0 * xt1 - 0.0625699 * xt2 + 1.81304 * yt1 - 0.87486 * yt2;

Gordillo Padilla 213


if (yt1 > yt && yt1 > yt2 && (yt * 100) > 70 && xt1 > 20) {
picos[cont] = yt1;
pres[cont] = xt1;
cont ++;
};
xt2 = xt1;
xt1 = xt;
yt2 = yt1;
yt1 = yt;
Serial.println(Vten);
}
else if (dato == 65) {
Vd1 = analogRead(A0);
Vd2 = analogRead(A1);
Vd3 = analogRead(A2);
V1[0] = Vd1 * 1.0;
V2[0] = Vd2 * 1.0;
V3[0] = Vd3 * 1.0;
d1 = 0;
d2 = 0;
d3 = 0;
for (int i = 0; i <= N ; i++) {
d1 = d1 + V1[i] * C1[i];
d2 = d2 + V2[i] * C1[i];
d3 = d3 + V3[i] * C1[i];
};
for (int i = N; i >= 1 ; i--) {
V1[i] = V1[i - 1];
V2[i] = V2[i - 1];
V3[i] = V3[i - 1];
};
String salida;
salida = String(String((int)d1) + "*" + String((int)d2) + "*" + String((int)d3));
Serial.println(salida);
}
else {
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
cont = 0;
xt2 = 0;
xt1 = 0;
yt2 = 0;
yt1 = 0;
}
}
}

También podría gustarte