Introducción

En esta actividad se programará el Innobot con el fin de controlarlo con un dispositivo móvil  por medio de la aplicación PygmalionApp  y un módulo Bluetooth. En este caso se usará específicamente la referencia  HC-05, pero la aplicación es compatible con todos los módulos v2.0 o v4.0 (BLE).

Materiales

Instalación del Bluetooth

Paso 1

Primero es necesario  revisar la  tarjeta innobot; si cuenta con una de las tarjetas nuevas que son negras, ubique  el bluetooth de la siguiente manera:

Es importante que el módulo Bluetooth quede bien conectado y todas las patas ingresen completamente.

 

Si tiene una tarjeta Innobot azul, debe conectar cable a cable, de la siguiente manera:

Rx a pin 1

Tx a pin 0

Vcc a 5v

Gnd a GND

 

La tarjeta, ya debe estar instalada en el Innobot armado.

Paso 2

Ahora es necesario emparejar el dispositivo móvil, con el módulo Bluetooth, para ello diríjase a la opción Bluetooth del celular, elija la opción activar.

 

 

Ahora, permita que el celular busque dispositivos disponibles.  Generalmente el módulo Bluetooth que se está usando va a aparecer con el nombre de “HC-05”; seleccione ese.

 

Para emparejar el dispositivo móvil con el modulo Bluetooth, es necesaria una contraseña; esta va a ser “1234”. Si por algún motivo esta no funciona, intente con “0000”.

 

 

 

 

Una vez el celular haya emparejado con el módulo Bluetooth, este debe aparecer dentro de la lista de dispositivos conectados.

Programación del Innobot

Paso 1

Para que el Innobot pueda interactuar con la APP, se debe subir al robot el código a continuación. Dependiendo de la programación que realice, los movimientos y acciones van a variar, el código que se presenta es una base para que el usuario pueda generar casos propios acordes a sus necesidades.

  1. Abra el programa CODE.
  2. Copie y pegue el programa sugerido
  3. Suba el código a la tarjeta Innobot

Programa Básico para usar la PygmalionApp (Gamepad)

Descripción de Funciones
  1. Declaraciones. Se definen todas las constantes y/o variables globales del programa.
  2. setup(). Se configura el estado inicial del Innobot y la comunicación vía bluetooth con la App.
  3. loop(). Revisa de cíclicamente los datos que envía la App al Innobot, determinando el tipo de dato se está enviando y decidiendo a qué función debe saltar el programa.
  4. getButtonState(int). Recibe el valor de cada botón y lo traduce en una acción del Innobot.
/*****DECLARACIONES******/
#define VERSION     "\n\nInnobot App V1.0.0 BASIC" //Declaración de variable opcional con la versión del código
#define    ledPin       13 //Declaración del pin 13 como LED de prueba


/*****CONFIGURACIONES******/
void setup()  {

  motorSpeed(M1 , 80); //Configuración del motor M1 a 80% de su velocidad
  motorSpeed(M2 , 80); //Configuración del motor M2 a 80% de su velocidad
  motorSpeed(M3 , 80); //Configuración del motor M3 a 80% de su velocidad

  Serial.begin(9600); //Fijar la velocidad en baudios para la transmisión de datos en serie. 
  Serial1.begin(9600); //Fijar la velocidad en baudios para la transmisión de datos en serie. 

  pinMode(ledPin, OUTPUT); //Configurar el pin 13 de salida 
  
  Serial.println(VERSION); //Imprimir la versión del programa en consola
}

/*****CICLO INFINITO******/
void loop() {
  if (Serial1.available())  { //Si hay datos disponibles en el serial
    delay(2); //Esperar 2 milisegundos
    int s = Serial1.read(); //Guardar el dato de entrada del serial en una variable s.
    Serial.print("El comando enviado es: "); //Imprimir en el monitor
    Serial.println(s); //Imprimir en el monitor el comando enviado desde la App.
    getButtonState(s); //Enviar dato s a la función getButtonState(s) y ejecutarla.
  }
}

