Unidad central de domótica
3.4. Diseño de la aplicación en Android para el Smartphone
3.4.1. Funcionamiento de la aplicación Android
El funcionamiento principal de la aplicación tiene lugar cuando el usuario se encuentra en la actividad que permite recibir nuevos datos. En esta actividad el hilo principal de Android se encarga de leer los datos que el dispositivo portable envía a través de una característica de un servicio ofrecido por el dispositivo. Los datos, como ya se comentó en el apartado del software del dispositivo, son enviados en paquetes de 20 bytes. Cuando la aplicación recibe un nuevo paquete, lo añade a un buffer de entrada. Se continúa añadiendo nuevos datos hasta que se han añadido 20 paquetes, es decir, hasta que el buffer llena sus 200 bytes. Recuerde el lector que cada valor del ECG está codificado en 2 bytes. Además, dado que el periodo de muestreo es de 5 ms, se obtiene que el buffer de entrada se completa cada medio segundo.
Una vez que el buffer de entrada se encuentra completo, se inicia una tarea asíncrona con la función de Android AsyncTask. Esta tarea se trata de un hilo de que se ejecuta en segundo plano y paralelamente con el hilo principal. La tarea toma como parámetro una copia del buffer de entrada para su procesamiento. El hecho de realizar el procesamiento de datos en segundo plano evita el bloqueo de la ejecución del hilo principal. De este modo, se puede realizar el procesado de datos de forma simultánea junto a la recogida de los siguientes datos que envía el dispositivo portable.
La utilización de hilos secundarios es una buena herramienta para la realización de cálculos pesados. Sin embargo, los hilos secundarios tienen una limitación. Sólo el hilo principal puede modificar la interfaz gráfica; es decir, un hilo secundario podrá realizar el procesamiento de datos; pero sólo el hilo principal podrá mostrar los resultados al usurario. Es por ello, que la clase AsyncTask permite, una vez finalizados los cálculos del hilo secundario, ejecutar las funciones que muestran los resultados directamente sobre el hilo principal de la aplicación.
La Ilustración 33 representa de forma esquemática el flujo de ejecución del hilo principal de la aplicación.
3 diseño de la solución
42 42
El hilo secundario, creado cada vez que se completa el buffer de entrada; es decir, cada medio segundo, es el encargado del procesamiento de los datos del ECG. Para el procesamiento de los datos se definió una clase en java llamada potasio.java. Esta clase contiene todos los métodos y variables que permiten el procesamiento de los datos recibidos.
El hilo secundario consiste en un gran bucle en el que se procesan los datos de uno en uno y en orden, tal y como si hubieran sido leídos por el propio Smartphone, siguiendo el flujo descrito en la Ilustración 34. En primer lugar, se acondiciona los datos que se encuentran en bruto, para poder realizar los cálculos del nivel de potasio. Para ello, se realiza la conversión del dato de bytes a su valor entero correspondiente. Seguidamente, el dato es filtrado por un filtro de media que utiliza los tres valores anteriores, con el fin de suavizar la señal.
Una vez obtenido el valor del ECG, el primer paso consiste en calcular la línea base. Dicha línea consiste en un valor de referencia que estará cercano al valor cero del electrocardiograma. Este valor de referencia permitirá posteriormente determinar el valor máximo del ECG. es decir, el pico de la curva R. La necesidad de la línea base se halla en el problema conocido como baseline wander, es decir, la línea base caminante, que provoca que la referencia del electrocardiograma no se sitúe siempre entorno al mismo valor [29]. Además, se debe recordar que el valor medio del amplificador operacional es ajustado con el potenciómetro del dispositivo, por lo que no se puede asegurar un valor constante en todo momento.
43
Tras la obtención del valor de la línea base, se comprobará si el dato del ECG corresponde con un pulso. Si este fuera el caso, se calcula las pulsaciones y se configuran los parámetros para la búsqueda del valor máximo y del final de la curva T. Estos parámetros, como se profundizará más adelante, dependen de las pulsaciones cardíacas del paciente.
Una vez que la ventana de búsqueda de los parámetros de la curva T llega a su fin, se calcula la pendiente de la curva T y se establece el nivel de potasio. Los datos, tanto del ECG como de las pulsaciones, los parámetros para la búsqueda de la onda T y los resultados de la búsqueda son guardados en columnas del documento de texto. De este modo, se podrán volver a graficar en un futuro o se podrán interpretar posteriormente en MatLab. Cuando se han procesado todos los datos, el hilo secundario es eliminado y los resultados de los cálculos son mostrados por el hilo principal. En este momento, se actualiza la gráfica y se muestran los valores de pulsaciones cardíacas y de potasio.