Home » Apps » App Android para el control de un robot con el acelerómetro por bluetooth

Login with your Social Account

App Android para el control de un robot con el acelerómetro por bluetooth

  •  
  •  
  •  
  •  
  •  
  •  

Descubre cómo controlar los movimientos de un robot con el acelerómetro de tu Android utilizando AppInventor2 y bluetooth.

A continuación describiremos los elementos fundamentales que debe tener una aplicación con AppInventor2 para el control de un robot móvil con ruedas con el acelerómetro.

En esta entrada, se describirá la aplicación con AppInventor2 cuyo propósito es detectar un dispositivo bluetooth instalado en un robot y enviar un conjunto de “comandos” de movimiento a partir de las medidas obtenidas con el acelerómetro de nuestro móvil. Dado que se utiliza AppInventor2, sólo funcionará con dispositivos Android.

En primer lugar, se diseñará la interfaz de usuario de la aplicación a partir de un proyecto nuevo. En la aplicación de ejemplo utilizaremos un ListPicker para conectar el bluetooth (permite mostrar la lista de dispositivos bluetooth al alcance), un botón para activar el acelerómetro, otro botón para desconectar el bluetooth y por último un botón para cerrar la aplicación. La aplicación requiere además de un componente del tipo cliente bluetooth que gestionará las comunicaciones con nuestro robot.

La apariencia que se obtiene en nuestro caso es la siguiente:

blog1

Tanto los botones como el objeto ListPicker los encontraremos en el apartado de interfaz de usuario. A los botones para activar el acelerómetro, desconectar el bluetooth y cerrar la aplicación los renombraremos: Activar_Acelerometro, Desconectar y Cerrar, respectivamente. El componente ListPicker ha sido renombrado a Conectar_Bluetooth. Para el resto de componentes, utilizaremos su nombre por defecto, esto es, BluetoothClient1 para el cliente bluetooth (en el apartado de Conectividad), que nos permitirá conectarnos por bluetooth y AccelerometerSensor1 para el sensor del acelerómetro (en el apartado de Sensores).

Con el propósito de organizar los botones de la interfaz, se ha utilizado componentes del tipo TableArragement y HorizontalArragement (dentro del apartado Disposicion), que aunque no son necesarios para el funcionamiento de la App, nos ayudará distribuir adecuadamente cada componente por la pantalla de la App. Además se ha añadido un fondo de pantalla por motivos estéticos. Mencionar que ni el cliente bluetooth ni el sensor del acelerómetro son visible en la interfaz, y por ello aparecen justo abajo de la pantalla en la figura anterior. Cuando ya se tiene la interfaz de usuario acabada, vamos con la programación por bloques de nuestra aplicación (accedemos al código de la aplicación pulsando sobre la pestaña/botón “bloques”).

Se pretende por un lado ejecutar un conjunto de instrucciones al iniciar la aplicación como son: 1) la activación de los botones de conectar el bluetooth y cerrar la aplicación; 2) la desactivación de sensor de acelerómetro y los botones del activar al acelerómetro y desconectar el bluetooth, ya que no se activarán hasta que nos hayamos conectado. Para ello, seleccionamos el componente Screen1 (pantalla) y dentro de las posibles acciones a ejecutar seleccionamos el evento Inicializar, agregar instrucciones del tipo poner (set) la propiedad de Habilitado como cierto o falso según se indique. Por otro lado, seleccionamos el botón Cerrar y cuando se haga Clic sobre él ejecutaremos la acción cerrar la aplicación, tal y como se muestra.

blog2

Para conectarnos por bluetooth, debemos considerar dos eventos distintos que ocurrirán cuando pretendamos desplegar un listado sobre el componente Conectar_Bluetooth (tipo ListPicker). El primer evento sucede antes de seleccionar sobre qué dispositivo queremos conectarnos y por tanto utilizaremos el evento AntesDeSelección para rellenar la lista de dispositivos a conectar. La lista la devuelve el propio cliente bluetooth y por tanto establecemos los Elementos de Conectar_Bluetooth como la lista de DireccionesYNombres devuelta por BluetoothClient1. Esto se hará siempre y cuando el cliente bluetooth esté disponible (no utilizado por otra App). El segundo evento sucede al seleccionar uno de los elementos de la lista. Para ello, llamaremos al método Conectar de BluetoothClient1 con la dirección de la Selección del componente Conectar_Bluetooth. Si la conexión es correcta, entonces habilitaremos los botones Activar_Acelerometro y Desconectar. La acción Clic del componente Desconectar realiza precisamente las acciones contrarias, es decir, deshabilita los botones Activar_Acelerometro y Desconectar, deshabilita el sensor de acelerómetro y activa el componente ListPicker para seleccionar el dispositivo bluetooth, tal y como se muestra en la imagen:

blog3

Cuando ya tenemos programado el bluetooth, se puede comenzar con el acelerómetro. En este caso, se va a hacer un programa sencillo en el que hayan 8 posibilidades de movimiento, además del freno. Por este motivo, se han creado nueve procedimientos para cada una de las posibles órdenes de movimiento en los ocho puntos cardinales más el centro (que representa el paro). Se ha asignado una cadena de texto a cada una de las opciones de movimiento, siendo la asignación realizada para cada uno de los procedimientos definidos la siguiente: Delante (“a”), Detrás (“b”), Izquierda (“c”), Derecha (“d”), Derecha_delante (“e”), Derecha_detras (“f”), Izquierda_delante (“g”), Izquierda_detras (“h”) y Parar (“i”).

Cada uno de estos procedimientos llaman al método EnviarTexto del cliente bluetooth (BluetoothClient1) con el valor de la cadena de texto correspondiente.

blog4

Para poder utilizar el acelerómetro hay que habilitarlo mediante el botón de activar acelerómetro, que al hacer Clic sobre el botón, estableceremos como cierto la propiedad Habilitado del objeto AccelerometerSensor1.

El acelerómetro se programa para que cuando se detecte un cambio en alguno de los valores, compruebe cuales son los valores en cada uno de los ejes y mediante un conjunto de sentencias if…else llame a uno de los procedimientos declarados anteriormente. De -2.99 a 2.99 en cada uno de los ejes, se considerará que no hay movimiento. A partir de 3 o -3, se considerará que en ese eje si hay movimiento y se seguirá el siguiente razonamiento:

blog5

El acelerómetro funciona en los 3 ejes (x,y,z) con valores entre -9 y 9, aunque en nuestra aplicación solo nos sirven dos (x,y), ya que z es la dirección que atraviesa la pantalla, tal y como se muestra en pantalla:

acelerometro_app

 

Se pueden descargar los archivos en formato .aia (Para modificar el proyecto de AppInventor2) y en formato .apk (Para instalar en el móvil):

Robot oruga

En esta entrada encontraréis un ejemplo del uso de la App para el control remoto de un robot oruga:

Diseño de un robot oruga imprimible

  •  
  •  
  •  
  •  
  •  
  •  

      Descubre cómo diseñar todas las piezas necesarias para montar un robot imprimible en 3D y del control electrónico. Relacionado

Posted in Autodidacta, Bachillerato/Formacion Profesional, Grado, Robots (otros), Robots con ruedas | Comentarios desactivados en Diseño de un robot oruga imprimible

A %d blogueros les gusta esto: