Robot controlado por mando a distancia

Propuesta

 Diseñar un robot que pueda ser controlado por un mando a distancia


Material necesario

 


 

Esquema de montaje

 


Tenemos dos opciones para el receptor:

  1. Receptor sin módulo


 2.- Receptor con módulo

Existen múltiples librerías para emplear mandos a distancia con Arduino. Nosotros usaremos la librería Arduino-IRremote desarrollada por Rafi Khan (z3t0) disponible en este enlace.

El siguiente código realiza la lectura del valor recibido por el mando, y lo muestra por pantalla. El código se muestra en formato decimal.

 

#include <IRremote.h>

const int RECV_PIN = 9;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
   Serial.begin(9600);
   irrecv.enableIRIn();
}

void loop()
{
   if (irrecv.decode(&results))
   {
      Serial.println(results.value, DEC);
      irrecv.resume();
   }
}


 En este caso es necesario elegir 5 teclas para controlar el movimiento del robot

Teclas necesarias:

  • Adelante (2)
  • Atras (4)
  • Izquierda (4)
  • Derecha (8)
  • Parada (5)

Con el código anterior cargado en Arduino podemos ir obteniendo el código asociado a cada tecla:

#define KEY_2 16718055
#define KEY_4 16716015
#define KEY_5 16726215

#define KEY_6 16734885
#define KEY_8 16730805

Una vez obtenidos los códigos se procede a escribir el programa para controlar ell funcionamiento del robot, una posible solución será la siguiente:


#include <IRremote.h>

int I1 = 10;
int I2 = 9;
int I3 = 5;
int I4 = 4;


#define KEY_2 16718055
#define KEY_4 16716015
#define KEY_5 16726215

#define KEY_6 16734885
#define KEY_8 16730805


const int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
   Serial.begin(9600);
   irrecv.enableIRIn();
  pinMode (I1, OUTPUT);     
  pinMode (I2, OUTPUT);
  pinMode (I4, OUTPUT);     
  pinMode (I3, OUTPUT);
}

void loop()
{
   if (irrecv.decode(&results))
   {
      switch (results.value)
      {
      
      case KEY_2:
         Mover_Adelante();
         break;
      case KEY_4:
         Mover_Izquierda();
        break;
        case KEY_5:
        
         parar();
         break;
         case KEY_6:
         Mover_Derecha();
         break;
      case KEY_8:
         Mover_Atras();
         break;
    
       
      }
      irrecv.resume();
   }
}
void Mover_Adelante() {
 
  digitalWrite (I1, HIGH);
  digitalWrite (I2, LOW);
  digitalWrite(I3, HIGH);
  digitalWrite(I4, LOW);
}
void Mover_Atras() {
 
  digitalWrite (I1, LOW);
  digitalWrite (I2, HIGH);
  digitalWrite(I3, LOW);
  digitalWrite(I4, HIGH);
}

void parar() {
  digitalWrite (I1, LOW);
  digitalWrite (I2, LOW);
  digitalWrite (I3, LOW);
  digitalWrite (I4, LOW);
}

void Mover_Izquierda() {
  digitalWrite (I1, HIGH);
  digitalWrite (I2, LOW);
  //digitalWrite (I4, HIGH);
  //digitalWrite (I3, LOW);  
}

void Mover_Derecha() {
  //digitalWrite (I1, HIGH);
  //digitalWrite (I2, LOW);
  digitalWrite (I3, HIGH);
  digitalWrite (I4, LOW);  
}


Circuito eléctrico para el control de la maqueta de una puerta corredera, ascensor y proyectos similares

Para el control de la apertura y cierre una puerta corredera podemos utilizar el siguiente circuito:
Control maqueta puerta corredera

Materiales necesarios
  • 2 microrruptores.
  • Motor de corriente continua.
  • Interruptor de seis contactos.
  • Portapilas 
  • Interruptor
Descripción del funcionamiento

Conectar los elementos según el circuito eléctrico.

El final de carrera A detecta el cierre de la puerta y el B la apertura.

Con el interruptor cerrado el motor se encontrara en reposo y la puerta en una de las dos posiciones cerrada o abierta. 

