Monitor de pulsaciones del corazón con Arduino/Genuino 101

En la actualidad el número de dispositivos disponibles en Internet ha superado al número  de personas conectadas. La infraestructura que soporta la comunicación entre todos estos dispositivos es también conocida como el Internet de las Cosas(Internet of Things, IoT).

 

La necesidad de crear apps que puedan manejar el IoT ha contribuido al desarrollo de una extensión de MIT App Inventor que proporcione una manera sencilla de conectar los dispositivos.

 

Este tutorial os enseñará como utilizar la placa Arduino/Genuino 101 para leer datos desde un sensor de pulsaciones de corazón(Heart Rate Monitor) utilizando el componente Bluetooth Low Energy(BLE). Si no tienes el sensor original podéis emularlo utilizando un potenciómetro u otro sensor analógico.

Requerimientos

  • Placa Arduino/Genuino 101
  • LED
  • Sensor de pulsaciones del corazón, potenciómetro u otro sensor analógico
  • IDE de Arduino con librerías instaladas BLE y CurieBLE

El Circuito

Esquemático de Fritzing para Arduino 101

Arduino/Genuino 101 Sketch

Antes de realizar la app con App Inventor lo primero de todo es implementar el servicio standard Bluetooth de bajo consumo del Sensor de Pulsaciones de Corazón usando para ello el IDE de Arduino y cargando el sketch dentro de nuestra placa.

 

Podéis copiar el código y pegarlo de la página siguiente:

https://www.arduino.cc/en/Tutorial/Genuino101CurieBLEHeartRateMonitor

 

El funcionamiento básico del sketch se resume en los siguientes puntos:

  1. Declarar el dispositivo periférico BLE(nuestra placa Arduino 101) con su servicio y característica(sensor de pulsaciones).
  2. Esperar una conexión entrante con un dispositivo central(nuestro smartphone o tablet con Bluetooth).
  3. Encender el LED para indicar que la placa está conectada.
  4. Leer el sensor analógico actualizando el valor cuando cambie.
  5. Apagar el LED cuando la conexión termine.

 

Diseño

El diseño de la aplicación utilizará las disposiciones necesarias para mostrar una imagen de un corazón que irá cambiando cuando se produzca la conexión, un conjunto de botones y una etiqueta que mostrará el estado.

Leeremos datos del sensor actualizando el texto de la etiqueta correspondiente una vez los dispositivos estén enlazados. Para poder recibir los valores del sensor tendremos que importar la extensión Bluetooth LE.

Bloques

Al principio inicializaremos tres variables globales para almacenar la dirección de nuestra placa Arduino/Genuino 101 y los UUIDs estándares del servicio Monitor de Pulsaciones del Corazón y su característica para el intercambio de datos. Si no sabes el significado de estos conceptos, deberías revisarlos en la referencia oficial del IoT de MIT App Inventor o en las clases correspondientes del curso.

Cuando la app inicia, deshabilitaremos el botón de nombre "btnDisconnect" y el temporizador...no tiene mucho sentido utilizarlos si no tenemos la conexión todavía establecida.


Al principio, el usuario hará clic en el botón de Scan y obtendrá una lista de dispositivos Bluetooth disponibles. Para seleccionar nuestra placa y conectarnos a ella utilizaremos un Selector de Lista(ListPicker)...ten en cuenta que si tienes más dispositivos Bluetooth alrededor saldrán más...podremos identificar el nuestro por el nombre del servicio.

Si todo va bien actualizaremos la leyenda mostrada por la etiqueta de estado. Habilitaremos también el botón que permite la desconexión del dispositivo periférico y el temporizador.

Cada segundo, el evento del reloj se disparará y nuestra app comprobará la conexión. Si está OK, entonces la aplicación reproducirá el sonido del latido de un corazón y cambiará la imagen mientras intenta una nueva lectura de los datos del sensor.

Si la aplicación detecta cambios en el sensor se disparará un evento del tipo ByteValueChanged. El nuevo valor se asignará al texto de la etiqueta con el sufijo "BPM". Debido a los datos devueltos por el sensor tendremos que utilizar la función matemática round para convertir el dato a un número entero y eliminar el 0 menos significativo con el que nos llegaba el byte.

Para terminar, los botones que permitirán al usuario desconectarse y salir de la app...

¡Eso es todo!

 

Consejo "Problemas al detectar dispositivos bluetooth":

Si tenéis problemas al detectar dispositivos Bluetooth una vez generado el APK es posible que aún esté vigente un fallo de App Inventor con los permisos del componente BLE. Para solucionarlo lo único que tenéis que hacer es añadir en la vista de diseño de vuestro proyecto un componente Cliente o Servidor Bluetooth "de los de antes"...con esto, aunque no lo utilicemos para nada, garantizamos que la app tendrá los permisos necesarios para encontrar otros dispositivos Bluetooth cercanos ;-)


Podéis descargaros el código fuente del proyecto este enlace:

Referencias:

Happy inventing!
 

Jose Luis Núñez

@twajoseluis