/**FUNCIÓN DE ESTADOS DE BOTONES**/
void getButtonState(int bStatus)  {
  
  // -----------------  BOTÓN #1 - AZUL  -----------------------
  if (bStatus == 'A') { //Si el valor recibido corresponde a 'A' o lo que es lo mismo 65 en entero
    Serial.println("** Button_1_BLUE: ON **"); //Imprimir el estado del botón en consola
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH); //Encender LED del pin 13
    myTone(La5 , blanca); //Sonar una nota La5 durante una blanca 
    myTone(Fa5 , blanca); //Sonar una nota Fa5 durante una blanca
  } 
  // -----------------  BOTÓN #2 - ROJO  -----------------------
  else if (bStatus == 'B') { //Sino si el valor recibido corresponde a 'B' o lo que es lo mismo 66 en entero
    Serial.println("** Button_2_RED: ON **"); //Imprimir el estado del botón en consola
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH); //Encender LED del pin 13
    motorOn(M3, FORWARD); //Encender motor M3 hacia adelante
    delay(20); //Esperar 20 milisegundos
  } 
  // -----------------  BOTÓN #3 - AMARILLO  -----------------------
  else if (bStatus == 'C') {
    Serial.println("** Button_3_YELLOW: ON **");
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH);
    myTone(Si5 , blanca);
    myTone(Do5 , blanca);
  } 
  // -----------------  BOTÓN #4 - VERDE  -----------------------
  else if (bStatus == 'D') {
    Serial.println("** Button_4_GREEN: ON **");
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH);
    motorOn(M3, REVERSE);
    delay(20);
  } 
  // -----------------  BOTÓN #5 - ARRIBA  -----------------------
  else if (bStatus == 'E') {
    Serial.println("** Button_5_UP: ON**");
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH);
    goForward(M1 , M2);
  } 
  // -----------------  BOTÓN #6 - DERECHA  -----------------------
  else if (bStatus == 'F') {
    Serial.println("** Button_6_RIGHT: ON **");
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH);
    turnRight(M2 , M1);
  } 
  // -----------------  BOTÓN #7 - ABAJO  -----------------------
  else if (bStatus == 'G') {
    Serial.println("** Button_7_DOWN: ON **");
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH);
    goReverse(M1 , M2);
  } 
  // -----------------  BOTÓN #8 - IZQUIERDA  -----------------------
  else if (bStatus == 'H') {
    Serial.println("** Button_8_LEFT: ON **");
    // Acá se escriben las instrucciones que se desean realizar al presionar el botón...
    digitalWrite(ledPin, HIGH);
    turnLeft(M2 , M1);
  } 
  // -----------------  NINGÚN CASO ANTERIOR  -----------------------
  else { //Sino se cumplen ninguno de los casos anteriores entonces:
    Serial.println();
    motorsOff(M1 , M2); //Apagar motores M1 M2
    motorOff(M3); //Apagar motor M3
    digitalWrite(ledPin, LOW); //Apagar LED
    noTone(8); //Silenciar el Innobot
  }
}

Pygmalion Tech App

Paso 1

Ahora es necesario descargar la aplicación para controlar el Innobot.

  1. Ingrese a la aplicación Play Store o la aplicación por medio de la que descarga todas las aplicaciones, y busque la aplicación Pygmalion.Tech.
  2. Comience el proceso de descarga e instalación.
  3. Una vez instalada la aplicación, presione “Abrir”.
  4. Espere unos segundos a que cargue la aplicación

Paso 2

Cuando abre la aplicación se despliega una solicitud de conexión de bluetooth (el Innobot debe estar encendido y alimentado por las baterías), elija la opción de Conectar Ahora.

Elija de la lista que muestra la aplicación el bluetooth que ha conectado al Innobot, para este caso HC-05.

Una vez seleccionada la opción correcta, espere unos segundos a que aparezca el siguiente mensaje (de lo contrario debe verificar la conexión del bluetooth y que el Innobot esté encendido):

Paso 3

Elija la opción de Gamepad en el menú de opciones de la aplicación.

Ahora espere unos segundos a que cargue el control, si todo ha ido bien, ya es posible controlar el Innobot con el Gamepad.

Verificación Recepción de Datos

Paso 1

Para verificar el funcionamiento de la App y su comunicación con el robot, se puede realizar una prueba en tiempo real a través del Monitor Serie. 

  1. Con el programa para utilizar la App cargado en el Innobot, conecte el robot al PC a través del cable USB.
  2. Abra el programa CODE o BLOCKS.
  3. Ingrese al Monitor Serie.
  4. El bluetooth debe estar conectado al robot correctamente. Verifique la conexión.

Paso 2

  1. Abra el modo Gamepad en la App.
  2. Con el Monitor abierto, empiece a presionar los diferentes botones de la App, verá como cada botón envía un comando hacia el robot. Recuerde que estos comandos son configurables desde la App y la recepción de estos comandos debe ser programada también en el programa que se carga en el robot.

Nota: Los valores que aparecen corresponden a la representación de caracteres en enteros en la tabla ASCII. A continuación dejamos la tabla con la representación de cada caracter.

Conceptos claves

Datos: Se conoce que la palabra Datos proviene del latín “Dtum” cuyo significado es “lo que se da”. Los datos son la representación simbólica, bien sea mediante números o letras de una recopilación de información la cual puede ser cualitativa o cuantitativa, que facilitan la deducción de una investigación o un hecho.

Módulo Bluetooth: Es una determinación  tecnológica para redes inalámbricas que mediante una radiofrecuencia segura (2,4 GHz),  posibilita  la transmisión de voz y datos entre algunos dispositivos,  permite la comunicación  sin cables ni conectores y facilita la creación de  redes inalámbricas domésticas para sincronizar y compartir la información almacenada en ciertos equipos.

Módulo Bluetooth HC-05: Es un módulo con capacidad para gestionar el modo Master y el modo Slave por configuración. Es fácil de utilizar e ideal para pequeños proyectos en los que buscas una comunicación efectiva entre un dispositivo móvil y Arduino u otras tarjetas similares.

Diferencia entre módulo HC-05 Y HC-06:  El módulo HC-05 puede configurarse tanto como Master que, como Slave, mientras el módulo HC-06 solo se puede configurar en el modo Slave. En cuanto al aspecto externo de ambos módulos, son bastante parecidos, pero la mejor manera de diferenciarlos es por los pines del soporte; el HC-06 cuenta con 4 pines, mientras que el HC-05 cuenta con seis. Ahora, acerca del Hardware no hay diferencia entre ambos módulos, mientras que, si la hay en cuanto al Firmware, lo que nos indica la programación interna del módulo.

Más Tutoriales