Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

BTControl

BTCONTROL


[ENGLISH VERSION]

Descargue BTControl


INTRODUCCIÓN


BTControl permite enviar señales pre-definidas a un dispositivo conectado mediante Bluetooth.
Su uso principal es para controlar robots realizados con Arduino y similares. ¡Y es software libre! (Código en GitHub).

Tiene dos sistemas de control, el modo Primo y el modo Mando.

Primo es un juego basado en Arduino cuyo objetivo es guiar a un pequeño robot mediante la creación de secuencias de instrucciones utilizando bloques de instrucción de colores.

El juego original se compone de dos partes: el robot y el programador.
BTControl – Primo, permite sustituir el programador de madera.

BTControl – Mando está concebido para ser usado como control a distancia de forma similar a los vehículos de radio-control.
Además incluye 10 botones de funciones (De A a J) y 5 botones de Primo.

Presentación:

Demo completa:

Ir al índice


BTControl – PRIMO


CÓMO FUNCIONA EL PROGRAMADOR DE PRIMO

En secuencia, se ponen bloques de colores que indican adelante, gira a la izquierda o a la derecha.
Al presionar el botón rojo se envía al robot el mensaje generado, que comienza a seguir las instrucciones.
Además existe un bloque (verde redondo) que permite ejecutar los cuatro bloques del rectángulo verde (Rutina).

SIGNIFICADO DE LOS BLOQUES

  • Rojo [flecha recta]: Avanzar
  • Amarillo [giro]: Girar a la derecha
  • Azul [giro]: Girar a la izquierda
  • Verde [Rutina]: Ejecuta los cuatro bloques del rectángulo verde
  • Gris [posición]: Indica que no hay ningún bloque (se ignora)

Ir al índice


BTControl – MANDO


CÓMO FUNCIONA EL MANDO DE CONTROL

El mando tiene una rueda de control en el lado derecho que permite controlar un robot de forma similar a los vehículos de radio-control.
Mientras se indica una dirección el robot continua avanzando, hasta que se devuelve el control al centro, indicándose al robot que pare.
También incluye 5 botones similares a los controles de Primo. Estos botones causan que el robot realice movimientos discretos, con un tiempo establecido para cada uno.
Además incluye 10 botones de funciones (De A a J) que, según el robot, pueden permitir controlar luces, sonido y cualquier otra función del robot.

Ir al índice


CONECTAR ROBOT


BTControl permite controlar robots emparejados mediante Bluetooth.
La opción “Conexiones” del menú de configuración muestra el control de bluetooth de su dispositivo, que permite emparejar dispositivos.
Los dispositivos emparejados aparecen en el menú de BTControl, para que seleccione cómodamente el que desea utilizar.

También puede activar en la configuración la opción “Auto-Conectar” que intenta conectar automáticamente con el último dispositivo con el que se conectó.

Si conecta automáticamente a un dispositivo y quiere conectar con otro diferente, deshabilite la opción “Auto-Conectar”.
Ir al índice


SOLUCIÓN DE PROBLEMAS

El dispositivo que quiero utilizar no aparece en el menú

Utilice la configuración de Bluetooth para emparejar el dispositivo. Si sigue sin aparecer pruebe a reiniciar el programa.

El dispositivo no conecta correctamente

Ocurren errores al enviar las señales

Pruebe a:

  1. Desde la configuración de Bluetooth borre el dispositivo
  2. Reinicie ambos dispositivos
  3. Vuelva a emparejar el dispositivo

Ir al índice


DESARROLLADORES


El robot debe disponer de un módulo Bluetooth operativo (ejemplos en mi web).
BTControl envía señales de un solo caracter que el robot debe interpretar al recibir.
Las señales enviadas pueden modificarse en “Configuración”, pero si no se modifica son las siguientes:

  • Señales de Primo*:
    • Delante (Rojo): V
    • Izquierda (Azul): W
    • Derecha (Amarillo): Y
  • Señales tipo Primo (desde el mando):
    • Stop (Verde): X
    • Detrás (Rojo): Z
  • Señales de mando de control:
    • Números del 1 al 9, siendo el 1 delante-izquierda, 2 delante, … 5 parado, … 9 atrás-derecha
  • Botones de función:
    • Botones de A a J envían el caracter indicado

[*] En el modo Primo, al pulsar el botón rojo (ejecutar), BTControl compone el mensaje programado y le añade un ‘0’ al final.

