App para Android finalista del premio Datatón 2018


Les comunico que la app que he realizado llamada "GPS TOTAL RUN" (para Android) ha quedado finalista en los premios DATATÓN 2018 organizados por el Instituto Geográfico Nacional y la Escuela Técnica Superior en Topografía, Geodesia y Cartografía de Madrid.

Creo que es un magnífico ejemplo de lo que se puede llegar a hacer cuando se combina Google Maps, Google StreetView, MAPS javascript API, Android API, OpenStreetMap, PHP, Webservice, HTML5 y la utilización de los sensores del dispositivo (GPS, Inclinómetro, acelerómetro, hall).

Después de haber realizado esta app me he dado cuenta de la potencia, agilidad y facilidad de uso del lenguaje Delphi al programar aplicaciones móviles y animo a los lectores de este blog a que lo prueben y lo comparen con otros lenguajes y sistemas.

Esta app sirve para registrar las rutas que se hacen cuando se está en un vehículo, se hace senderismo o cuando se hace running, también puede cargar rutas en formato KML, GPX y mostrarlas en un visor junto a nuestra posición actual.

Además incorpora más de 30 utilidades que hacen exprimir al máximo el GPS del dispositivo.

DESCRIPCIÓN DE SUS FUNCIONES

- RUTAS: Si haces running, bicicleta o algún otro deporte puedes almacenar la ruta que has realizado, para luego verla en un mapa. Se graba la hora de inicio, hora de fin, duración, distancia, velocidad media, velocidad máxima, desnivel, minutos por Km, altitud máxima y mínima, tiempo en reposo y tiempo en movimiento, etc.
Exporta la ruta al formato GPX, KML y CSV.
Importa rutas del GPS Garmin.
Importa rutas desde la web de Wikiloc en formato GPX, KML.
El usuario puede enviar un link de la ruta para que otros usuarios si lo desean puedan seguirle.
Permite ajustar la ruta a la carretera (evitando los típicos zigzags de los gps)
Colorea la ruta indicando en qué tramos has ido más rápido o más lento.
Muestra gráficos de altitud y velocidad de la ruta.
Graba la ruta en segundo plano.

- ESTADÍSTICAS: Por día, semana y mes y por tipo de actividad.
Informando de los Km. recorridos, tiempo, ritmo y calorías.

- TIEMPOS: Después de hacer varias rutas te informa del tiempo que has tardado en hacer 500 m, 1000 m., 1500 m. etc. en cada una de ellas y lo muestra en un gráfico.

UTILIDADES RELACIONADAS CON EL GPS

- NAVEGACIÓN POR VOZ (selecciona la mejor ruta en coche, a pie o en transporte público)

- CALCULA RUTA ENTRE DOS PUNTOS y muestra indicaciones en texto.

- ELEVACIÓN: Muestra la elevación del terreno a lo largo de una ruta.

- PANEL DE NAVEGACIÓN: Muestra latitud, longitud, velocidad, distancia, aceleración, rumbo, altitud y presión del aire.

- SATÉLITES: Informa del número de satélites que usa el sensor GPS (con indicación de la potencia de la señal, azimut, elevación y país de origen del satélite)
Permite ver en un gráfico cómo varía con el tiempo la potencia de la señal de cada satélite.

