Proyecto Fin de Carrera - Universidad de...
Transcript of Proyecto Fin de Carrera - Universidad de...
1
Equation Chapter 1 Section 1
Proyecto Fin de Carrera
Ingeniería de Telecomunicación
Uso de sensores ANT+ en aplicación de
entrenamiento personalizado
Autor: Juan F. Coronel Maraver
Tutor: Teresa Ariza Gómez
Departamento de Ingeniería Telemática Escuela
Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
3
Proyecto Fin de Carrera
Ingeniería de Telecomunicación
Uso de sensores ANT+ en aplicación de
entrenamiento personalizado
Autor:
Juan F. Coronel Maraver
Tutor:
Teresa Ariza Gómez
Profesor titular
Departamento de Ingeniería Telemática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
4
5
Proyecto Fin de Carrera: Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Autor: Juan F. Coronel Maraver
Tutor: Teresa Ariza Gómez
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2017
El Secretario del Tribunal
6
7
A mi novia, familia y amigos.
8
9
Índice
Índice 9
Índice de Tablas 11
Índice de Figuras 12
1 Introducción 15 1.1 Objetivos 15 1.2 Motivación 15 1.3 Punto de partida 16 1.4 Arquitectura de la Aplicación 16 1.5 Estructura de la Memoria 17
2 Tecnologías y entornos de trabajo 18 2.1 Android 18
2.1.1 ¿Qué es Android? 18 2.1.2 Arquitectura 18 2.1.3 Cuota de Mercado 20
2.2 Eclipse 20 2.3 Android SDK 22 2.4 Android ADT 23 2.5 ANT y ANT+ 25
2.5.1 Protocolo ANT 26 2.5.2 Simulación ANT+ 29 2.5.3 Desarrollo ANT+ 34
2.6 SQLite 34 2.7 GraphView 35 2.8 Git y Gitlab 36
2.8.1 Configurar Gitlab 37 2.9 Google Play Services 41
2.9.1 Creation de una API-KEY 42
3 Persistencia de datos 46 3.1 Estructura de la base de datos 46
3.1.1 IdRuta 46 3.1.2 Carrera 47 3.1.3 Bicicleta 47 3.1.4 Pulsómetro 48 3.1.5 GPS 49
3.2 Código y clases 49 3.2.1 AtletaReaderDbHelper.java 49 3.2.2 DataSource.java 49 3.2.3 CursorToModel.java 50
4 Estructura y código 52 4.1 Estructura del código de una aplicación Android 52
10
4.2 Código 53 4.2.1 Carpeta src 53 4.2.2 Directorio res 60 4.2.3 Directorio lib 61 4.2.4 Android Manifest 62
5 Manual de Usuario 63 5.1 Manual de usuario 64
5.1.1 Carrera 65 5.1.2 Bicicleta 67 5.1.3 Pulsómetro 69 5.1.4 Gráfico 71 5.1.5 GPS 72
6 Conclusiones 75 6.1 Puntos de mejora 75
Bibliografía 76
Anexo A: Código Java y xml 78 test.DroidLogin.sqlite 78 test.DroidLogin.bicicleta 87 test.DroidLogin.carrera 96 test.DroidLogin.gps 101 test.DroidLogin.grafico 107 test.DroidLogin.pulsometro 112 test.DroidLogin.utils 121 Layout 122
11
ÍNDICE DE TABLAS
Tabla 2-1: Últimas versiones de Eclipse 21
12
ÍNDICE DE FIGURAS
Figura 1-1: Arquitectura de la aplicación 17
Figura 2-1: Arquitectura de Android 19
Figura 2-2: Cuota de Mercado de móviles 20
Figura 2-3: Descarga de eclipse 21
Figura 2-4: Aplicación de desarrollo Eclipse 22
Figura 2-5 : Instalación Paquetes SDK 23
Figura 2-6: Instalación de ADT en Eclipse 24
Figura 2-7: Asociación Eclipse, SDK y ADT 25
Figura 2-8: Topologías de Red 26
Figura 2-9: Nodos del protocolo ANT 27
Figura 2-10: Canales de comunicación 27
Figura 2-11: Formato del mensaje ANT 28
Figura 2-12: Emparejamientos 29
Figura 2-13: Esquema de uso de los dos USB ANT+ 29
Figura 2-14: Web de descargas de ANT+ 30
Figura 2-15: ANT Android Emulation Bridge Tool 30
Figura 2-16: Aplicación Android Emulation tool en modo de escucha 31
Figura 2-17: Elección del USB ANT+ 31
Figura 2-18: Elección del Perfil Simulant 31
Figura 2-19: Salida de mensajes Simulant 32
Figura 2-20: ANT Radio Service 32
Figura 2-21: ANT Plus Plugin 33
Figura 2-22: Configuración ANT Emulator 33
Figura 2-23: Estado conexión ANT Android Emulator Bridge 34
Figura 2-24: Librería ANT importada al proyecto 34
Figura 2-25: Icono de SQLite 35
Figura 2-26: Librería GraphView 36
Figura 2-27: Icono de Gitlab 36
Figura 2-28: Gitlab Nuevo proyecto. 37
Figura 2-29: Añadir Key SSH en Gitlab 38
Figura 2-30: EGit Eclipse Marketplace 39
Figura 2-31: Configurar clave SSH en Eclipse 39
Figura 2-32: Url del repositorio Gitlab 39
13
Figura 2-33: Clonar repositorio Git 40
Figura 2-34: Compartir proyecto en Eclipse 40
Figura 2-35: Configuración del repositorio Git 40
Figura 2-36: Commit and Push 41
Figura 2-37: SDK Manager Google Play Services 41
Figura 2-38: Añadir librería Google Play Services al proyecto 42
Figura 2-39: Certificado de depuración 43
Figura 2-40: Creación de proyecto en la consola Google API 43
Figura 2-41: Habilitar Google Maps API 43
Figura 2-42: Creación API Key 1 44
Figura 2-43: Creación API Key 2 44
Figura 2-44: Creación API Key 3 44
Figura 2-45: API Key en el fichero AndroidManifest.xml 45
Figura 3-1: Ejemplo de registros en la tabla idRuta 47
Figura 3-2: Ejemplo de registros en la tabla carrera 47
Figura 3-3: Ejemplo de registros en la tabla bicicleta 48
Figura 3-4: Ejemplo de registros en la tabla pulsómetro 49
Figura 3-5: Ejemplo de registros en la tabla GPS 49
Figura 3-6: Código para creación de la tabla 50
Figura 3-7: Código para el guardado de registros en una de las tablas 50
Figura 3-8: Código para recoger los datos de una de las tablas 50
Figura 3-9: Código para el borrado de todos los registros de una de las tablas 50
Figura 3-10: Código del método get para la tabla carrera 51
Figura 3-11: Código del método insert para la tabla carrera 51
Figura 4-1: Activity Carrera 54
Figura 4-2: Código de conexión con el sensor 54
Figura 4-3: Código para establecer una alarma 55
Figura 4-4: Activity pulsómetro 56
Figura 4-5: Código para la carga de los combos 57
Figura 4-6: Código para añadir elementos al gráfico 58
Figura 4-7: Código del botón para acceder al mapa 58
Figura 4-8: Código para configurar la alarma dentro de la clase MyReceiver 59
Figura 4-9: Código de conversión de tiempo 60
Figura 4-10: Estructura del layout 61
Figura 4-11: Permisos necesarios para la aplicación 62
Figura 5-1: Pantalla después del login 64
Figura 5-2: Pantalla de selección del entrenamiento 64
Figura 5-3: Búsqueda del sensor para el modo carrera 65
14
Figura 5-4: Guardar el sensor de carrera en la lista de favoritos 65
Figura 5-5: Pantalla modo carrera 66
Figura 5-6: Mensajes para la grabación de datos 66
Figura 5-7: Mensaje de aviso para activar el GPS 67
Figura 5-8: Búsqueda del sensor para el modo bicicleta 67
Figura 5-9: Guardar el sensor de bicicleta en la lista de favoritos 68
Figura 5-10: Pantalla modo bicicleta 68
Figura 5-11: Mensajes para la grabación de datos 69
Figura 5-12: Mensaje de aviso para activar el GPS 69
Figura 5-13: Pantalla modo pulsómetro 70
Figura 5-14: Mensajes para la grabación de datos 70
Figura 5-15: Mensaje de aviso para activar el GPS 71
Figura 5-16: Botón para acceder al gráfico 71
Figura 5-17: Pantalla para mostrar los gráficos 72
Figura 5-18: Botón para acceder a la pantalla que muestra el mapa 72
Figura 5-19: Pantalla de selección de ejercicio 73
Figura 5-20: Pantalla de mapa 74
Figura 5-21: Detalle de la ubicación 74
15
1 INTRODUCCIÓN
l presente documento recoge toda la información del desarrollo llevado a cabo para el proyecto final de
carrera, consistente en añadir distintas funcionalidades a una aplicación de entrenamiento personal para
dispositivos Android. Principalmente se le sumará a la aplicación la posibilidad de recoger en tiempo
real y guardar la información de distintos sensores que usan la tecnología ANT+ y el GPS integrado en el
móvil.
1.1 Objetivos
El principal objetivo del proyecto es que el usuario pueda conocer “en directo” y guardar en el dispositivo
Android distintas informaciones útiles a la hora de la realización de un ejercicio físico. Así como la posibilidad
de poder consultarla en cualquier momento.
Para ello se le ha añadido a una aplicación Android de entrenamiento personalizado realizado por otro
compañero la posibilidad de:
Recoger y guardar información de un sensor ANT + de ritmo cardiaco.
Recoger y guardar información de un sensor ANT+ de paso y distancia.
Recoger y guardar información de un sensor ANT+ para el uso de la bicicleta.
Recoger y guardar la ubicación del atleta durante el ejercicio.
1.2 Motivación
A nivel personal, el objetivo del proyecto es poder profundizar en distintas tecnologías para la transferencia de
información entre dispositivos, mejorar y ampliar conocimientos a nivel de programación y aprender a realizar
proyectos de mayor magnitud a los realizados durante el transcurso de la carrera.
E
-
Introducción
16
Siempre he tenido gran interés por todo lo relacionado con la programación por tanto hacer una aplicación
Android junto con el uso de la transferencia de información, que es la base de la Ingeniería de
Telecomunicaciones, me pareció una idea muy interesante.
Ya que el uso de los dispositivos móviles va en aumento, el realizar una aplicación Android me puede ser una
gran oportunidad de aprender una de las tecnologías de futuro, o ya presente, la cual puede abrir nuevas
oportunidades en el mundo laboral.
Respecto a ANT+, es una tecnología que va creciendo y podría tener gran importancia en el futuro debido a su
bajo consumo de energía, escalabilidad y eficiencia. Debido a que desconocía de su existencia el usarlo en el
proyecto fin de carrera es una buena forma de conocerla y aprender su funcionamiento.
1.3 Punto de partida
Como se ha indicado anteriormente, la finalidad del proyecto es añadir funcionalidades a una aplicación
Android de entrenamiento personal, la cual ha sido realizada por el compañero Antonio José Díaz Lora en el
departamento de Ingeniería Telemática.
Con ella el usuario podía realizar distintos ejercicios físicos de manera remota y autónoma siguiendo las
indicaciones mostradas en el móvil mediante explicaciones y videos.
1.4 Arquitectura de la Aplicación
Se va a definir la arquitectura de la aplicación teniendo sólo en cuenta las nuevas funcionalidades incluidas.
Podemos diferenciar tres partes fundamentales para el funcionamiento correcto de las nuevas funcionalidades
de la aplicación.
Sensores ANT+ y GPS: Encargados de recoger la información de los distintos sensores y transmitirla
hacia el móvil y cualquier otro dispositivo Android.
Dispositivo Android: Dispositivo en el cual va a estar instalada nuestra aplicación.
Base de datos SQLite: En ella se guarda la información necesaria. Este tipo de bases de datos se
almacena en la memoria local del dispositivo.
La siguiente figura representa cómo es básicamente la arquitectura de la aplicación realizada.
17
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 1-1: Arquitectura de la aplicación
1.5 Estructura de la Memoria
La memoria del Proyecto principalmente se divide en seis capítulos y un anexo. Se van a detallar a
continuación:
Capítulo 1- Introducción: Resumen del contenido del proyecto, objetivos, estructura de la memoria,
arquitectura....
Capítulo 2 - Tecnologías y entornos de trabajo: En este capítulo se explica las tecnologías que se han
usado para el desarrollo del proyecto así como la configuración del para poder realizarlo.
Capítulo 3 - Persistencia de datos: Se explica cómo se ha realizado el guardado de los datos, estructura
de la base de datos usada y las clases java usadas para ello.
Capítulo 4 - Estructura y código: En este capítulo se detallan las partes más importantes del código.
Capítulo 5 - Manual de usuario: Se indican todas las instrucciones que el usuario necesita para poder
usar la aplicación.
Capítulo 6 - Conclusiones
Anexo A : Código Java y xml
18
2 TECNOLOGÍAS Y ENTORNOS DE TRABAJO
n este capítulo se va a explicar la configuración del entorno de trabajo que se ha utilizado para la
realización del proyecto. Se detallará cómo configurar el equipo para el correcto funcionamiento y se
realizará un breve resumen de las tecnologías usadas razonando el porqué de su utilización.
2.1 Android
2.1.1 ¿Qué es Android?
Android es una plataforma de desarrollo libre, y de código abierto. El núcleo del sistema está basado en un
Linux al que se le han hecho ciertas modificaciones para que pueda ejecutarse en teléfonos y terminales
móviles.
Las modificaciones se han realizado para adaptarlo a los menores recursos de los dispositivos móviles, que,
aunque cada vez son más potentes, no dejan de tener menos recursos que un ordenador de sobremesa. El
hecho de ser gratuito y de código abierto, hace que los fabricantes de móviles puedan usarlo en sus nuevos
terminales sin pagar licencias de uso, lo que abarata el precio final de venta al público y además pueden, sin
ningún impedimento legal, ajustar aspectos que no cuadren con las expectativas de los clientes ya que
cualquiera puede acceder a todo el código, modificarlo y distribuirlo nuevamente.
Android posee una gran cantidad de servicios disponibles (base de datos, lectores de códigos de barras, mapas
para el GPS) y todo esto sin tener que instalar librerías externas ni hacer configuraciones complejas. Los
terminales poseen también gran variedad de sensores que permiten tener conocimiento del entorno que les
rodea y así poder acceder a la información para saber la temperatura del dispositivo o su ubicación.
2.1.2 Arquitectura
Como se muestra en la figura 2-1, los componentes principales del sistema operativo de Android son los
siguientes:
E
-
19
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Aplicaciones: las aplicaciones base incluyen un cliente de correo electrónico, programa de SMS,
calendario, mapas, navegador, contactos y otros. Todas las aplicaciones están escritas en lenguaje de
programación Java.
Marco de trabajo de aplicaciones: los desarrolladores tienen acceso completo a los mismos APIs
del framework usados por las aplicaciones base. La arquitectura está diseñada para simplificar la
reutilización de componentes; cualquier aplicación puede publicar sus capacidades y cualquier otra
aplicación puede luego hacer uso de esas capacidades (sujeto a reglas de seguridad del framework).
Este mismo mecanismo permite que los componentes sean reemplazados por el usuario.
Bibliotecas: Android incluye un conjunto de bibliotecas de C/C++ usadas por varios componentes del
sistema. Estas características se exponen a los desarrolladores a través del marco de trabajo de
aplicaciones de Android; algunas son: System C library (implementación biblioteca C estándar),
bibliotecas de medios, bibliotecas de gráficos, 3D y SQLite, entre otras.
Runtime de Android: Android incluye un set de bibliotecas base que proporcionan la mayor parte de
las funciones disponibles en las bibliotecas base del lenguaje Java. Cada aplicación Android corre su
propio proceso, con su propia instancia de la máquina virtual Dalvik. Dalvik ha sido escrito de forma
que un dispositivo puede correr múltiples máquinas virtuales de forma eficiente. Dalvik ejecutaba
hasta la versión 5.0 archivos en el formato Dalvik Executable (.dex), el cual está optimizado para
memoria mínima. La Máquina Virtual está basada en registros y corre clases compiladas por el
compilador de Java que han sido transformadas al formato.dex por la herramienta incluida "dx".
Desde la versión 5.0 utiliza el ART, que compila totalmente al momento de instalación de la
aplicación.
Núcleo Linux: Android depende de Linux para los servicios base del sistema como seguridad,
gestión de memoria, gestión de procesos, pila de red y modelo de controladores. El núcleo también
actúa como una capa de abstracción entre el hardware y el resto de la pila de software.
Figura 2-1: Arquitectura de Android
Tecnologías y entornos de trabajo
20
2.1.3 Cuota de Mercado
Según el análisis de empresa Kantar Worldpanel la cuota de mercado de Android alcanzó en el periodo que va
de febrero a abril de 2016 su cuota de mercado más alta desde que se tienen datos, alcanzando los 93,9% de
los nuevos smartphones vendidos en dicho periodo al subir más de 5 puntos respecto al año anterior.
Actualmente en abril del 2017 la cuota de mercado se sitúa en el 92,0% Apple, por su parte, posee un 7,5% del
mercado y Windows prácticamente desaparece al conseguir un exiguo 0,6%.
Este dato, una cuota de mercado del 92% en abril del presente año, sumado a que Android es una plataforma
de código libre, y desde el punto de vista de un desarrollador, es más sencillo desarrollar una aplicación sin
necesidad de licencia al contrario que otros sistemas como IOS, hacen que se haya optado, entre muchas otras
razones comentadas anteriormente, por Android para el desarrollo de la aplicación.
Figura 2-2: Cuota de Mercado de móviles
2.2 Eclipse
Una vez que ya se ha optado por Android para el desarrollo de nuestra aplicación hay que elegir el programa
de desarrollo para programarlo. La principal razón de elegir Eclipse frente a otros programas ha sido el
conocimiento y experiencia previa.
Eclipse es una plataforma de software compuesto por un conjunto de herramientas de programación de código
abierto multiplataforma para desarrollar aplicaciones de cliente enriquecido.
De entre todas las versiones de Eclipse, se ha utilizado Eclipse Luna y más concretamente Eclipse IDE for
Java EE Developers.
21
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Versión Fecha Versión de la plataforma
Neon 22/06/2016 4.6
Mars 24/06/2015 4.5
Luna 25/06/2014 4.4
Kepler 26/06/2013 4.3
Juno 27/06/2012 4.2
Tabla 2-1: Últimas versiones de Eclipse
Tras elegir la versión de eclipse a instalar, hay que dirigirse a su página web https://eclipse.org y descargar el
instalador, en nuestro caso se ha optado por “Eclipse IDE for Java Developers” como muestra la figura.
Figura 2-3: Descarga de eclipse
Ahora únicamente hay que ejecutar el instalador y ya tendríamos instalado eclipse en nuestro ordenador.
Tecnologías y entornos de trabajo
22
2.3 Android SDK
Android SDK son las siglas de Android Software Development Kit. Es un kit de desarrollo con el que es
posible desde desarrollar aplicaciones hasta ejecutar un emulador del sistema android en la versión que se
desee. Las principales herramientas que posee son:
Depurador de código.
Biblioteca.
Simulador de teléfono basado en QEMU.
Documentación, ejemplos de código y tutoriales.
Para realizar la instalación inicialmente se descarga el SDK de Android en la siguiente dirección:
http://developer.android.com/sdk/index.html
Una vez que se ha descargado e instalado, se ejecuta el SDK Manager.En el cual, tras un tiempo de espera,
aparecerá una serie de paquetes a instalar, algunos paquetes ya aparecerán marcados por defecto. Aunque
existen versiones más modernas, se seleccionará Android 5.0.1 (API 21) porque es la que se ha decidido usar
en el proyecto debido a que el emulador de Android la ejecuta en el ordenador de una manera fluida.
Figura 2-4: Aplicación de desarrollo Eclipse
23
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 2-5 : Instalación Paquetes SDK
Tras pulsar en “Install N packages” habrá que aceptar todas las condiciones, pulsar ‘Install’ y tras un tiempo,
debido a que se tienen que descargar varios paquetes, Android SDK se habrá instalado.
2.4 Android ADT
Android posee un plugin personalizado para el IDE de Eclipse, llamado Android Development Tools (ADT).
Este plugin sirve de gran ayuda a la hora de programar en Android.
Como muestra la figura 2-6, para instalar Android ADT hay que seleccionar en el menú superior Help > Install
New Software y pulsar en el botón Add, poner un nombre y en url se escribe la siguiente dirección.
https://dl-ssl.google.com/android/eclipse/
Tras pulsar OK, aparecerá el software Developer Tools, se selecciona y se hace click en Next varias veces,
luego se acepta las condiciones, y se descargará e instalará el ADT para el Eclipse. Tras esto nos solicitará que
reniciemos el Eclipse, pulsamos “Restart Now” y Eclipse se reiniciará.
Tecnologías y entornos de trabajo
24
Figura 2-6: Instalación de ADT en Eclipse
Una vez reiniciado el Eclipse nos aparecerá un mensaje en el cual nos solicitará que instalemos Android SDK,
pero ya se ha instalado previamente, por lo tanto, sólo hay que asociarlo de la forma que se aprecia en la
siguiente figura.
25
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
2.5 ANT y ANT+
ANT es un protocolo de red de sensores inalámbricos que funciona en la banda ISM de 2,4 GHz. Diseñado
para uso ultra bajo de energía, facilidad de uso, eficiencia y escalabilidad, ANT maneja fácilmente topologías
peer-to-peer, estrella, conectado en estrella, árbol y topologías de malla fija. Proporciona comunicaciones de
datos fiables, el funcionamiento en red flexible y adaptativa y la inmunidad de diafonía. El apilado del
protocolo ANT es extremadamente compacto, requiere un mínimo de recursos del microcontrolador y reduce
considerablemente los costes del sistema.
Proporciona un manejo sin preocupaciones de las capas física, de red y de transporte OSI. Además, incorpora
características clave de seguridad de bajo nivel que forman la base para las implementaciones de seguridad de
red sofisticada definidas por el usuario. Asegura un control de usuario adecuado, mientras que aligera
considerablemente la carga computacional en el suministro de una solución de red inalámbrica sencilla y
eficaz.
Dentro del modelo OSI, ANT es el protocolo que cubre las capas físicas, enlace de datos, red y transporte
(incluida la seguridad de bajo nivel) y ANT+ es la tecnología que da la funcionalidad de sesión, presentación y
aplicación. ANT está orientado al transporte de datos y ANT+ a la manipulación de los mismos facilitando la
interoperabilidad; ANT+ hace que se entiendan los dispositivos unidos en una red ANT.
Fue desarrollado por la compañía canadiense Dynastream Innovations Inc que fue comprada por Garmin en el
año 2006. Dicha compañía lidera el consorcio ANT+ Alliance que se encarga del desarrollo (especificaciones,
certificaciones, etc.) de la tecnología ANT+.
ANT + es un conjunto de definiciones que representan la información enviada a través de ANT. Estas
definiciones se llaman perfiles de dispositivo y por lo general están vinculados a un caso de uso específico. Por
Figura 2-7: Asociación Eclipse, SDK y ADT
Tecnologías y entornos de trabajo
26
ejemplo, un monitor de ritmo cardíaco enviará información sobre el ritmo cardíaco que se define en el perfil
ANT + correspondiente para el monitor de ritmo cardíaco. Estos perfiles de dispositivos se comparten entre
todos los adaptadores ANT+, así permite a cualquier adaptador ANT + crear un monitor de ritmo cardíaco o
un receptor monitor de ritmo cardíaco que operará de manera intercambiable con los otros. Cuando un
dispositivo tiene la marca ANT + significa que ha sido certificado para interoperar con otros dispositivos de
marca ANT +.
2.5.1 Protocolo ANT
2.5.1.1 Topologías de Red
El protocolo ANT ha sido diseñado desde cero para soportar una gran variedad de topologías de red
escalables. Puede ser tan simple como una conexión unidireccional de dos nodos, o tan complejo como un
sistema de múltiples transceptores(Tx/Rx) con capacidad de comunicación completos de punto a multipunto.
Figura 2-8: Topologías de Red
2.5.1.2 Nodos
Cada nodo en una red ANT consiste en un motor de protocolo ANT y un controlador principal (MCU). El
motor ANT encapsula la complejidad del establecimiento y mantenimiento de las conexiones ANT y el
funcionamiento del canal dentro de su firmware. El controlador es por lo tanto libre para manejar los datos de
una aplicación con sólo una carga en el inicio de las comunicaciones ANT para otros nodos, esto lo hace a
través de una sencilla interfaz en serie entre el host y el motor ANT.
27
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
2.5.1.3 Canales de Comunicación
La comunicación entre nodos ANT se lleva a cabo de diferentes maneras dependiendo de varios factores, tipo
de canal, configuración, tipo de datos, dirección de la información. La mayoría de las implementaciones ANT
utilizan canales síncronos, independientes y bidireccionales. Cuando un nodo principal abre un canal síncrono,
el nodo maestro realiza una búsqueda para comprobar que su transmisión no interfiera con la transmisión de
otro dispositivo, y a continuación, transmite los mensajes en el período designado de canal. En otras palabras,
una vez que se abre el canal, un dispositivo maestro siempre transmite un mensaje en cada intervalo de tiempo
de canal (Tch).
Figura 2-10: Canales de comunicación
Al utilizar canales bidireccionales, el dispositivo maestro mantiene su receptor de radio por un corto tiempo
después de que haya transmitido cada mensaje. Esto permite que el esclavo, opcionalmente, enviar datos al
maestro inmediatamente después de que haya recibido un mensaje.
Los tipos de datos determinan la forma en que los datos serán enviados entre los dos nodos de un canal ANT.
Hay cuatro tipos de datos:
Difusión
Reconocimiento.
Ráfagas
Figura 2-9: Nodos del protocolo ANT
Tecnologías y entornos de trabajo
28
Ráfagas avanzadas.
Cada vez que la aplicación host envía un mensaje de datos a ANT para la transmisión especifica el tipo de los
datos junto con los datos del mensaje. Los mensajes de datos se transfieren entre los nodos en una de dos
direcciones:
Dirección de avance (Master -> Esclavo)
Dirección Inversa (Esclavo -> maestro)
Todos los tipos de datos se pueden transmitir en ambas direcciones, excepto a través de canales de sólo
transmisión o recepción.
2.5.1.4 Estructura del mensaje
Un mensaje típico del protocolo ANT tiene el siguiente formato:
Figura 2-11: Formato del mensaje ANT
Cada mensaje comienza con un bit de sincronización y termina con un checksum. El bit menos significativo
es el que se envía primero.
Byte 0 (1 Byte): Sincronización.
Byte 1 (1 Byte): Indica la longitud del mensaje en número de bytes.
Byte 2 (1 Byte): Identificador del tipo de datos que se va a enviar.
0 inválido
[1,255] tipo de datos válidos.
Byte 3..N+2 (N Bytes) : Contenido del mensaje.
Byte N+3: CheckSum, sirve para detectar cambios accidentales en una secuencia de datos.
2.5.1.5 Emparejamientos
El acto de emparejamiento de dos dispositivos (maestro con esclavo) implica el establecimiento de una
relación entre dos nodos que desean comunicarse entre sí. Esta relación puede ser permanente,
semipermanente o transitorio.
Una operación de emparejamiento consiste en que un dispositivo esclavo adquiere el ID del canal del
dispositivo maestro. Si se desea vinculación permanente, el nodo esclavo debe guardar la identificación del
maestro en memoria. Este ID se utilizará entonces para abrir un canal con esta identificación en todas las
sesiones de comunicación posteriores.
En relación semipermanente, el apareamiento dura el tiempo que se mantiene el canal. Una vez que termina el
tiempo de espera, se pierde el emparejamiento.
29
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
En transitoria, el emparejamiento es temporal - durante el tiempo que se necesita para obtener algunos datos.
Si un maestro utiliza sólo la difusión de mensajes, o si se utiliza la función de canal compartido, varios
esclavos pueden vincular y comunicarse con el mismo maestro. A continuación, se puede ver un ejemplo de
tres sensores de temperatura que son maestros y una unidad base que funciona como esclavo.
Figura 2-12: Emparejamientos
2.5.2 Simulación ANT+
Para realizar el desarrollo de la aplicación Android y poder simular los distintos sensores ANT+ se han
empleado dos usb ANT+ y varias aplicaciones para Windows y Android que se detallarán a continuación.
2.5.2.1 USB ANT+
Como puede verse en la figura 2-13, se han usado dos USB ANT+, uno funciona como emisor, con él se
emula los sensores que se han añadido a la aplicación (pulsómetro, sensor para bicicleta y sensor para carrera)
y el otro que le otorga a nuestro ordenador la posibilidad de entender los sensores ANT+, y funciona como
receptor.
Figura 2-13: Esquema de uso de los dos USB ANT+
Tecnologías y entornos de trabajo
30
2.5.2.2 Aplicaciones Windows
ANT Android Emulation Bridge Tool
Con esta aplicación se consigue que el simulador de Android tenga la funcionalidad de ANT+, así se
podrá depurar la aplicación desde el ordenador.
Para su instalación, se descarga desde la web oficial de ANT+. Véase la figura 2-14.
https://www.thisisant.com/developer/resources/downloads/
Figura 2-14: Web de descargas de ANT+
Una vez descargado e instalado, se conectan los dos USB ANT+, se ejecuta la aplicación y se obtiene
la siguiente pantalla.
Figura 2-15: ANT Android Emulation Bridge Tool
31
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Se puede configurar el puerto por el cual se conectarán, en este caso mantendremos el que viene por
defecto, 9650. Luego se selecciona uno de los dos USB y se pulsa “Connect to USB”. Tras eso se
aprecia que la aplicación se mantiene escuchando hasta que detecte que se ha ejecutado la aplicación
correspondiente en el simulador Android, concretamente Ant Emulator Config, que se detallará
posteriormente cuando se hable de las aplicaciones Android necesarias.
Figura 2-16: Aplicación Android Emulation tool en modo de escucha
Simulant ANT+
Este software se utiliza para simular los distintos sensores ANT+. Al igual que la otra aplicación se
descarga desde la web oficial.
https://www.thisisant.com/developer/resources/downloads/
Como se aprecia en la siguiente imagen, una vez iniciada hay que elegir el USB que se va a usar, en
este caso sólo aparece uno, ya que el otro está ya conectado al Android Emulation Bridge.
Figura 2-17: Elección del USB ANT+
Se pulsa sobre “Add Simutator” y se elige el perfil que se desea simular. En este caso se ha simulado
el pulsómetro.
Figura 2-18: Elección del Perfil Simulant
Tecnologías y entornos de trabajo
32
Una vez elegido, podremos ver las propiedades del script cargado por defecto, en este caso para el
pulsómetro. Estas propiedades pueden ser modificadas durante la ejecución. Tras pulsar en “Turn
On” se puede ver los mensajes ANT que se están enviando en la pestaña Output.
Figura 2-19: Salida de mensajes Simulant
2.5.2.3 Aplicaciones Android
ANT Radio Service
Se descarga desde Play Store de Android y sirve para añadir la funcionalidad ANT+ al simulador
Android. En caso de que se vaya a usar en un dispositivo que tiene la tecnología ANT+, este service
vendrá preinstalado en el teléfono.
Figura 2-20: ANT Radio Service
33
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
ANT Plus Plugin
Al igual que la aplicación anterior, es posible descargarla desde Play Store de Android y se usa para
gestionar los distintos dispositivos ANT+ vinculados al teléfono.
Figura 2-21: ANT Plus Plugin
ANT Emulator Configuration
Se usa para la comunicación entre ANT Android Emulation Bridge Tool de Windows con el
simulador Android. Se descarga desde la web ofcicial de ANT, una vez instalado en el simulador
Android se ejecuta y se configura con la IP de nuestro ordenador, así como con el puerto, que debe
coincidir con el puerto que se haya seleccionado en la aplicación Windows, en este caso el puerto
9050.
Figura 2-22: Configuración ANT Emulator
Tras pulsar “Reconnect” si se ha configurado correctamente se apreciará que se ha establecido la
conexión con la aplicación Windows, como se muestra en la imagen siguiente.
Tecnologías y entornos de trabajo
34
Figura 2-23: Estado conexión ANT Android Emulator Bridge
2.5.3 Desarrollo ANT+
Para realizar el desarrollo de la aplicación Android se ha usado la API de ANT+ que proporciona el fabricante
oficial y se puede descargar en su página web.
https://www.thisisant.com/developer/resources/downloads/
Con esta API se pueden realizar distintas acciones necesarias para obtener la información de los dispositivos
como las que se detallan a continuación:
Buscar los dispositivos: Se realiza una búsqueda de los dispositivos ANT+ cercanos disponibles.
Petición de acceso al plugin de comunicaciones con el dispositivo seleccionado.
Suscribirse a eventos: para elegir qué datos se quieren recoger del dispositivo.
Monitorizar el estado de la conexión mientras se reciben los datos.
Liberar la conexión con el plugin.
Para incorporarlo en la aplicación Android hay que importar la librería de ANT+ correspondiente en el
proyecto.
Figura 2-24: Librería ANT importada al proyecto
2.6 SQLite
Es un motor de bases de datos de código abierto caracterizado principalmente por mantener el almacenamiento
de la información persistente de una forma sencilla.
Es distinto a otros sistemas de gestión de bases de datos como MySQL, SQL Server y Oracle DB, ya que
SQLite tiene las siguientes características:
35
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
No necesita el soporte de un servidor: Implementa un conjunto de librerías encargadas de la gestión
sin necesidad de ejecutar un proceso de administración de la información.
No requiere de configuración: no necesitan que se establezcan puertos, ni tamaños, tampoco
ubicaciones, etc.
El esquema se realiza mediante un fichero: Crea un archivo para el esquema completo de una base
de datos, lo que permite ahorrarse preocupaciones de seguridad, ya que los datos de las aplicaciones
Android no pueden ser accedidos por contextos externos.
Es de Código Abierto: Está disponible al dominio público de los desarrolladores al igual que sus
archivos de compilación e instrucciones de escalabilidad.
Figura 2-25: Icono de SQLite
Por estas razones es una de las mejores opciones para la persistencia de datos en dispositivos móviles, por eso
se ha decidido usar en el proyecto, ya que éstas características permiten un desarrollo sencillo, rápido y
amigable.
En el capítulo 3 se explicará más detalladamente la estructura de la base de datos SQLite que se ha usado para
la aplicación.
2.7 GraphView
Para realizar los distintos gráficos en la aplicación Android se ha empleado la librería GraphView disponible
en su página web.
www.android-graphview.org/
Se ha usado ésta concretamente ya que es de código abierto y dispone de bastantes ejemplos. Sus
características principales son:
Diferentes tipos de gráficos: líneas, puntos, barras que se pueden combinar entre sí.
Uso de varias series de datos en el mismo gráfico.
Actualización de los datos en tiempo real.
Leyendas: Es posible ajustar el ancho y la alineación vertical (superior, medio, inferior).
Formato personalizado para las etiquetas.
Desplazamiento y zoom: Se puede ampliar el zoom y desplazarse a lo largo del gráfico mediante un
movimiento táctil.
Para añadirlo al proyecto se ha agregado la librería correspondiente, en este caso la versión 4.1
Tecnologías y entornos de trabajo
36
Figura 2-26: Librería GraphView
2.8 Git y Gitlab
Git es un software usado para el control de versiones no centralizado, usado para el mantenimiento de
versiones de aplicaciones con ficheros de código. Sus principales características son:
Eficiencia en proyectos grandes debido a su rapidez.
Gestión distribuida: los usuarios a parte de poseer la última versión de los archivos, poseen una
réplica del repositorio. Esto es muy útil en el caso de que haya problemas con el servidor, ya que se
pueden usar las copias de los clientes para restaurar el servidor.
Facilidad de uso: para usuarios poco experimentados.
Múltiples protocolos de publicación: Los almacenes de información pueden publicarse por HTTP,
FTP, rsync o mediante un protocolo nativo, ya sea a través de una conexión TCP/IP simple o a través
de cifrado SSH.
Por su parte Gitlab es un repositorio para la gestión de proyectos que nos ofrece una interfaz web bastante
amigable.
Figura 2-27: Icono de Gitlab
A continuación, se van a detallar algunas características principales:
Historial de modificaciones del proyecto: Se puede apreciar de manera muy simple quién ha
realizado la modificación, el fichero concreto, las diferencias con la versión anterior, así como la
fecha, entre otras informaciones. Muy útil cuando se trabaja en equipo.
Código del servidor fácilmente accesible remotamente.
Cómoda interfaz web: Posee una interfaz web muy amigable donde se pueden realizar gran cantidad
de acciones de manera muy intuitiva.
Comentarios e incidencias del proyecto: En la interfaz web se pueden abrir tiques para indicar
alguna incidencia con el código. Todo el equipo podría verlo y seguir el flujo del tique.
Gestión de grupos y proyectos: Si se trabaja en equipo, se pueden crear grupos, a los cuales se les
puede asignar privilegios comunes de una manera sencilla.
Por todas estas razones se ha decidido usar Git y Gitlab en el proyecto, ya que es una herramienta muy útil
para tener una copia de seguridad del código y llevar un control de los cambios. En el siguiente apartado se va
37
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
a detallar cómo configurar Gitlab en nuestro equipo.
2.8.1 Configurar Gitlab
2.8.1.1 Registro y creación del proyecto en la web de Gitlab
Inicialmente hay que registrarse en la web de Gitlab. Una vez que ya estamos registrados y logados hay que
crear un proyecto. Para ello se pulsa en “Projects” y después en “New project”.
Figura 2-28: Gitlab Nuevo proyecto.
Tras esto, se le da un nombre al proyecto, una descripción y un nivel de visibilidad, en este caso se ha elegido
privado y se pulsa en el botón “Create Project”
2.8.1.2 Creación de la clave SSH
El objetivo de todo esto es poder subir el código directamente desde el Eclipse. Para realizar esto se necesita
una clave SSH que identificará al ordenador que se va a usar. El protocolo SSH permite que el usuario pueda
conectarse al servidor remoto de manera segura sin necesidad de escribir cada vez el usuario y la contraseña.
Para crear una clave SSH hay que usar la línea de comandos de Windows y ejecutar la siguiente instrucción
cambiando el email por el de la persona que va a usarlo.
ssh-keygen -t rsa -C "[email protected]" -b 4096
Tras esto se habrá creado la clave en la carpeta .ssh dentro de la carpeta de usuario. La clave SSH se podrá
copiar ejecutando la siguiente orden cambiando userprofile por el nombre del usuario:
type %userprofile%\.ssh\id_rsa.pub | clip
Después de esto, en la web de Gitlab, hay que pegar la clave copiada en el campo “Key” de la pestaña “SSH
Tecnologías y entornos de trabajo
38
Key” en “User Settings” y pulsar “Add key”.
Figura 2-29: Añadir Key SSH en Gitlab
En este momento ya se ha configurado la clave SSH en la web de Gitlab, a continuación, se va a indicar cómo
se configura la clave SSH en Eclipse.
2.8.1.3 Configurar Eclipse
Inicialmente hay que comprobar si Eclipse posee el plugin de Git llamado EGit. En caso de que no estuviera
instalado habrá que instalarlo desde el MarketPlace
39
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 2-30: EGit Eclipse Marketplace
Una vez que se ha instalado el plugin para Git hay que configurar la clave SSH, para ello hay que añadir la
ubicación de los ficheros de claves creados previamente en la pestaña de configuración SSH2 como se muestra
a continuación.
Figura 2-31: Configurar clave SSH en Eclipse
Se va a suponer que nuestro proyecto para la aplicación Android ya está creado en Eclipse. Ahora se clona el
repositorio de Gitlab en el ordenador. Se copia la url https del repositorio de la web de Gitlab y se realiza la
clonación del repositorio en la pestaña de Git de Eclipse como muestra las dos siguientes imágenes.
Figura 2-32: Url del repositorio Gitlab
Tecnologías y entornos de trabajo
40
Figura 2-33: Clonar repositorio Git
El siguiente paso es entonces asociar el proyecto con el proyecto del repositorio creado en Gitlab. En Eclipse y
sobre el nombre del proyecto se pulsa el botón derecho y se elige “Team” -> “Share Project” y se configura el
repositorio como se nuestra a continuación.
Figura 2-35: Configuración del repositorio Git
Figura 2-34: Compartir proyecto en Eclipse
41
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
El último paso sería hacer un commit de nuestro proyecto para que todo se suba al repositorio. Se selecciona
“Team” -> “Commit”, se eligen todos los ficheros en la ventana de “Git Staging” y con el botón derecho se
pulsa sobre “Add to Index”. Tras pulsar en “Commit and Push” todos los ficheros se habrán subido al
repositorio.
Figura 2-36: Commit and Push
2.9 Google Play Services
En la aplicación se va a hacer uso del mapa de Google Maps para indicar el recorrido del atleta en caso de que
se haya marcado la opción de guardar la localización durante el ejercicio. Para poder usarlo hay que añadir
Google Play Services al proyecto.
Los pasos a seguir son los siguientes:
Abrir SDK Manager y comprobar que Google Play Services está instalado. En caso de que no esté
instalado, habrá que instalarlo.
Figura 2-37: SDK Manager Google Play Services
Integrar Google Play Services a la aplicación.
Google Play Services es un proyecto librería, por lo tanto, se va a importar al workspace.
Se busca la carpeta de ubicación del SDK. En Eclipse se puede usar “Windows”-> “Preferentes” ->
“Android”.
Tecnologías y entornos de trabajo
42
Una vez en la carpeta de SDK se copia la carpeta /extras/google/google_play_services/libproject/ y se
pega en el workspace.
Tras esto se importa como un proyecto Android al Workspace. “File” -> “Import” -> “Android” ->
“Existing Android Code into Workspace”.
El último paso es referenciar la librería Google play Services a nuestra aplicación. Para ello se
selecciona el proyecto con el botón derecho -> “Properties” -> “Android” y en la sección de abajo
donde pone “library” se añade la librería de Google Play Services.
Figura 2-38: Añadir librería Google Play Services al proyecto
2.9.1 Creation de una API-KEY
Una vez que se ha importado la librería al proyecto se necesita una clave para que la API de Google Maps
responda las peticiones de nuestra aplicación.
Inicialmente se tiene que buscar el archivo de depuración de depósito de claves que se crea la primera vez que
se compila el proyecto, normalmente se genera en la ruta “C:\Users\your_user_name\.android\”.
Ahora hay que visualizar la huella digital del certificado de depuración ejecutando el comando:
keytool -list -v -keystore [STORE FILENAME] -alias [KEY NAME] -storepass
[STORE PASSWORD] -keypass [KEY PASSWORD]
en la siguiente ruta “C:\Program Files (x86)\Java\jdk[VERSION]\bin\keytool.exe”.
Se debería obtener un resultado similar a lo que indica la imagen, donde la línea que empieza por SHA1 es la
huella digital.
43
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 2-39: Certificado de depuración
Una vez que ya se tiene la huella es necesario crear un proyecto en la consola de la API de Google. Para ello se
accede a la siguiente url
https://console.developers.google.com/
Se pulsa en “Create Project”, en la siguiente venta se le asigna un nombre y se pulsa en “Create”.
Figura 2-40: Creación de proyecto en la consola Google API
A continuación, se elige “Google Maps Android API” y se pulsa “ENABLE”.
Figura 2-41: Habilitar Google Maps API
En este momento se ha creado un proyecto Google Maps Android API v2, pero no se podrá usar hasta que no
se creen las credenciales.
Tecnologías y entornos de trabajo
44
El siguiente paso es pulsar sobre “Credentials”, después sobre “Create Credentials” y API key.
Figura 2-42: Creación API Key 1
Ahora aparecerá la API Key y se seleccionará “RESTRICT KEY”.
Figura 2-43: Creación API Key 2
Lo último que quedaría sería elegir “Android apps” y añadir el nombre del paquete de nuestra aplicación
Android y la huella digital que se obtuvo anteriormente.
Figura 2-44: Creación API Key 3
45
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Ya estaría todo configurado en la parte de la consola de Google API. El último paso sería añadir en el fichero
AndroidManifest la API key.
Figura 2-45: API Key en el fichero AndroidManifest.xml
46
3 PERSISTENCIA DE DATOS
n este capítulo se va a explicar y detallar cómo se ha realizado la persistencia de los datos en la
aplicación Android. Como ya se comentó en los capítulos anteriores se ha usado SQLite como
tecnología para el almacenamiento de datos, ya que se ha considerado que es la más adecuada.
3.1 Estructura de la base de datos
Para guardar los distintos datos que requiere la aplicación se han creado las 5 tablas siguientes:
3.1.1 IdRuta
En esta tabla se inserta un registro cada vez que se crea una ruta o ejercicio nuevo. Primero se consulta cuál es
el último id almacenado para el tipo de ruta correspondiente y se inserta el siguiente id.
Los campos que tiene la tabla son:
_ID: es un entero autoincremental y primary key, se va incrementando cada vez que insertamos un
registro en la tabla.
IDRUTA: es un entero que identifica la ruta dentro de un tipo. Por ejemplo, si hay dos rutas de
bicicleta, una tendrá el idruta = 1 y la otra el idruta = 2.
TIPO: campo de tipo String que indica el tipo de la ruta que se ha insertado. Sus valores posibles
serán carrera, bicicleta y pulsómetro.
FECHA: este campo de tipo Date contendrá la fecha en la cual se ha insertado.
GPS: es un campo de tipo boolean e indica si se han guardado las coordenadas GPS de la ruta
correspondiente. Los valores posibles son “1” si tiene coordenadas GPS o “0” si no se han guardado.
A continuación, se muestran registros de la tabla idRuta.
E
-
47
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 3-1: Ejemplo de registros en la tabla idRuta
Como se puede apreciar, hay 4 registros guardados, dos de bicicleta, uno de carrera y otro de pulsómetro. El
campo _id indica el orden en el que se han insertado en la tabla, idRuta el identificador para el tipo de ruta y el
último campo si se han guardado las ubicaciones, en este caso sólo para el primer ejercicio de bicicleta se han
guardado.
3.1.2 Carrera
Esta tabla contendrá toda la información relacionada con el modo carrera. Si se ha elegido que se guarde en la
base de datos se insertará un registro cada 60 segundos.
Los campos que tiene la tabla son los siguientes:
_ID: es un entero autoincremental y primary key, se va incrementando cada vez que insertamos un
registro en la tabla.
VELOCIDAD: campo de tipo entero que almacena la velocidad instantánea en m/s que devuelve el
sensor ANT+.
DISTANCIA: campo de tipo entero que contendrá la distancia recorrida hasta el momento. Se
almacena en metros.
PASOS: campo de tipo entero que indica el número de pasos dados en el instante que se recoge el
dato del sensor.
TIEMPO: campo de tipo entero que indica el tiempo empleado en realizar la ruta o ejercicio.
IDRUTA: es un entero que identifica la ruta dentro de un tipo, en este caso dentro del tipo carrera.
ORDEN: entero que representa el orden con el que se han guardado los datos.
FECHA: este campo contendrá la fecha en la cual se ha insertado el dato.
.
Como se muestra en la siguiente imagen, se han insertado 3 registros de la tabla carrera, estos registros
corresponden con el almacenamiento de datos de datos de velocidad, tiempo, distancia y pasos para la carrera
1, con fecha 23 de agosto de 2016 y con el orden que indica el campo correspondiente.
Figura 3-2: Ejemplo de registros en la tabla carrera
3.1.3 Bicicleta
También se insertará un registro cada 60 segundos si se ha elegido la opción correspondiente, contendrá toda
la información necesaria para el modo bicicleta.
Los campos siguientes son los que tiene la tabla:
_ID: es un entero autoincremental y primary key, se va incrementando cada vez que insertamos un
registro en la tabla.
VELOCIDAD: campo de tipo entero que almacena la velocidad instantánea en m/s que devuelve el
Persistencia de datos
48
sensor ANT+.
DISTANCIA: campo de tipo entero que contendrá la distancia recorrida hasta el momento con la
bicicleta. Se almacena en metros.
CADENCIA: campo de tipo entero que indica la cadencia de pedaleo que se tiene en el instante que
se recoge el dato del sensor.
TIEMPO: campo de tipo entero que indica el tiempo empleado en realizar la ruta o ejercicio.
ID_RUTA: es un entero que identifica la ruta dentro de un tipo, en este caso dentro del tipo bicicleta..
ORDEN: entero que representa el orden con el que se han guardado los datos.
FECHA: este campo contendrá la fecha en la cual se ha insertado el dato.
A continuación, se muestra cómo se ha insertado la información en la tabla bicicleta. Como se puede ver la
tabla bicicleta contiene 8 registros para dos rutas distintas idRuta=1 e idRuta=2. El primer ejercicio se realizó
el día 9 de agosto del 2016 y el otro el día 23 de agosto. También se puede apreciar el tiempo, la velocidad y la
distancia en cada instante.
Figura 3-3: Ejemplo de registros en la tabla bicicleta
3.1.4 Pulsómetro
Es la tabla para los datos del pulsómetro, se insertará toda la información relacionada con el pulso del atleta
que se obtiene del sensor ANT+. El intervalo de tiempo entre una inserción y otra será de 60 segundos.
Los campos que tiene la tabla son:
_ID: es un entero autoincremental y primary key, se va incrementando cada vez que insertamos un
registro en la tabla.
PULSO: indica en números enteros el pulso actual del atleta
PULSO MEDIO: entero que muestra el pulso medio del atleta a lo largo de todo el ejercicio.
LATIDOS: número de latidos del atleta.
TIEMPO: campo de tipo entero que indica el tiempo empleado en realizar la ruta o ejercicio.
ID_RUTA: es un entero que identifica la ruta dentro de un tipo, en este caso dentro del tipo
pulsómetro.
ORDEN: entero que representa el orden con el que se han guardado los datos.
FECHA: este campo contendrá la fecha en la cual se ha insertado el dato.
En los 3 registros que se muestran a continuación de la tabla pulsómetro, puede verse que el pulso del atleta se
ha mantenido constante en 72 pulsaciones por minuto durante los tres primeros minutos del ejercicio.
49
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 3-4: Ejemplo de registros en la tabla pulsómetro
3.1.5 GPS
Es la tabla que contendrá los datos de la ubicación GPS del atleta durante un ejercicio. La toma de datos se
realizará cada 60 segundos y se insertará en la tabla la siguiente información:
_ID: es un entero autoincremental y primary key, se va incrementando cada vez que insertamos un
registro en la tabla.
IDENTIFICADOR: es un entero que identifica el identificador de la ruta.
RUTA: campo de tipo String que indica el tipo de la ruta que se ha insertado. Sus valores posibles
serán carrera, bicicleta y pulsómetro.
FECHA: este campo contendrá la fecha en la cual se ha insertado.
LATITUD: valor latitud de la ubicación del atleta.
LONGITUD: valor longitud de la ubicación del atleta.
ORDEN: orden en el que se han tomado los datos.
Como se puede ver en la siguiente imagen, en la tabla GPS se han guardado las dos primeras coordenadas de
un ejercicio de bicicleta con identificador 1.
Figura 3-5: Ejemplo de registros en la tabla GPS
3.2 Código y clases
Se han creado tres clases para la creación, gestión y comunicación con la base de datos SQLite
3.2.1 AtletaReaderDbHelper.java
Esta clase contiene los métodos para la inicialización de la base datos ya que extiende la clase
SQLiteOpenHelper. Se ha sobreescrito el método onCreate el cual ejecutará las querys para la creación de las
distintas tablas. Estas querys están definidas en la clase DataSource.java.
3.2.2 DataSource.java
Dentro de esta clase se han definido todos los métodos necesarios para la gestión de las tablas. A continuación,
se van a detallar todos los métodos y query usados para las tablas:
Creación: para cada tabla se ha creado una variable de tipo String la cual contendrá la query a
ejecutar para la creación de la tabla. La query comienza con el comando “create table” tras esto se
pone el nombre de la tabla y el nombre y tipo de cada columna.
Persistencia de datos
50
Figura 3-6: Código para creación de la tabla
Guardado de registros: el método que inserta los valores en la base de datos recibe un objeto, en este
caso del tipo Carrera, del cual recoge los datos y lo inserta en la base de datos a través del método
insert de la clase AtletaReadearDbHelper, al cual se le ha de pasar el nombre de la tabla y un objeto
ContentValues que contendrá todos los valores necesarios.
Figura 3-7: Código para el guardado de registros en una de las tablas
Recoger todos los registros: se usa el método rawQuery, devolverá un cursor con todos los registros
para la tabla solicitada.
Figura 3-8: Código para recoger los datos de una de las tablas
Borrado de registros
Figura 3-9: Código para el borrado de todos los registros de una de las tablas
3.2.3 CursorToModel.java
Esta clase es la encargada de pasar los datos obtenidos tanto del sensor como de la base de datos al modelo de
datos creado. Cada tabla posee una clase java en la que se recogen los datos. Por ejemplo, la tabla carrera
posee una clase llamada Carrera.java que contendrá los datos correspondientes.
51
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Para todas las tablas tenemos dos métodos, uno para recoger datos y otro para insertar datos.
Métodos get: se le pasan una serie de parámetros necesarios para el filtrado de la consulta y tras
realizar la consulta en la base de datos devuelven una lista de objetos.
Figura 3-10: Código del método get para la tabla carrera
Métodos insert: se le pasa toda la información obtenida por el sensor, crea el objeto correspondiente,
le establece los valores (mediante métodos set) y llama al método para realizar el insert.
Figura 3-11: Código del método insert para la tabla carrera
52
4 ESTRUCTURA Y CÓDIGO
n este capítulo se va a explicar el código y la estructura de la aplicación. Se hará un recorrido por los
paquetes y se irá explicando cada clase contenida en ellos, resaltando las partes del código más
importantes de cada uno.
4.1 Estructura del código de una aplicación Android
La estructura de la aplicación Android está compuesta principalmente del código, librerías, vistas, recursos y el
Android Manifest. A continuación, se va a detallar cada parte:
Directorio src: Aquí está ubicada toda la lógica de la aplicación cuya programación está realizada en
java. Dentro de ella se han definido distintos paquetes para diferenciar las pantallas y la funcionalidad.
Directorio res: Dentro de este directorio se encuentran los ficheros de recursos necesarios para la
aplicación, imágenes, estilos… divididos en varias subcarpetas:
o Values: suele contener los ficheros xml para definir las constantes y estilos.
o Layout: aquí se encuentran los ficheros xml para definir la parte visual de las distintas
pantallas de la aplicación.
o Drawable: están alojadas las imágenes, divididas en subcarpetas dependiendo del tamaño y
la resolución de la misma.
Directorio bin: Contiene los ficheros que genera la propia aplicación al traducir de *.java a *.class y
luego a los *.dex que usa Android.
Directorio gen: Dentro de él se encuentra el fichero R.class que posee todos los identificadores de los
recursos usados en la aplicación.
Directorio lib: Contiene las librerías exportadas que se necesitan en la aplicación.
E
-
53
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Android Manifest: es el fichero de configuración de la aplicación, se usa para definir todos los
permisos que necesita, así como para definir todas las actividades que se han creado.
4.2 Código
A continuación, se van a detallar las partes más importantes del código de la aplicación. En caso de que se
necesite más detalle del código se podrá consultar el Anexo A.
4.2.1 Carpeta src
4.2.1.1 Paquete test.DroidLogin.sqlite
Dentro de este paquete se han creado 3 clases necesarias para el uso de la base de datos. Todo el detalle
relacionado con estas clases está definido en el capítulo 3, donde se explica la base de datos.
4.2.1.2 Paquete test.DroidLogin.carrera
Contiene dos clases, una es el modelo para guardar los datos(Carrera.java) y la otra es donde están todos los
métodos y variables necesarias para el correcto funcionamiento de la pantalla del modo
Carrera(ActivityCarrera.java).
ActivityCarrera: El objetivo de esta pantalla es recoger la información del sensor ANT+ (Stride
Based Speed & Distance), mostrar la información y realizar si fuera necesario el guardado de los datos
en la base de datos, tanto de los datos del sensor como la ubicación GPS.
Para la realización de cada pantalla en Android se debe crear lo que se denomina Activity (actividad),
por lo tanto, la clase ActivityCarrera va a extender de la clase Activity de Android.
Un Activity es una clase donde se muestran Views(vistas) para generar la interfaz de usuario y donde
se responden a eventos que se realicen en ella. La parte donde está definida la interfaz de usuario es un
fichero xml ubicado en la carpeta RES y donde se responden a los eventos de la clase java ubicada en
la carpeta SRC.
Estructura y código
54
Figura 4-1: Activity Carrera
Volviendo a la clase ActivityCarrera, inicialmente en el método onCreate se definen las variables,
botones, cajas de textos, hilos, checkbox... de los cuales se van a destacar los siguientes:
Hilo t: este hilo se va a usar para cambiar cada 10 segundos el dato mostrado en la parte principal de la
pantalla. Los datos que se mostrarán serán velocidad, distancia, tiempo y pasos.
Hilo t2: como se ha comentado anteriormente, se han creado varios checkbox, uno de ellos es para
indicar que se desea guardar los datos del sensor. Este hilo comprueba cada 60 segundos si se ha
marcado el checkbox, y si es así se inserta la información en la base de datos. En caso de que sea el
primer dato guardado para ese ejercicio insertará también un registro en la tabla idRuta para añadir ese
nuevo ejercicio a la lista de ejercicios guardados.
IpluginAccessResultReceiver <AntPlusStrideSdmPcc>: Este objeto es el encargado de recoger la
información del sensor ANT+, una vez que se ha recibido información del sensor el método
onResultReceived comprueba el código recibido, si no es correcto se mostrará un mensaje indicando
el error, y si es correcto se llama a subscribeToEvents donde se realiza la suscripción de los datos que
se desea recoger. En este caso se han elegido velocidad, distancia, pasos, tiempo.
Una vez que ya se han definido todos los componentes necesarios se debe realizar la conexión con el
sensor, esta acción se hace mediante el método requestAccess del objeto AntPlusStrideSdmPcc como
se muestra a continuación.
Figura 4-2: Código de conexión con el sensor
La clase ActivityCarrera también contiene otros métodos entre los cuales cabe destacar
establecerAlarmaClick el cual será llamado cuando se active el checkbox para guardar los datos de
GPS. Con este método conseguimos programar una alarma que ejecutará una acción transcurridos 60
segundos.
Para realizar esta tarea periódica se usa el componente de Android AlarmManager y el
BroadcastReceiver. Como se muestra a continuación se define la alarma a la cual se le indica, entre
55
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
otras cosas, que ejecute la clase MyReceiver cuando se cumplan los 60 segundos, en ella se guardará
la ubicación actual del atleta. En los puntos posteriores se detallará la clase MyReceiver más
detenidamente.
Figura 4-3: Código para establecer una alarma
Carrera: esta es la clase que se utiliza para guardar los datos que se van a recoger o que se van a
insertar en la tabla carrera de la base de datos. Por lo tanto, tiene definidas las variables y los métodos
getters y setters de todos los datos necesarios (id, velocidad, distancia, pasos, tiempo, fecha, idRuta,
orden).
4.2.1.3 Paquete test.DroidLogin.bicicleta
Dentro de este paquete se encuentran dos clases ActivityBicicleta y Bicicleta que se van a detallar a
continuación:
ActivityBicicleta: esta clase es similar a la descrita anteriormente(ActivityCarrera). Con la diferencia
que se conecta al sensor ANT+ (Bike Speed & Cadence) y que en vez de mostrar los pasos muestra la
cadencia del pedaleo.
Bicicleta: es el modelo para la tabla bicicleta de la base de datos.
4.2.1.4 Paquete test.DroidLogin.pulsometro
Este paquete similar a los anteriores posee dos clases, una que será el modelo para la tabla correspondiente en
la base de datos y otra clase que contendrá los métodos necesarios para la pantalla que muestra el pulso del
atleta.
ActivityPulsometro: Como se muestra en la figura 4-4, con esta clase se consigue mostrar en tiempo
real el pulso del atleta en un gráfico. Para ello extiende la clase Activity y se crean todos los objetos y
variables necesarios, siendo los más interesantes de comentar el objeto para el gráfico y el hilo para
insertar los datos y el componente para recoger los datos del sensor.
Gráfico: como se indicó en el capítulo 2, para el gráfico se ha usado la librería GraphView. Una vez
creado el objeto se configura, primero se asocia al objeto de la parte visual(layout), se le asignan los
tamaños de los ejes y el color.
Para añadirle los valores, se crea el objeto series, el cual se le irá actualizando el valor cada vez que se
reciba información del sensor. Ya que el sensor envía información cada corto periodo de tiempo, se
actualizará la información del gráfico cada 10 datos. Una vez que se alcancen los 100 valores
añadidos al gráfico se borrará y se comenzará desde el principio.
Hilo t2: este hilo se usa para insertar la información en la base de datos en caso de que se haya
marcado el checkbox de guardado de datos. Su funcionamiento es similar al comentado en los puntos
anteriores.
Estructura y código
56
IpluginAccessResultReceiver<AntPlusHeartRatePcc>: Es el componente con el que se consigue
recoger la información del pulsómetro ANT+, similar al de las pantallas anteriores. Inicialmente se
comprueba el código recibido, si es incorrecto se mostrará un mensaje indicando el error y si es
correcto se llamará a la función para suscribir los datos (subscribeToEvents).
Activity_AsyncScanPulsometro: Esta actividad es la encargada de conectarse al pulsómetro ANT, no
se va a detallar ya que se ha obtenido de la API de ANT+.
Pulsómetro. Esta clase posee las variables y los métodos getters y setters de todos los datos
necesarios para recoger o insertar información en la base de datos. Es el modelo de la tabla
pulsómetro.
Figura 4-4: Activity pulsómetro
4.2.1.5 Paquete test.DroidLogin.grafico
Contiene dos clases, el modelo de la tabla idRuta y la clase java para la pantalla de Gráfico.
ActivityGrafico: Con esta actividad se muestra en un gráfico distintos datos de los ejercicios
realizados por el atleta. Para ello se han definido inicialmente tres combos(spinners): intervalo,
ejercicios y datos. El combo intervalo tendrá varios valores cargados, tras seleccionar uno de ellos se
cargará el combo de ejercicios con los ejercicios que se tienen datos en la base de datos para ese
intervalo de tiempo y el tipo correspondiente. El último combo se cargará con valores en función del
tipo de ejercicio que se esté mostrando (bicicleta, carrera, pulsómetro). A continuación, se muestra el
método en el que se realiza estas acciones de los combos.
57
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Figura 4-5: Código para la carga de los combos
Para actualizar los valores en el gráfico se usa el botón “Actualizar Gráfico” una vez que se pulsa el
botón se recogen los valores de los combos y se busca en la base de datos la información, la cual se
añade a la serie del gráfico.
Estructura y código
58
Figura 4-6: Código para añadir elementos al gráfico
IdRuta: Es la clase que contiene las variables y los métodos getters y setters para recoger los datos de
la tabla idRuta.
4.2.1.6 Paquete test.DroidLogin.gps
Este paquete contiene todo lo necesario para recoger los datos GPS, así como mostrarlos en un mapa de
Google Maps. Se van a detallar a continuación todas las clases usadas.
ActivityGPS: Esta clase es usada para el funcionamiento de la pantalla GPS, en la cual podremos
elegir el ejercicio del cual queremos ver las ubicaciones. Contiene dos combos, uno de intervalo y otro
de ejercicios de los cuales hay datos de GPS guardados en la base de datos, y un botón para acceder a
la siguiente pantalla que mostrará las ubicaciones en un mapa.
Al pulsar el botón se recoge las listas de ubicaciones y se le pasa a la siguiente actividad que mostrará
el mapa.
Figura 4-7: Código del botón para acceder al mapa
59
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
ActivityMapa: Básicamente, lo que se consigue con esta actividad es mostrar una lista de marcadores
en un mapa usando la API de Google Maps. Se crea un objeto GoogleMap al cual se le van añadiendo
los marcadores obtenidos de la actividad anterior.
GPSTracker: Esta clase es usada para detectar si está activado el GPS o no, y para recoger la
ubicación GPS.
MyReceiver: Como se comentó cuando se explicó la clase ActivityCarrera, se programa una alarma
para que se ejecute la clase MyReceiver 60 segundos y recogerá e insertará la información de la
ubicación en la base de datos. Una vez realizado esto, se programa de nuevo la alarma actualizando
los datos que son necesarios, en caso de que no hubiera que actualizar los datos no haría falta
actualizar la alarma.
Figura 4-8: Código para configurar la alarma dentro de la clase MyReceiver
4.2.1.7 Paquete test.DroidLogin.utils
El paquete contiene la clase Utils, la cual tiene varios métodos que serán usados para distintas acciones
comunes en toda la aplicación.
En este caso se usan para la conversión de tiempo, velocidad, distancia… Por ejemplo, al método
conversorTiempo se le pasa un entero con el número de segundos y devuelve un String con el tiempo en horas
minutos y segundos, el cual será el que se usa para mostrar el tiempo en varias partes de la aplicación.
Estructura y código
60
Figura 4-9: Código de conversión de tiempo
4.2.2 Directorio res
Como se ha comentado anteriormente este directorio posee los recursos para la aplicación, entre ellos los más
importantes son los layouts, que es el componente que representa el diseño de la interfaz de usuario de
componentes gráficos, como son las Activities.
Ya que todos los layouts creados son similares se va a explicar uno de ellos de manera detallada y esto será
extensible a los demás.
Antes de empezar a detallar los layouts es conveniente explicar qué son los Views o ViewGroups ya que todos
los layouts están formados de ellos.
View: Una view es un objeto cuya clase es android.view.View. Es una estructura de datos cuyas
propiedades contienen los datos de la capa, la información específica del área rectangular de la
pantalla y permite establecer el layout.
Viewgroups: su clase es android.view.Viewgroup, es un objeto especial de view cuya función es
contener y controlar la lista de views y de otros viewgroups. Los viewgroups te permiten añadir
estructuras a la interfaz y acumular complejos elementos en la pantalla que son diseccionados por una
sola entidad.
Los views y viewgroups deben estar contenidos en los layouts, los cuales contienen otros elementos presentes
en una vista. Dentro de cada uno de los layouts se ponen los elementos necesarios, para estructurar la
pantalla de la manera deseada.
Dependiendo del posicionamiento en la pantalla existen varios tipos de layout:
LinearLayout: sus elementos hijos pueden ser otros layouts así como views y viewgroups, los alinea
en una única dirección, horizontal (por defecto) o vertical.
RelativeLayout: los elementos están colocados en posiciones relativas a los otros.
AbsoluteLayout: la ubicación de los elementos se realiza en posiciones absolutas donde la posición
inicial es la parte superior izquierda de la pantalla.
TableLayout: es usado para poner los elementos en forma de tabla, dentro del cual se usa el elemento
TableRow para definir cada fila.
FrameLayout: Es un marcador de posición que puede usarse para mostrar una única vista.
ScrollView: Es un caso particular del FrameLayout, permite el desplazamiento de la pantalla cuando
hay elementos que ocupan más del espacio físico de la misma.
61
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
El nombre del fichero es activity_carrera.xml y corresponde con la actividad ActivityCarrera.
Inicialmente se tiene un elemento raíz, ScrollView dentro del cual se incluye el elemento LinearLayout de
orientación vertical y dentro de éste 4 LinearLayouts con el que se conseguirá disponer de 4 filas de elementos.
Cada una de estas filas dispone a su vez de otros elementos hijos para conseguir la disposición de elementos
deseada como se muestra a continuación.
Figura 4-10: Estructura del layout
Dentro de cada elemento hay que definir las características de los mismos, para ello se usan los atributos y
parámetros. Se van a detallar los más importantes que se han usado:
Layout_width: define el ancho del view.
Layout_height: define la altura del view
Background: es usado para indicar el fondo usado en esa pantalla.
Orientation: indica la orientación del layout, por ejemplo, en el LinearLayout puede ser horizontal o
vertical.
Id: representa un identificador único para cada elemento. Lo que permite obtener una referencia de
cada objeto de forma específica. Este identificador se usa para referenciar cada componente en la clase
java en caso de que se quiera modificarlo durante la ejecución de la aplicación.
4.2.3 Directorio lib
Esta carpeta contiene las librerías necesarias para el correcto funcionamiento de la aplicación. Las librerías
son:
Librería general de Android.
GraphView: librería usada para los gráficos.
ANT+: librería para ANT+.
Google Play Services: es usada para mostrar el mapa de Google Maps.
Estructura y código
62
4.2.4 Android Manifest
Este fichero xml contiene las configuraciones para los permisos necesarios en la aplicación, así como la
definición de todas las actividades y otros componen.
Figura 4-11: Permisos necesarios para la aplicación
Los permisos requeridos para el correcto funcionamiento de la aplicación son:
INTERNET: permite a la aplicación acceso a internet.
VIBRATE: es posible hacer vibrar al dispositivo.
ACCESS_NETWORK_STATE: usado para conocer el estado de la conexión.
ACCESS_FINE_LOCATION: con este permiso se puede obtener la ubicación del dispositivo
READ_GSERVICES: usado para poder ver el mapa de Google maps dentro de nuestra aplicación.
WRITE_EXTERNAL_STORAGE: permiso necesario para poder guardar datos de la aplicación en
la base de datos SQLite
WAKE_LOCK: permiso necesario para mantener “despierto al dispositivo y así obtener la ubicación
cada 60 segundos.
63
5 MANUAL DE USUARIO
n este capítulo se va a explicar la nueva funcionalidad para la aplicación Android. Para ello, el usuario
debe contar con un dispositivo Android con la posibilidad de conectarse a los sensores ANT+ y con
antena GPS. En esta dirección web se muestra una lista de dispositivos que soportan la conexión con
sensores ANT+:
https://www.thisisant.com/directory/
La mayoría de los dispositivos Android ya disponen de antena GPS para su localización, por lo tanto, no se va
a indicar un listado de compatibles.
A parte del dispositivo Android el usuario debe poseer al menos uno de los tres sensores ANT+ que se puede
utilizar a partir de ahora en la aplicación:
Sensor de ritmo cardíaco o pulsómetro.
Sensor de velocidad y cadencia para bicicleta.
Sensor de velocidad y distancia para el modo carrera.
Otro de los requerimientos necesarios es que el dispositivo Android tenga instalada dos aplicaciones:
ANT+ Plugins Service: Esta aplicación es la que permite la comunicación con el sensor y debe estar
preinstalada por el fabricante si el dispositivo tiene la posibilidad de conectarse con los sensores
ANT+. En caso de que no esté se puede instalar desde la siguiente dirección:
https://play.google.com/store/apps/details?id=com.dsi.ant.plugins.antplus&hl=es
ANT+ Plugin Manager Launcher: Sirve para gestionar los dispositivos ANT+ que se han conectado.
Se pueden guardar, asignar un nombre, seleccionar una como predefinida. O en caso de que ya no se
use un dispositivo borrarlos. Se encuentra en la siguiente dirección:
https://play.google.com/store/apps/details?id=com.dsi.ant.plugins.antplus.managerlauncher&hl=es
E
-
Manual de Usuario
64
5.1 Manual de usuario
Como ya se ha comentado en otros puntos, este proyecto es una ampliación de una aplicación creada por otro
compañero, por lo tanto, en este manual sólo se va a explicar la parte con las nuevas funcionalidades.
Una vez que el usuario ha iniciado sesión en la aplicación le aparecerá la siguiente pantalla.
Figura 5-1: Pantalla después del login
En ella se podrá elegir distintas opciones entre las cuales nos interesa el botón Entrenar. Una vez pulsado
veremos que nos aparecen cinco opciones, las tres últimas son las que nos conciernen en este proyecto, carrera,
bicicleta y pulsómetro.
Figura 5-2: Pantalla de selección del entrenamiento
65
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
5.1.1 Carrera
A esta pantalla se accede pulsando el botón correspondiente en la pantalla previa. Inicialmente se muestra una
pantalla la cual buscará el dispositivo ANT+ cercano. En caso de que en el primer intento no lo encuentre, se
puede pulsar el botón “Search Again” para que realice una nueva búsqueda.
Figura 5-3: Búsqueda del sensor para el modo carrera
Una vez encontrado aparecerá el identificador del sensor, tras pulsar sobre él se mostrará la opción para poder
guardarlo como dispositivo poniéndole un nombre. La próxima vez que se realice la búsqueda aparecerá su
nombre en vez del identificador. En el caso de ejemplo se ha guardado como Carrera.
Figura 5-4: Guardar el sensor de carrera en la lista de favoritos
Una vez que se ha guardado se mostrará la pantalla para el modo Carrera. En ella aparecerá en tiempo real la
información obtenida por el sensor. A continuación, se va a explicar cada elemento de la pantalla:
Manual de Usuario
66
Figura 5-5: Pantalla modo carrera
1. El dato y valor en esta zona de la pantalla irá cambiando cada diez segundos para mostrar uno por uno el
valor de la velocidad, distancia, tiempo y pasos realizados hasta el momento.
2. Velocidad actual en Km/h.
3. Tiempo acumulado en horas, minutos y segundos.
4. Distancia recorrida hasta el momento en kilómetros y metros.
5. Número de pasos realizados.
6. Checkbox para guardar los datos en la base de datos.
Si durante el ejercicio se desea guardar la información para poder consultarla en cualquier momento se deberá
pulsar sobre checkbox correspondiente y aparecerá un mensaje indicando que se comienza a guardar la
información.
Figura 5-6: Mensajes para la grabación de datos
En el caso que se desee pausar sólo habrá que pulsar de nuevo el mismo checkbox y se mostrará también un
mensaje indicando que se pausa la grabación de datos.
7. Checkbox para guardar la ubicación en la base de datos.
Si se marca el checkbox, comenzará el guardado de las coordenadas GPS cada sesenta segundos para su
posterior consulta. Para ello el GPS debe estar activado en el dispositivo, si no aparecerá el siguiente mensaje
67
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
para activarlo.
Figura 5-7: Mensaje de aviso para activar el GPS
8. Botón para acceder a la pantalla de gráficos.
Cuando se pulsa este botón se accede a la pantalla en la cual se pueden ver los datos.
9. Botón para acceder a la pantalla de mapas.
Cuando se pulsa este botón se accede a la pantalla que muestra las posiciones en la cual ha estado ubicado el
atleta durante el ejercicio.
5.1.2 Bicicleta
Para acceder a esta pantalla hay que pulsar el botón de Bicicleta mostrado en la ilustración 5- 2. Igual que en el
caso anterior se mostrará una pantalla para buscar el dispositivo ANT+, en este caso será el sensor de bicicleta,
y se podrá guardar con el nombre que deseemos.
Figura 5-8: Búsqueda del sensor para el modo bicicleta
Manual de Usuario
68
Figura 5-9: Guardar el sensor de bicicleta en la lista de favoritos
Figura 5-10: Pantalla modo bicicleta
Una vez que se ha seleccionado el sensor aparecerá en tiempo real la información obtenida por el sensor de
velocidad y cadencia de la bicicleta. A continuación, se va a explicar cada elemento de la pantalla:
1. El dato y valor en esta zona de la pantalla irá cambiando cada diez segundos para mostrar uno por uno el
valor de la velocidad, distancia, tiempo acumulado y la cadencia de pedaleo realizados hasta el momento.
2. Velocidad actual en Km/h.
69
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
3. Tiempo acumulado en horas, minutos y segundos.
4. Distancia recorrida hasta el momento en kilómetros y metros.
5. Cadencia de pedaleo.
6. Checkbox para guardar los datos en la base de datos.
Si durante el ejercicio se desea guardar la información para poder consultarla en cualquier momento se deberá
pulsar sobre checkbox correspondiente y aparecerá un mensaje indicando que se comienza a guardar la
información.
Figura 5-11: Mensajes para la grabación de datos
En el caso que se desee pausar sólo habrá que pulsar de nuevo el mismo checkbox y se mostrará también un
mensaje indicando que se pausa la grabación de datos.
7. Checkbox para guardar la ubicación en la base de datos.
Si se marca el checkbox, comenzará el guardado de las coordenadas GPS cada sesenta segundos para su
posterior consulta. Para ello el GPS debe estar activado en el dispositivo, si no aparecerá el siguiente mensaje
para activarlo.
8. Botón para acceder a la pantalla de gráficos.
Cuando se pulsa este botón se accede a la pantalla en la cual se pueden ver los datos.
9. Botón para acceder a la pantalla de mapas.
Cuando se pulsa este botón se accede a la pantalla que muestra las posiciones en la cual ha estado ubicado el
atleta durante el ejercicio.
5.1.3 Pulsómetro
A esta pantalla se accede pulsando el botón correspondiente en la pantalla previa. Inicialmente se muestra una
Figura 5-12: Mensaje de aviso para activar el GPS
Manual de Usuario
70
pantalla la cual buscará el dispositivo ANT+ cercano.
Una vez encontrado aparecerá el identificador del sensor, tras pulsar sobre él accederemos a la pantalla donde
se muestra la información del pulsómetro en tiempo real.
A continuación, se va a explicar cada elemento de la pantalla:
Figura 5-13: Pantalla modo pulsómetro
1. Muestra un gráfico con las últimas pulsaciones y se le va añadiendo la pulsación actual cada segundo.
2. Pulso actual.
3. Tiempo durante el que se está midiendo el pulso.
4. Pulso medio.
5. Número de veces que se ha medido la pulsación.
6. Checkbox para guardar los datos en la base de datos.
Si durante el ejercicio se desea guardar la información para poder consultarla en cualquier momento se deberá
pulsar sobre checkbox y aparecerá un mensaje indicando que se comienza a guardar la información.
En el caso que se desee pausar sólo habrá que pulsar de nuevo el mismo checkbox y se mostrará también un
mensaje indicando que se pausa la grabación de datos.
Figura 5-14: Mensajes para la grabación de datos
71
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
7. Checkbox para guardar la ubicación en la base de datos.
Si se marca el checkbox, comenzará el guardado de las coordenadas GPS cada sesenta segundos para su
posterior consulta
Para ello el GPS debe estar activado en el dispositivo, si no aparecerá el siguiente mensaje para activarlo.
8. Botón para acceder a la pantalla de gráficos.
Cuando se pulsa este botón se accede a la pantalla en la cual se pueden ver los datos.
9. Botón para acceder a la pantalla de mapas.
Cuando se pulsa este botón se accede a la pantalla que muestra las posiciones en la cual ha estado ubicado el
atleta durante el ejercicio.
5.1.4 Gráfico
A esta pantalla se accede pulsando el botón gráfico de cada una de las pantallas que se han detallado
anteriormente (carrera, bicicleta, pulsómetro).
Figura 5-16: Botón para acceder al gráfico
El objetivo es mostrar la información obtenida de los ejercicios en un gráfico.
Figura 5-15: Mensaje de aviso para activar el GPS
Manual de Usuario
72
Figura 5-17: Pantalla para mostrar los gráficos
Las distintas partes son:
1. Intervalo: se podrá seleccionar el rango de tiempo por el cual quiere que se busque los ejercicios para
mostrarlos en el gráfico.
2. Ejercicios: este combo mostrará el listado de ejercicios guardados en memoria según el intervalo de tiempo
elegido.
3. Datos a mostrar: en función de la pantalla por la que se ha accedido a los gráficos se podrá elegir una serie
de valores para representarlos en el gráfico. Sólo se podrá seleccionar y por lo tanto mostrar uno de ellos.
4. Botón 'Actualizar gráficos': una vez que se han elegido los combos anteriores se pulsará el botón para cargar
la información en el gráfico.
5. Gráfico: Contiene la información que se desea mostrar.
5.1.5 GPS
5.1.5.1 Pantalla de selección de ejercicio
Para acceder a la pantalla de mapa hay que pulsar el botón correspondiente en una de las pantallas carrera,
bicicleta o pulsómetro.
Figura 5-18: Botón para acceder a la pantalla que muestra el mapa
73
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Una vez pulsado nos aparecerá pantalla de selección de ejercicio, en la cual habrá que elegir el ejercicio que
queremos que se muestre en el mapa. A continuación, se pasa a detallar las partes de esta pantalla:
1. Intervalo: Indica el rango de tiempo por el cual se buscarán los ejercicios que luego se van a mostrar en el
mapa.
2. Ejercicios: Se mostrará en este combo el listado de ejercicios guardados en memoria según el intervalo de
tiempo elegido.
3. Botón 'Mostrar Mapa': tras pulsar el botón la aplicación se dirigirá a la pantalla en la cual se mostrará un
mapa con la información de la ubicación durante el ejercicio.
Figura 5-19: Pantalla de selección de ejercicio
5.1.5.2 Pantalla de mapa
Tras seleccionar el ejercicio del cual se quiere obtener la ubicación y pulsar el botón 'Mostrar Mapa' aparecerá
un mapa de Google Maps en el que se podrá ver la posición en la que se encontraba el atleta en cada momento
del ejercicio como un marcador.
Manual de Usuario
74
Figura 5-20: Pantalla de mapa
La información que se muestra en el marcador será primero el tipo de ejercicio, seguido por el número del
ejercicio, fecha y orden de la ubicación.
Figura 5-21: Detalle de la ubicación
75
6 CONCLUSIONES
omo se puede apreciar en el presente proyecto, se ha realizado una ampliación de una aplicación
Android de entrenamiento personalizado con la posibilidad de recoger información de distintos sensores
ANT+ y del GPS. Se le ha añadido valor a la dicha aplicación ya que el usuario puede ahora conocer en
tiempo real su pulsación, su velocidad, distancia recorrida, étc… al realizar su ejercicio, así como guardar la
información para consultarla en el futuro o ver en un gráfico la evolución de su ejercicio. La aplicación ahora
puede ser más atractiva para los usuarios ya que el rango de posibilidades es más amplio.
A nivel personal y revisando los objetivos propuestos al comienzo del proyecto, veo que realizar el proyecto
me ha servido para mejorar mis cualidades con la programación de aplicaciones para dispositivos móviles, y
por consiguiente para otros lenguajes de programación similiares como Java, conocer con más detalle la
tecnología ANT+, así como otras tecnologías para el guardado de información en móviles como SQLite…
6.1 Puntos de mejora
Realizando los últimos cambios en el proyecto me vinieron a la mente distintas funcionalidades que podría ser
interesantes añadirlas a la aplicación. A parte de que es posible añadirle la posibilidad de recoger información
de otros sensores ANT+, también se le podría añadir la posibilidad de exportar los datos guardados en el
teléfono, ya sea para conservarlos o para compartirlos con otros usuarios.
Otras de las cosas que sería interesante incluir en futuras versiones es la posibilidad de usar simultáneamente
varios sensores ANT+, ya que actualmente sólo es posible usar al mismo tiempo el GPS y uno de los sensores
ANT+.
C
-
76
BIBLIOGRAFÍA
[1] Descubriendo Gitlab - https://inlab.fib.upc.edu/es/blog/descubriendo-gitlab
[2] Video Youtube Gitlab CE tutorial - https://www.youtube.com/watch?v=0z28J0RfaJM
[3] Desarrollo de aplicaciones para Android - Joan Ribas Lequerica Editorial Anaya
[4] Página oficial de ANT + - https://www.thisisant.com
[5] Distintas consultas a la web https://stackoverflow.com/
[6] Web oficial de Android - https://developer.android.com/
[7] Add google play services to your project - https://suslovjb.wordpress.com/2013/09/01/how-to-add-google-
play-services-sdk-to-your-project-part-1/
[8] Tutorial de sqlite - http://www.hermosaprogramacion.com/2014/10/android-sqlite-bases-de-datos/
[9] Gestión de alarmas - http://www.carlos-garcia.es/tutorial/android-alarmas-alarmmanager
[10] SQLite - web oficial https://www.sqlite.org/cli.html
[11] Map android api https://developers.google.com/maps/documentation/android-api/
[12]https://developer.xamarin.com/guides/android/platform_features/maps_and_location/maps/obtaining_a_g
oogle_maps_api_key/
[13] https://developers.google.com/places/android-api/signup?hl=es-419
[14] Proyecto Fin de Carrera Aplicación Android para la rehabilitación física de usuario usando MySQL,
PHP y codificación JSON. Antonio J. Díaz Lora.
77
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
78
ANEXO A: CÓDIGO JAVA Y XML
test.DroidLogin.sqlite
AtletaReaderDBHelper.java
79
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
CursorToModel.java
Anexo A: Código Java y xml
80
81
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
82
83
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
DataSource.java
Anexo A: Código Java y xml
84
85
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
86
87
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
test.DroidLogin.bicicleta
ActivityBicicleta.java
Anexo A: Código Java y xml
88
89
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
90
91
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
92
93
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
94
Bicicleta.java
95
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
96
test.DroidLogin.carrera
ActivityCarrera.java
97
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
98
99
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
100
101
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Carrera.java
test.DroidLogin.gps
ActivityGPS.java
Anexo A: Código Java y xml
102
103
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
ActivityMapa.java
Anexo A: Código Java y xml
104
GPS.java
a
105
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
GPSTracker.java
Anexo A: Código Java y xml
106
MyReceiver.java
107
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
test.DroidLogin.grafico
ActivityGrafico.java
Anexo A: Código Java y xml
108
109
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
110
111
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
IdRuta.java
Anexo A: Código Java y xml
112
test.DroidLogin.pulsometro
Activity_AsyncScanPulsometro.java
113
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
114
115
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
ActivityPulsometro.java
Anexo A: Código Java y xml
116
117
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
118
119
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
120
Pulsometro.java
121
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
test.DroidLogin.utils
Utils.java
Anexo A: Código Java y xml
122
Layout
Activity_async_scan.xml
123
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Activity_bicicleta.xml
Anexo A: Código Java y xml
124
125
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
126
Activity_carrera.xml
127
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
128
129
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Activity_gps.xml
Anexo A: Código Java y xml
130
Activity_grafico.xml
131
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Activity_map.xml
Activity_multidevice_filter.xml
Anexo A: Código Java y xml
132
Activity_multidevice_scan.xml
133
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Activity_pulsometro.xml
Anexo A: Código Java y xml
134
135
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
Anexo A: Código Java y xml
136
Layout_multidevice_searchresult.xml
137
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
AndroidManifest.xml
Anexo A: Código Java y xml
138
139
Uso de sensores ANT+ en aplicación de entrenamiento personalizado
String.xml