En esta guía aprenderás a controlar el Innobot desde el control remoto IR.

Info

  • Principiantes
  • Edades: 11+

Temas STEAM

  • Tecnología.
  • Ingeniería.
  • Matemáticas.

¿Qué aprendes en este tutorial?

  • Aprenderán en que consiste los números hexadecimales.
  • Identificarán qué número hexadecimal corresponde a cada tecla del control remoto.
  • Aprenderá a leer con el Innobot los comandos desde el control remoto y le asignará una función a cada comando.
  • Controlará el movimiento del Innobot desde un control IR.

Recomendaciones

  • Permitir que los estudiantes cometan errores en el ensamble, esto hará que ellos aprendan de ellos adquiriendo habilidades para resolverlos.

Desarrollo de las actividades 

Paso 1 

Conexión del sensor a la tarjeta Innobot

Conecte el Módulo Receptor Infrarrojo Pygmalion + Cable a la entrada de sensor J4 (o el que tengamos disponible).

Paso 2

Identificación del código de cada botón del control

Con este programa inicial, se puede saber que código hexadecimal está asociado a cada botón de nuestro control.

En el control remoto, cada botón está asociado a un número hexadecimal de 6 a 8 caracteres. Aunque los controles parezcan iguales, no necesariamente tienen los mismos códigos asociados a cada botón, por esto es necesario identificar que código tiene cada botón del control con el que vamos a trabajar.

Paso 3

En CODE, realice el siguiente programa:

#include <IRremote.h>                     //incluir esta librería para utilizar sensor IR
int receptor = J4;                        //conectamos el sensor IR en el puerto J4
IRrecv irrecv(receptor);                  //especifica a través de que pin se va a recibir la informacion (receptor = J4)
decode_results codigo;                    //objeto código de clase decode_result, oriundo de IRremote.h

void setup()
{
  Serial.begin(9600);                     //inicializar el puerto de comunicación serial a 9600 baudios
  irrecv.enableIRIn();                    //iniciar la recepción del sensor IR
}

void loop()
{
  if (irrecv.decode(&codigo))             //si hay algún evento en la lectura del sensor IR, hacer...
  {
    Serial.println(codigo.value, HEX);    //imprimir el valor leído por el sensor IR en hexadecimal por el puerto serial
    delay(100);                          //esperar 100 milisegundos
    irrecv.resume();                      //reiniciar la lectura del sensor IR
  }
}

Esta aplicación solo podemos programarla en CODE

Paso 4

Suba el programa al Innobot y abra la «Consola Serial» para ver los códigos que envía el control remoto a presionar sus botones.

Nota: El código FFFFFFFF no corresponde a una tecla en particular, este código aparece cuando se deja un botón presionado.

Paso 5

Oprima el botón del control, apuntando hacia el sensor IR y anote el valor en hexadecimal que aparece.

Paso 6

Haga  el procedimiento del paso 5 para cada botón que vaya a usar del control y apunte los valores que aparecen en la consola serial.

 Programación del Innobot (sin dejar presionado el botón)

Con este programa vamos a lograr que el Innobot se mueva en diferentes direcciones o se detenga según el botón que oprimamos en el control remoto.

En la siguiente tabla aparecen las acciones que debe hacer el Innobot según el botón que presionemos:

Paso 1

En CODE, digitamos el programa

#include <IRremote.h>                     //incluir esta librería para utilizar sensor IR
int receptor = J4;                        //conectamos el sensor IR en el puerto J4
IRrecv irrecv(receptor);                  //especifica a través de que puerto se va a recibir la información (receptor = J4)
decode_results codigo;                    //objeto código de clase decode_result, oriundo de IRremote.h

void setup()
{
  irrecv.enableIRIn();                    //iniciar la recepción del sensor IR
  motorSpeed(M1, 100);                    //definir la velocidad del motor M1 al 100%
  motorSpeed(M2, 100);                    //definir la velocidad del motor M2 al 100%
}

