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);  
}


No hay comentarios: