MIT App Inventor 2: Robot controlado por Bluetooth LE

Introducción

En este tutorial vamos a aprender cómo realizar una aplicación para dispositivos Android con el entorno de desarrollo MIT App Inventor 2 con el objetivo de controlar mediante Bluetooth Low Energy el robot de mi anterior tutorial  (ver tutorial) .

La idea es hacer una aplicación sencilla que tenga cuatro flechas que representen los movimientos de avanzar, retroceder, girar a la izquierda y girar a la derecha.

También necesitaremos añadir los botones para poder escanear y conectar dispositivos Bluetooth Low Energy (BLE). 

El aspecto final será el que se muestra en la siguiente imagen:

En nuestro caso la placa que controla el robot es una placa Arduino MKR WiFi 1010 que posee BLE gestionado por el módulo NINA-W102 con calificación de Bluetooth 4.2.

Necesitaremos tener unos conceptos básicos de la tecnología Bluetooth Low Energy  para entender su funcionamiento. En los siguientes enlaces tenéis unas guías donde se explica su funcionamiento:

https://www.arduino.cc/en/Reference/ArduinoBLE

https://learn.adafruit.com/introduction-to-bluetooth-low-energy/introduction

Nuestro sistema Bluetooth por tanto estará formado por los siguientes dispositivos:

    • Dispositivo central:  Teléfono móvil con la aplicación que crearemos.
    • Dispositivo periférico: Arduino MKR WiFi 1010.

Programación

Aplicación ANDROID

Lo primero que tendremos que realizar es crear un proyecto nuevo desde la Web de MIT App Inventor 2 e instalar (importar) la última versión de la extensión BluetoothLE.aix para poder tener disponibles los bloques necesarios para trabajar con Bluetooth Low Energy.

    • Enlace de descarga de la extensión BluetoothLE.aix (descargar) 
    • Tutorial de la extensión (ver)

En el siguiente documento en inglés (ver) se explica cómo importar la extensión y programar los bloques para poder escanear y vincular un dispositivo Bluetooth Low Energy con esta extensión:

Empezaremos creando dos variables globales para poner los identificadores (UUID) tanto del servicio como de la característica asociada al servicio que tendrá el dispositivo periférico (en nuestro caso el robot):

Crearemos una función que inicialice los elementos de la pantalla a sus valores por defecto:

Los siguientes bloques representan la gestión de los eventos para escanear y conectar dispositivos Bluetooth Low Energy y de esta manera poder vincular la aplicación con nuestro robot:

Los siguientes bloques representan las funciones que envían la instrucción (en nuestro caso una letra) al robot por Bluetooth Low Energy cada vez que se interactua con cada una de las flechas que representar los movimientos:

Como vemos existen dos tipos de eventos asociados a las flechas de movimiento:

El evento “TouchDown” representa la pulsación del botón (flecha de movimiento) que enviará la instrucción correspondiente indicando al robot el movimiento tiene que realizar (“F”: avanzar, “B”: retroceder, “L”: girar a la izquierda y “R”: girar a la derecha).

El evento “TouchUp” representa cuando se deja de pulsar el botón (flecha de movimiento) y que hará que el robot se pare (“S”: parar).

Por tanto mientras mantengamos pulsado un botón (flecha de movimiento) el robot ejecutará el movimiento correspondiente y solo cuando dejemos de pulsarlo el robot se parará.

Finalmente se han añadidos dos bloques para el control de errores:

En el siguiente enlace tenéis el proyecto completo para que podáis replicarlo o modificarlo en vuestra cuenta de MIT App Inventor 2 así como el fichero apk para instalarlo en el móvil (recordar de activar en vuestro móvil que se puedan instalar aplicaciones con origen desconocido)

https://github.com/avilmaru/robotRCporApp/tree/master/central

Robot

La programación del robot la tenéis disponible en el siguiente enlace y solo bastará cargarla en la placa Arduino MKR WiFi 1010:

https://github.com/avilmaru/robotRCporApp/tree/master/peripheral

NOTA: El montaje del robot lo podéis ver en mi anterior tutorial  (ver tutorial) .