Suponiendo que la puerta se encuentra cerrada, al conmutar la posición de apertura el circuito resultante es éste, y la puerta se abre hasta que llega al final de carrera B.

Al conmutar a posición de cierre, el circuito resultante es éste, y la puerta se cierra, hasta que llega al final de carrera A.



Aplicar tensión y comprobar que la puerta abre y cierra, deteniéndose al detectar los finales de carrera, en caso de no ser así, revisar que se han realizado las conexiones según el circuito eléctrico y si son correctas, cambiar la polaridad del motor.



Automáta

Diseñar y fabricar una maquina que imite la figura y los movimientos de un ser animado.


Material necesario:

Cajas  de cartón pequeñas. En nuestros proyectos estamos utilizando las cajas vacías de chicles de la cafetería.


Contrachapado de 3 y 5 mm.

Varillas redondas y planas de diferentes medidas.












 






Robot controlado por bluetooth

 

El “robot controlado por bluetooth” que se propone, es un dispositivo móvil con tres ruedas, dos movidas cada una por un motor (ruedas motrices), y la tercera será loca. Se dispone de  Módulo Bluetooth HC-05, este módulo nos sirve para que nuestro Arduino y teléfono móvil puedan comunicarse a través de Bluetooth. 

 

Lista de materiales

 Circuito eléctrico



Código

Realizaremos el programa en dos etapas:

  •  En primer lugar realizaremos un test de funcionamiento de los motores, lo realizaremos sin conexión bluetooh.

 El código es el siguiente:

int I1 = 10;
int I2 = 9;
int I3 = 5;
int I4 = 4;
int tiempo;
void setup() {
  // put your setup code here, to run once:
pinMode (I1, OUTPUT);     
  pinMode (I2, OUTPUT);
  pinMode (I4, OUTPUT);     
  pinMode (I3, OUTPUT);
               
  Serial.begin(9600);
}

void loop() {
 //Movemos el robot ha e delate por 1 segundo

Mover_Adelante();

delay(1000);

//Movemos el robot a la derecha por (1 segundo)

Mover_Derecha();

 
}
 

void Mover_Adelante() {
 
  digitalWrite (I1, HIGH);
  digitalWrite (I2, LOW);
  digitalWrite(I3, HIGH);
  digitalWrite(I4, LOW);
}
void Mover_Atras() {
 
  digitalWrite (I1, LOW);
  digitalWrite (I2, HIGH);
  digitalWrite(I3, LOW);
  digitalWrite(I4, HIGH);
}

void parar() {
  digitalWrite (I1, LOW);
  digitalWrite (I2, LOW);
  digitalWrite (I3, LOW);
  digitalWrite (I4, LOW);
}

void Mover_Izquierda() {
  digitalWrite (I1, HIGH);
  digitalWrite (I2, LOW);
  //digitalWrite (I4, HIGH);
  //digitalWrite (I3, LOW);  
}

void Mover_Derecha() {
  //digitalWrite (I1, HIGH);
  //digitalWrite (I2, LOW);
  digitalWrite (I3, HIGH);
  digitalWrite (I4, LOW);  
}
 
Como se observa la programación es fácil, se ha programado cada movimiento del robot en funciones separadas, las cuales llamamos desde el void loop(),

Para probar los movimientos hay que ir probando cada función y ver si nuestro robot se mueve de la misma manera como se lo ha programado, por ejemplo así como está el código, después de encender o resetear el Arduino debe moverse hacia delante por 1 segundos, seguidamente debe girar a la derecha por un segundo más y luego repetir la secuencia, si el robot gira en dirección equivocada, entonces debemos de cambiar la polaridad de motor que gira en sentido erróneo.


Podemos ir probando los movimientos de forma individual reprogramando cada vez para cambiar el movimiento o programar todos a la vez con pausas entre movimientos, eso dependerá de cada uno, después de estar seguros que nuestro robot funciona correctamente pasamos a implementar la comunicación Bluetooth. 


  • Robot Móvil controlado por Bluetooth

Para controlar el Robot usaremos una aplicación en nuestro teléfono móvil, para esto debemos de instalar en nuestro  teléfono móvil la siguiente aplicación.

 


Arduino Bluetooth Control: Instalar desde Google Play