- PUNTOS DE INTERÉS: Permite almacenar todos los puntos de interés que necesites (coordenadas, descripción, altitud, tipo de marcador, etc.

- ALTÍMETRO: Obtiene la altitud de 3 maneras: consultando Google Maps, según el dato de la altitud del GPS y midiendo la variación de la presión atmosférica.

- BRÚJULA: Informa del rumbo y del campo magnético.

- PARÁMETROS SOLARES: Muestra la hora del amanecer, el mediodía, minutos de luz, el zenit, azimut, elevación y declinación solar para cada minuto del día con calendario perpetuo.

- TRÁFICO: Visualiza la información del tráfico de tu ciudad en tiempo real.

- METRO: Muestra en el mapa el plano del metro.

- MAPAS OFFLINE: Descarga en tu móvil mapas offline.

- CALCULADORA GEOGRÁFICA. Convierte coordenadas en grados, minutos y segundos a grados / UTM y viceversa.

- SENSORES: Muestra todos los sensores que tiene el dispositivo y los valores que capturan cada uno de ellos.

- EXPORTA rutas y puntos de interés.

- IMPORTA RUTAS desde Wikiloc o desde el GPS Garmin.

- INFORMA DEL ESTADO DEL GPS. Indica coordenadas en Grados, minutos, segundos y UTM, bearing, precisión, first fix, zona UTM, meridiano central de la zona, hora GPS, zona GMT.


- PARKING: Sitúa en el mapa el lugar de estacionamiento del vehículo, permite hacer fotos y añadir una descripción.

- CUADRÍCULA: Muestra el mapa con indicación de la latitud y longitud a intervalos y se actualiza según el zoom del mapa.


- ACTUALIZA DATOS AGPS del dispositivo y si el dispositivo está rooteado añade nuevas utilidades.

- MIDE LONGITUDES / ÁREAS dibujando la ruta sobre el mapa.

- OBTIENE LAS COORDENADAS haciendo clic sobre el mapa.

En la mayoría de los módulos hay paneles de ayuda que te describen con detalle sus características.

Para personas con visión reducida, incorpora la opción de leer en voz alta los parámetros de las pantallas.
Si quieren más información pueden descargarse el siguiente manual 

Si desean contactarme para la realización de apps similares pueden enviarme un email a blogdelphimagic@gmail.com.

Monitorizar los latidos del corazón


Con Delphi, podemos monitorizar los latidos del corazón, utilizando un dispositivo Bluetooth LE

Heart Rate Monitor Bluetooth LE.png 

Esta aplicación actúa en modo cliente y al iniciarse lo primero que hace es buscar un servidor del cual leer los datos de los latidos del corazón.
Este servidor será un dispositivo como los que usan los runners mientras hacen alguna carrera.


Cuando se pulsa el botón "Scan" comienza la búsqueda de un dispositivo Bluetooth LE que implemente el servicio "Heart Rate" para ello utiliza el método "DiscoverDevices" con un timeout y un array de TBluetooth UUID's, en este caso BluetoothLE1.DiscoverDevices(2500, [HRSERVICE]) donde HRSERVICE es un servicio estándar.


TBluetoothUUID = '{0000180D-0000-1000-8000-00805F9B34FB}
 
Después del timeout se dispara el método "OnEndDiscoverDevices"
Para descubrir los servicios disponibles de un dispositivo se utiliza el método "GetServices" y si los encuentra vuelve a disparar el método GetCharacteristic
 
HRMEASUREMENT_CHARACTERISTIC: HRMEASUREMENT_CHARACTERISTIC: TBluetoothUUID  = '{00002A37-0000-1000-8000-00805F9B34FB}'
    BODY_SENSOR_LOCATION_CHARACTERISTIC:BODY_SENSOR_LOCATION_CHARACTERISTIC: TBluetoothUUID  = '{00002A38-0000-1000-8000-00805F9B34FB}'

Despues de conseguir el servicio y sus características comienza a recopilar los datos de los latidos.
Cuando se consigue obtener un valor se llama a "SubscribeToCharacteristic" para recibir datos periódicamente.
Para detener la recepción de datos se llama a "UnSubscribeToCharacteristic". 
El evento OnCharacteristicRead se llama cuando se lee un valor.
Dado que el servidor BluetoothLE envía un paquete con datos "en crudo - modo Raw" para extraer obtener las pulsaciones por minuto hay que seguir la especificación GATT (Heart Rate Measurement Data Package Structure), en cualquier caso en la ayuda de Delphi tenemos varios ejemplos y además desde RAD Studio - Tools - Getit Package Manager podremos descargarnos varios ejemplos.





NOTA: 
No confundir Bluetooh con Bluetooth LE (Low energy).
BluetoothLE Permite la comunicación entre dispositivos de pila de botón y dispositivos Bluetooth, que opera en 2.4 GHz (una de las bandas ISM), con una tasa de transferencia de 1 Mbps en la capa física, tiene soporte para seguridad, ya que puede emplear el sistema de cifrado AES y esquemas de seguridad configurables

Bluetooth permite un ancho de banda mayor en función de la versión:
 
Además Bluetooth LE no necesita parear dispositivos como requiere Bluetooth, tan sólo necesita encontrar un servidor para empezar a funcionar, excepto si la aplicación se ejecuta en Windows 8 o Windows 7, en cuyo caso sí que se necesita parear dispositivos.