Propuesta
Diseñar un robot que pueda ser controlado por un mando a distancia
Material necesario
- Mando a distancia.
- Receptor HX1838 o similar.
- Arduino Uno R3.
- Driver L293D.
- Armazón o esqueleto para el robot.
Esquema de montaje
Tenemos dos opciones para el receptor:
- 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);
}
2 comentarios:
Gracias por compartir el código es un proyecto muy interesante.
Trabajo en el sector del mando y me parece muy interesante, actualmente existen librerías muy potentes para arduino y poder hacer grandes proyectos de control remoto, para encender un aire acondicionado, televisor de forma remota.
Publicar un comentario