Arduino Bluetooth Control es una aplicación que le permite controlar su placa arduino (y placas similares) a través de Bluetooth, y así crear proyectos increíbles y totalmente personalizados, con las nuevas funciones disponibles dentro de la aplicación.

El apartado de configuración te permite adaptar la aplicación a tus necesidades, a través de una interfaz sencilla e intuitiva.

La aplicación también recuerda inteligentemente su módulo bluetooth y siempre intentará conectarse automáticamente al último que haya usado, por lo que no tendrá que seleccionarlo cada vez que lo use.

También puede usar la aplicación en un dispositivo portátil si tiene alguno.

 
 
Para este proyecto vamos a utilizar la opción "Teclas de flecha", esta herramienta proporciona botones de dirección que se pueden personalizar completamente con los datos a enviar, y la sensibilidad, que permite enviar datos de forma continua a la placa al mantenerlos presionados durante mucho tiempo.
 

La aplicación consta de 4 botones una para cada dirección, al presionar el botón para mover adelante, la aplicación envía por Bluetooth el carácter ‘1’ y lo sigue enviando constantemente mientras se tenga presionado. De igual manera para los otros botones, la aplicación envía ‘2’ para retroceso, ‘4’ para izquierda y ‘3’  para mover a la derecha.

Arduino debe de leer estos 4 caracteres y realizar el movimiento, además al no tener un botón stop, nuestro Arduino deberá detener de forma automática los movimientos cuando no se tenga presionado ningún botón.


Antes de cargar el programa a Arduino debemos de desconectar los cables de nuestro Bluetooth y después de terminado la carga podemos volverlo a conectarlo.


El  código que debemos de cargar a nuestro Arduino es el siguiente:

int I1 = 10;
int I2 = 9;
int I3 = 5;
int I4 = 4;
int tiempo;
 

void setup() {
  // put your setup code here, to run once:
pinMode (I1, OUTPUT);     
  pinMode (I2, OUTPUT);
  pinMode (I4, OUTPUT);     
  pinMode (I3, OUTPUT);
               
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
     char dato= Serial.read();
     if(dato=='1')
     {
        Mover_Adelante();
        tiempo=0;
     }
     else if(dato=='2')
     {
        Mover_Atras();
        tiempo=0;
     }
     else if(dato=='3')
     {
        Mover_Derecha();
        tiempo=0;
     }
     else if(dato=='4')
     {
        Mover_Izquierda();
        tiempo=0;
     }   
   
  }

  if(tiempo<200) // 100 ciclos de 1ms
  {    
    tiempo=tiempo+1;
  }
  else   //ya transcurrió 100ms (100ciclos)
  {
    parar();
  }
 
 
  delay(1); //pausa de 1ms por ciclo
 
}
void Mover_Adelante() {
 
  digitalWrite (I1, HIGH);
  digitalWrite (I2, LOW);
  digitalWrite(I3, HIGH);
  digitalWrite(I4, LOW);
}
void Mover_Atras() {
 
  digitalWrite (I1, LOW);
  digitalWrite (I2, HIGH);
  digitalWrite(I3, LOW);
  digitalWrite(I4, HIGH);
}

void parar() {
  digitalWrite (I1, LOW);
  digitalWrite (I2, LOW);
  digitalWrite (I3, LOW);
  digitalWrite (I4, LOW);
}

void Mover_Izquierda() {
  digitalWrite (I1, HIGH);
  digitalWrite (I2, LOW);
  //digitalWrite (I4, HIGH);
  //digitalWrite (I3, LOW);  
}

void Mover_Derecha() {
  //digitalWrite (I1, HIGH);
  //digitalWrite (I2, LOW);
  digitalWrite (I3, HIGH);
  digitalWrite (I4, LOW);  
}


Como se observa al código del primer ejemplo solo le hemos agregado la parte de la comunicación serial, en donde leemos el dato y comparamos para ver si es el carácter correspondiente para realizar su respectivo movimiento, adicionalmente si durante 100 milisegundos no llega ningún dato detenemos el robot, y tan pronto le llega uno de los datos reiniciamos la cuenta de los 100ms.


Una vez que tengan todo listo, tan solo hay que abrir la App, conectarnos a nuestro modulo Bluetooth y empezar a mover nuestro robot con los botones.