martes, 30 de octubre de 2012

Diseñando la interfaz gráfica

Ahora toca diseñar cómo será la interfaz gráfica. En primer lugar, hay que definir las funcionalidades que deberá permitir dicha interfaz:

  • La interfaz debe tener una lista con todos los pacientes.
  • Cuando el usuario elija un paciente, deberán aparecer dos pestañas: 
    • una primera con toda la información personal del paciente elegido
    • una segunda que incluirá toda la parte de monitorización (acelerómetro y electrocardiograma). Concretamente el programa permitirá al usuario activar y desactivar la monitorización del acelerómetro y electrocardiograma del paciente elegido. Cuando se activa, el programa accederá a la base de datos, cargará la información de los sensores (tanto del acelerómetro como del electrocardiograma) y la visualizará en unas gráficas en tiempo real.
A continuación se mostrarán unas imágenes de cómo será el prototipo:

Imagen 7: Información personal del paciente

Imagen 8: Monitorización

Finalmente comentar que debido a que la información personal del paciente tiene muchos más campos que los que tiene la tabla paciente, deberé añadir los siguientes atributos a la tabla paciente: DNI, fecha de nacimiento, nacionalidad, estatura, sexo, peso, dirección, código postal, localidad, provincia, teléfono particular, teléfono móvil, email, enfermedades, tratamientos, observaciones y foto del paciente.

Ahora el siguiente paso será juntar la interfaz gráfica con la base de datos, es decir, que el programa recupere la información correspondiente de la base de datos y que la muestre correctamente en la interfaz gráfica.

viernes, 26 de octubre de 2012

Insertando datos en la base de datos

Una vez establecida la conexión entre la base de datos y mi proyecto, ya estoy en condiciones de poder almacenar los datos que capturen los sensores en la base de datos (recuerdo que me interesa almacenar tanto los datos que capture el electrocardiograma como los del acelerómetro).

Ahora mi proyecto está estructurado de la siguiente manera:
  • Clase SpineManager.java. Esta es la clase principal de mi proyecto. Es la que se encarga de capturar la información de las motas y los sensores.
  • DatabaseManager.java. Esta clase se encarga de gestionar toda la base de datos, es decir, de crear la conexión, de realizar las inserciones y selects en las tablas correspondiente y finalmente de cerrar la conexión.
  • Register.java. Esta clase contiene la estructura de la información que capturarán los sensores para posteriormente almacenarla en la base de datos.
Cuando un sensor (ya sea el acelerómetro o el electrocardiograma) capture información, se almacenará de la siguiente manera en la base de datos:

  1. En primer lugar, se creará una nueva tupla en la tabla registro. Esta nueva tupla tendrá la siguiente información:
    1. Reg_codigo: código autonumérico que se creará automáticamente al registrar un nuevo valor de un sensor.
    2. Reg_fechahora: fecha y hora en qué se registra el valor capturado por el sensor.
    3. Sen_codigo: código del sensor que ha generado el valor registrado. El sensor puede ser de tipo acelerómetro o electrocardiograma.
  2. Después actualizaremos el atributo SHI_ESTADO de la tabla SHIMMER de la mota que estemos utilizando. Este atributo puede tener dos valores: 0 (cuando el sensor está inactivo) ó 1 (cuando el sensor está activo). Lo que voy a hacer es mirar si el valor está a 0, y si lo está ponerlo a 1 (debido a que la mota está enviando información y por tanto está activa).
  3. Finalmente crearemos una nueva tupla dentro de la tabla ACELERÓMETRO o ELECTROCARDIOGRAMA en función del tipo de sensor que recibamos los datos.
    • Si recibimos los datos del ACELERÓMETRO, crearemos una nueva tupla con los siguientes atributos:
      • Reg_codigo: código que permitirá relacionar los valores del acelerómetro con la fecha y hora que se han registrado y el tipo de sensor que los ha capturado.
      • Mot_eje_x: valores capturados por el eje X del acelerómetro.
      • Mot_eje_y: valores capturados por el eje Y del acelerómetro.
      • Mot_eje_z: valores capturados por el eje Z el acelerómetro. 
    •  En cambio, si recibimos los datos del ELECTROCARDIOGRAMA, crearemos una nueva tupla con los siguientes atributos: 
      • Reg_codigo: código que permitirá relacionar los valores del electrocardiograma con la fecha y hora que se han registrado y el tipo de sensor que los ha capturado.
      • Mot_electrodo1: valores capturados por el primer electrodo.
      • Mot_electrodo2: valores capturados por el segundo electrodo.
En la siguiente imagen aparece el trozo de código que permite ejecturar los tres pasos anteriores:

Imagen 5: Insertando datos en la base de datos

Finalmente, he hecho una pequeña prueba para ver cómo se almacenaban los datos en las tablas ACELERÓMETRO o ELECTROCARDIOGRAMA:

Imagen 6: Probando la inserción de datos

jueves, 25 de octubre de 2012

Cómo conectar MySQL con NetBeans

Una vez que ya he creado la base de datos y todas las tablas, antes de poder almacenar los datos en las tablas debo establecer la conexión entre el servidor y el proyecto del NetBeans. 