Puede recuperar los datos originales desde el menú de configuración, pulsando la tecla menú y seleccionando “Carga preferencias originales”.

Plantilla de código Arduino


Descargar código

/*
 ***********************************
 *            BTCONTROL            *
 ***********************************
 * 2014 - Guimi (http://guimi.net) *
 ***********************************
 *
 * Este programa implementa un robot controlado por bluetooth utilizando los comandos pre-definidos del programa
 * BTControl para Android (BTControl - 2014 Guimi - http://guimi.net)
 *
 * El programa requiere de un modulo Bluetooth HC-05 para la comunicacion
 *
 * El ciclo principal escucha las instrucciones recibidas por Bluetooth y si las reconoce las ejecuta
 *
 * Para DEBUG se debe configurar el modulo serial a 9600 baudios con "Ambos NL & CR"
 *
 * 2014 - Guimi (http://guimi.net)
 *
 */

// DEBUG
//----------
#define DEBUG false // Indica si debemos realizar DEBUG mediante el puerto serie


// LIBRERIAS
//----------
#include <SoftwareSerial.h> //Librería que permite establecer comunicacion serie en pins diferentes al 0 y 1


// CONSTANTES
//-----------
#define BT_Rx 10 // Recepcion BT
#define BT_Tx 11 // Transmision BT
#define LED_ESTADO 13 // Pin del LED que marca el estado


// VARIABLES
//----------
int caracter; // Caracter recibido


// MODULOS
//--------
SoftwareSerial BT(BT_Tx,BT_Rx); // Inicializamos el BT, indicando los pines de Tx y Rx


// FUNCION SETUP
//--------------
void setup() {
  // Definimos cada pin como entrada o salida
  pinMode(LED_ESTADO,OUTPUT);

  // Indicamos que aun no hemos iniciado
  digitalWrite(LED_ESTADO, LOW);

  // Esperamos a que este encendido el modulo BT
  delay(500);
  // Preparamos la comunicacion mediante el modulo BT
  BT.begin(9600);
  delay(500);
  BT.flush();

  // Preparamos la comunicacion mediante el puerto serie y el modulo BT
  if (DEBUG) {
    Serial.begin(9600);
    
    // Notificamos que estamos listos
    Serial.write("Preparado:\n");
  }

  // Indicamos el inicio
  digitalWrite(LED_ESTADO, HIGH);

}


// FUNCION LOOP
//-------------
void loop() {

  // Si hay algo pendiente en el puerto Serial lo transmitimos
  // de forma transparente al modulo BT (que lo envia directamente al aparato vinculado)
  if (Serial.available()) {
    // Escribimos en el puerto BT lo que leemos en el puerto serie
    BT.write(Serial.read());
  }


  // Si hay algo pendiente en el puerto BT lo transmitimos
  // de forma transparente al puerto serie y buscamos comandos conocidos
  if (BT.available()) {
    // Buscamos comandos conocidos
    //---------------------------- 
    // Leemos el puerto
    caracter = BT.read();
    // Escribimos en el puerto serie lo que leemos en el puerto BT
    if (DEBUG) Serial.write(caracter);

    switch (caracter) {
      // CARACTER 0
      //------------------------------
      case '0':
        break;


      // RUEDA DE CONTROL (MOVIMIENTO)
      //------------------------------
      // Los ponemos los primeros porque necesitan la respuesta mas inmediata
      case '1':
        break;
      case '2':
        break;
      case '3':
        break;
      case '4':
        break;
      case '5':
        break;
      case '6':
        break;
      case '7':
        break;
      case '8':
        break;
      case '9':
        break;

        
      // BOTONES DE FUNCION (A-J)
      //------------------------------
      case 'A':
        break;
      case 'B':
        break;
      case 'C':
        break;
      case 'D':
        break;
      case 'E':
        break;
      case 'F':
        break;
      case 'G':
        break;
      case 'H':
        break;
      case 'I':
        break;
      case 'J':
        break;


      // BOTONES PRIMO Y SIMILARES
      //------------------------------
      case 'V':
        break;
      case 'W':
        break;
      case 'X':
        break;
      case 'Y':
        break;
      case 'Z':
        break;

    
      default: 
        break;

    }

  }
}

Descargar código

Ir al índice


CRÉDITOS



BTControl realizado por Güimi

Imagen de fondo (light_wood_texture) de Petr Kratochvil.

Primo realizado por Solid Labs

Ir al índice