void loop()
{
  if (irrecv.decode(&codigo))             //si hay algún evento en la lectura del sensor IR, hacer...
  {
    irrecv.resume();                      //reiniciar la lectura del sensor IR
    if (codigo.value == 0xFF02FD)         //si oprime el botón para ir hacia adelante
    {
      motorOn(M1, FORWARD);
      motorOn(M2, FORWARD);
    }
    if (codigo.value == 0xFF9867)         // si oprime el botón para reversar, hacer...
    {
      motorOn(M1, REVERSE);
      motorOn(M2, REVERSE);
    }
    if (codigo.value == 0xFF906F)         //si oprime el botón para girar a la derecha, hacer...
    {
      motorOn(M1, REVERSE);
      motorOn(M2, FORWARD);
    }
    if (codigo.value == 0xFFE01F)         //si oprime el botón para girar a la izquierda, hacer...
    {
      motorOn(M1, FORWARD);
      motorOn(M2, REVERSE);
    }
    if (codigo.value == 0xFFA857)         //si oprime el botón para apagar los motores, hacer...
    {
      motorOff(M1);
      motorOff(M2);
    }
  }
}

Esta aplicación solo podemos programarla en CODE

Programación del Innobot (dejando presionado el botón)

A diferencia del programa anterior, ahora programaremos el Innobot para que los motores se muevan solo mientras se mantenga presionado el botón.

Paso 1

Completamos la tabla que se hizo en el programa. Ya no necesitamos el botón ENTER (Detenerse) pero si agregamos los botones A y B para abrir y cerrar las pinzas respectivamente.

Paso 2

Digitamos el siguiente programa en CODE. Acá utilizaremos switch case en vez de if.

#include <IRremote.h>                     //incluir esta librería para utilizar sensor IR

const long int adelante =  0xFF02FD;      //asociamos los códigos de los botones a una constante
const long int atras =     0xFF9867;
const long int derecha =   0xFF906F;
const long int izquierda = 0xFFE01F;
const long int abrir =     0xFF22DD;
const long int cerrar =    0xFFC23D;
const long int pulsada =   0xFFFFFFFF;

int RECV_PIN = J4;                        //conectamos el sensor IR en el puerto J4
IRrecv irrecv(RECV_PIN);                  //especifica a través de que pin se va a recibir la informacion (receptor = J4)
decode_results results;                   //objeto código de clase decode_result, oriundo de IRremote.h

void setup()
{
  motorSpeed(M1, 100);                    //definimos la velocidad de los motores
  motorSpeed(M2, 100);
  motorSpeed(M3, 50);
  irrecv.enableIRIn();                    //habilitar la recepción del sensor IR
}

void loop() {
  if (irrecv.decode(&results))            //SI hay algún evento en la lectura del sensor IR, hacer...
  {
    irrecv.resume();                      //reiniciar la lectura del sensor IR
    delay(150);                           //tiempo de espera necesario para que el sensor lea la señal

    switch (results.value)                //en results.value está el código recibido en el evento del sensor IR
    {
      case adelante:                      //en caso de presionar el botón... hacer...
        goForward(M1, M2);
        break;
      case atras:
        goReverse(M1, M2);
        break;
      case derecha:
        turnRight(M2, M1);
        break;
      case izquierda:
        turnLeft(M2, M1);
        break;
      case abrir:
        motorOn(M3 , REVERSE);
        break;
      case cerrar:
        motorOn(M3 , FORWARD);
        break;
    }
  }
  else                                    //en caso de no tener presionado ningún botón... apagar los motores
  {
    motorsOff(M1, M2);
    motorOff(M3);
  }
}

Paso 3

Verifique el programa y cárguelo a la tarjeta innobot.

Conceptos claves

Sistemas de numeración:  Existen varios sistemas de numeración, entre ellos el más conocido es el decimal (base 10 o que tiene 10 caracteres 0 – 9). En electrónica digital se utiliza principalmente el sistema binario (base 2 o que tiene 2 caracteres 0 y 1), ya que este solo tiene dos estados como sucede en muchos casos de la electrónica y programación:

  • Esta presionado el pulsador o no.
  • Esta encendido o no el led.
  • Fluye o no corriente eléctrica.
  • Verdadero o falso.

Sistema de numeración hexadecimal: Es un sistema de base 16 (tiene 16 caracteres 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F) y en cierta forma encapsula los números en base 2 (binarios) en grupos de a 4 para que ocupen menos espacio.

Control remoto: Es un dispositivo electrónico que emite una luz infrarroja con determinada frecuencia según el código en hexadecimal que quiere transmitir. Cada botón del control remoto corresponde a un número hexadecimal diferente.

Sensor IR: Es un sensor de luz infrarroja por medio del cual, la tarjeta del Innobot detecta los códigos que envían desde el control remoto o cualquier emisor de luz infrarroja.

Esta aplicación solo podemos programarla en CODE