Para poder llevar esto a cabo he seguido los siguientes pasos:

  • En primer lugar, he descargado los siguientes archivos:
    • com.mysql.jdbc_5.1.5.jar
    • mysql-connector-java-5.1.13-bin
  • Después he añadido los archivos descargados anteriormente a mi proyecto.
  • Finalmente, he añadido las siguientes líneas de código (adaptándolas lógicamente) para poder establecer la conexión entre la base de datos creada y mi proyecto:
Imagen 4: Cómo conectar la base de datos al proyecto


Las líneas de código anteriores permiten establecer la conexión con la base de datos (mediante la especificación de la url); realizar operaciones de insert, select, update,... y finalmente cerrar la conexión con la base de datos.

Referencias bibliográficas:


miércoles, 24 de octubre de 2012

Crear la base de datos

Una vez que ya tengo el diseño de cómo será la base de datos, el siguiente paso será crear la base de datos. Para poder llevar esto a cabo, voy a utilizar la aplicación XAMPP, un servidor local que contiene la base de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y Perl.

Imagen 3: Logotipo Xampp

Los pasos a seguir para instalar XAMPP son los siguientes:
Una vez creada la base de datos, he creado las tablas y atributos que había definido en el diseño de la base de datos.

Referencias bibliográficas:

http://www.apachefriends.org/es/xampp.html
http://joomla.deseoaprender.com/manuales/instalar-joomla-en-servidor-local/descargar-xampp.html


lunes, 22 de octubre de 2012

Diseño de la base de datos

Cómo me interesa almacenar los datos que vayan recogiendo, tanto el acelerómetro como el electrocardiograma, debo crear una base de datos. La base de datos tendrá la siguiente estructura (ver imagen2 MER):

Imagen 2: Modelo Entidad-Relación de la base de datos
  • Tabla PACIENTE. Esta tabla almacenará toda la información referente a los pacientes. Tendrá los siguientes atributos: 
    • Pac_codigo:  código autonumérico que se crea al dar de alta un nuevo paciente. Es la clave primaria de la tabla.
    • Pac_HIC: es el código de la historia clínica. También debe ser único.
    • Pac_nombre:  contiene el nombre de un paciente.
    • Pac_apellidos: contiene los dos apellidos de un paciente.
  • Tabla SHIMMER. En esta tabla se guarda la información propia de los sensores SHIMMER para saber qué paciente lo está utilizando y que datos está generando.  Tendrá los siguientes atributos: 
    • Shi_codigo: código autonumérico que se crea al dar de alta una nueva mota.  Es la clave primaria de la tabla.
    • Shi_PanID: identificador único de la mota dentro de la red.
    • Shi_estado: representa el estado de la mota (si está activa o inactiva)
    • Pac_codigo: establece qué paciente está utilizando la mota.
  • Tabla SHIMMER SENSOR. Esta tabla surge debido a la descomposición de la relación N-M que había entre SHIMMER y SENSOR (una mota shimmer puede tener N sensores, y un sensor puede pertenecer a más de una mota). Tiene los siguientes atributos:
    •  Shi_codigo: código autonumérico que se crea al dar de alta una nueva mota.  Es la clave primaria de la tabla.
    •  Sen_codigo:  código autonumérico que se crea al dar de alta un nuevo sensor. Es la clave primaria de la tabla.
  • Tabla SENSOR.  Esta tabla proporciona toda la información de los diferentes tipos de sensores que están siendo utilizados por una mota. La información que se almacena es:
    • Sen_codigo:  código autonumérico que se crea al dar de alta un nuevo sensor. Es la clave primaria de la tabla.
    • Sen_nombre: nombre del sensor.
    • Sen_Tsensor: tipo de sensor que se está utilizando.
    • Shi_codigo: establece qué mota tiene configurado dicho sensor.
  •  Tabla REGISTRO. En esta tabla se registrarán los datos que vayan recogiendo los sensores. Esta tabla contiene:
    • Reg_codigo: código autonumérico que se crea al registrar un nuevo valor de un sensor.
    • Reg_fechahora: fecha y hora en qué se registra el valor capturado por el sensor.
    • Sen_codigo: código del sensor que ha generado el valor registrado.
  • Tabla ELECTROCARDIOGRAMA. En esta tabla almacenamos los valores de los electrodos que se encuentran conectados al paciente. En nuestro caso tendremos las siguientes columnas:
    • Reg_codigo: código que permitirá relacionar los valores del electrocardiograma con la fecha y hora que se han registrado y el tipo de sensor que los ha capturado.
    • Mot_electrodo1: valores capturados por el primer electrodo.
    • Mot_electrodo2: valores capturados por el segundo electrodo. 
  • Tabla ACELEROMETRO. En esta tabla almacenamos los valores de los ejes X, Y y Z del acelerómetro que incorpora cada mota. Tendrá las siguientes columnas:
    •  Reg_codigo: código que permitirá relacionar los valores del acelerómetro con la fecha y hora que se han registrado y el tipo de sensor que los ha capturado.
    • Mot_eje_x: valores capturados por el eje X del acelerómetro.
    • Mot_eje_y: valores capturados por el eje Y del acelerómetro.
    • Mot_eje_z: valores capturados por el eje Z el acelerómetro.

miércoles, 17 de octubre de 2012

Análisis del electrocardiograma (ECG)

Para que el sistema sea capaz de detectar situaciones de riesgo o enfermedades en el electrocardiograma (ECG), lo primero que debo hacer es analizar el electrocardiograma para poder detectar posibles anomalías.
Imagen 1: Señal ideal de un ECG

Buscando en Internet, he encontrado la siguiente información referente al análisis del ECG:

  • Ritmo. Indica la estructura que sigue la actividad eléctrica del corazón. Las características del ritmo cardíaco normal son:
    1. Siempre debe haber una onda P antes de cada QRS.
    2. Los intervalos PR y RR deben ser regulares (variación menor del 15%). 
    3. El  intervalo PR debe estar entre 0.12 - 0.20 segundos.
    4. La onda P debe ser positiva en las derivaciones DI, DII y aVF y negativa en la derivación aVR.
  • Frecuencia cardíaca. Representa el número de contracciones del corazón o pulsaciones por unidad de tiempo (normalmente latidos/minuto). La frecuencia cardíaca debe estar entre: 60 - 100 lat/min.
  • Onda P.  Representa la despolarización auricular. Sus características son:
    1. La onda P debe tener una anchura de entre 60 y 100 milisegundos (sentido horizontal).
    2. La onda P debe tener una altura máxima de 0.25 mV (milivoltios).
    3. Debe ser positiva excepto en la derivación aVR.
    4. En el caso de la derivación V1 puede ser bifásica (positivo/negativo).
  • Intervalo PR.  Representa el tiempo que necesita el estímulo para difundirse a través de las aurículas y pasar a la unión AV. Sus características son:
    1. Debe tener una duración de entre 110 - 200 milisegundos (si la duración es mayor de 200 ms, indica bloqueo_AV, fiebre reumática o accion digitalica; y si la duración es menor de 110 ms, indica síndromes de preexcitación o PWP (Síndrome de Parkinson)).
  • Intervalo QRS. Representa la despolarización del miocardio ventricular. Sus características son:
    1. Debe tener una duración de 60 a 100 ms (si la duración es menor de 60 ms, indica hipertrofia ventricular y si la duración es mayor de 100 ms indica bloqueo de rama, bloqueos fasciculares o crecimiento de ventrículos).
  • Segmento ST. Indica el comienzo de la repolarización ventricular normal y es isoeléctrico. Sus características son:
    1. El inicio de este segmento es al final de la S.
    2. Puede estar elevado o deprimido menos de 1 mm (si la elevación es mayor de 1 mm, indica lesión subepicárdica, pericarditis aguda, hiperkalemia y puede ser normal en deportistas, vagotónicos y repolarización precoz; si la depresión es mayor de 1 mm, indica lesión subendocárdica, fármacos (digoxina, diuréticos) e hipokalemia).
  • Onda T. Indica repolarización ventricular. Sus características son:
    1. Ancho de 0.1 - 0.25 segundos.
    2. Normalmente es positiva en las derivaciones D1, D2, aVL, aVF, V2, V3, V4, V5 y V6
    3. Puede ser negativa en la derivación D3.
    4. T es negativa en la derivación aVR.
    5. Voltaje < 5 mm, en derivaciones de plano frontal
    6. Voltaje < 10 mm, en derivaciones de plano horizontal
    7. En pacientes con complejos QRS de muy alto voltaje, las ondas T pueden ser de hasta el 35 % del voltaje del complejo QRS.
  • Intervalo QT. Representa el fenómeno de despolarización y repolarización ventricular.Sus características son:
    1. La duración de este intervalo es de 320 - 440 ms (mujeres hasta 450 ms). Si la duración es mayor de 440 ms (ó 450 ms en el caso de las mujeres) esto puede deberse a: síndrome de QT largo adquirido, síndrome de QT largo congénito, hipokalemia o hipocalcemia. Si la duración es menor de 320 ms puede deberse a: síndrome de QT corto, intoxicación con digoxina,  hiperkalemia o hipercalcemia

Referencias bibliográficas:

http://www.slideshare.net/barreneche_ucc/ekg-normal
http://www.slideshare.net/rajorge/semiologia-del-ekg-presentation
http://es.wikipedia.org/wiki/Electrocardiograma
http://med.javeriana.edu.co/fisiologia/nguias/ekgall.htm


Mi primera entrada

Hola, esta es mi primera entrada de mi blog. En dicho blog voy a ir publicando los avances que vaya realizando en mi proyecto. Tal y como indica el título del blog, este proyecto consiste en un sistema que permitirá a las personas con enfermedades cardiovasculares ser monitorizadas desde su domicilio particular. Además, también el sistema podrá detectar aquellas situaciones en las que la persona sufra una caída. Finalmente, si el sistema detecta que en un momento determinado la salud del paciente está en peligro, podrá avisar automáticamente a su cardiólogo, al servicio de urgencias del hospital, a una ambulancia, ... en función de la gravedad de la situación.