Control remoto por RF (Radio-Frecuencia) usando Arduino/Genuino y un Joystick

Con este prototipo básico vamos a sentar las bases para poder mover nuestros vehículos y robots, controlados con Arduino/Genuino, mediante control remoto, usando un joystick y los módulos de Radio-Frecuencia. Al accionar nuestro joystick en un equipo emisor, obtendremos diferentes respuestas de unos LEDs en el equipo receptor.

Cómo funcionan los módulos RF transmisor y receptor inalambricos la biblioteca VirtualWire

Los equipos de Radio-Frecuencia están compuestos dos módulos, un transmisor y un receptor inalámbricos que funcionan a 315Mhz. . Dado que sólo uno de ellos es transmisor, la comunicación de datos sólo funcionará en un sentido, por lo que se necesitan dos pares (de diferentes frecuencias) para actuar como un par transmisor / receptor.

modulo RF

Los módulos de RF de bajo coste requieren un formato especial de datos, con patrones de sincronización, equilibrio de bits 0 y 1, y comprobación de errores. VirtualWire ofrece todas estas características, lo que permite un mejor rendimiento de los circuitos de radio muy baratos.




Para usar esta bibiloteca descarga el archivo y súbelo al programa Arduino IDE.

Arduino IDE > Programa > Include Library > Add .Zip Library

Descargar biblioteca (VirtualWire)

Podéis encontrar sus funcionamiento básico de esta biblioteca en: www.web-robotica.com/arduino/como-utilizar-los-modulos-rf-transmisor-y-receptor-315mhz-con-arduino

Como funciona el módulo joystick

modulo-joystick-arduino

El módulo joystick nos va a proporcionas una señal analógica para el movimiento en el eje X, y otra señal para el eje Y.

Dependiendo de la cantidad de señal en cada entrada activará una señal que podemos utilizar para controlar diferentes aparatos, como LEDs, motores, etc.

www.web-robotica.com/arduino/como-utilizar-el-modulo-joystick-con-arduino

Como usar el control remoto por RF (Radio-Frecuencia) usando Arduino/Genuino y un Joystick




Para este prototipo vamos a construir dos equipos, el equipo emisor y el receptor.

El equipo emisor, que controla remotamente al equipo receptor, está compuesto por una placa Arduino/Genuino, un joystick y el Módulo emisor de Radio-Frecuencia. Para las diferentes posiciones del joystick vamos a emitir diferentes caracteres. Estos caracteres actuarán sobre diferentes LEDs en el módulo receptor. El equipo receptor está compuesto por una placa Arduino/Genuino, un módulo receptor y cuatro LEDs.

Componentes y materiales

  • 2 Placas Arduino/Genuino
  • 1 Módulo joystick
  • 1 Módulo Emisor RF
  • 1 Módulo Receptor RF
  • 4 LEDs
  • 4 Resistencias
  • Protoboard
  • Cables de conexión

Esquema y montaje

Emisor de Control Remoto

control_remoto_esquema

Para el equipo emisor tenemos que conectar el módulo emisor y el joystick a la placa Arduino/Genuino.  El módulo emisor lo conectamos a +5V, a GND, y al pin 12 de la placa Arduino/Genuino.  El  Joystick lo conectamos a +5V, a GND, la señal X y la señal Y los conectamos a los pines analógicos A0 y A5  de la placa Arduino/Genuino ,y el pulsador lo conectamos al pin 2  de la placa Arduino/Genuino.

Modulo-emisor-Arduino-Joystick

Receptor de Control Remoto

Receptor-radio-frecuencia-arduino-esquema

Para el equipo receptor  tenemos que conectar el módulo receptor y los LEDs junto con las resistencias a la placa Arduino/Genuino.  El módulo receptor lo conectamos a +5V, a GND, y al pin 12 de la placa Arduino/Genuino.  Los LEDs los conectamos a GND, y a los pines  4, 5, 6 y 7 de la placa Arduino/Genuino.

Receptor-radio-frecuencia-arduino-protoboard

Código Arduino para el equipo emisor

#include <VirtualWire.h>
boolean running = true;
char *controller;
int xPin = A5;
int yPin = A0;
int buttonPin = 2;

int xPosition = 0;
int yPosition = 0;
int buttonState = 1;
void setup() {
Serial.begin(9600);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(13,OUTPUT);


vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4000);// speed of data transfer Kbps
}

void loop(){
  xPosition = analogRead(xPin);
  yPosition = analogRead(yPin);
  buttonState = digitalRead(buttonPin);
  
  Serial.print("X: ");
  Serial.print(xPosition);
  Serial.print(" | Y: ");
  Serial.print(yPosition);
  Serial.print(" | Emitiendo: ");
  Serial.println(controller);

if (xPosition <= 300 && 300 > yPosition <  700) 
  {
controller="4"  ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
}
else  if ( 300 > yPosition <  700 && xPosition >  700) 
  {
controller="6"  ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
}

else   if (300 > xPosition <  700 && yPosition >  700) 
{
controller="5"  ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
}

 else  if (300 > xPosition <  700 && yPosition <= 300) 
{
controller="7"  ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,1);
}
 else if (300 > xPosition <  700 && 300 > yPosition <  700)
{
controller="0"  ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,0);
}}

Código Arduino para el equipo receptor

Este código controla el receptor de manera que cuando recibe el mensaje ‘4’ activa el pin 4, si recibe ‘5’ activa el pin 5, si recibe ‘6’ activa el pin 6, y si recibe ‘7’ activa el pin 7.

// Incluimos la biblioteca VirtualWire
#include <VirtualWire.h>
  void setup()
{
    vw_set_ptt_inverted(true); // Requerido para DR3100
    vw_set_rx_pin(12);
    vw_setup(4000);  // Bits por segundo
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);

    vw_rx_start();       // Inicia el receptor
}
  void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) 
{
// Si recibe '0' no activa ningún pin 
if(buf[0]=='0'){
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,0);
    }
// Si recibe '4' activa el pin 4
 if(buf[0]=='4'){
digitalWrite(4,1);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,0);
}
// Si recibe '5' activa el pin 5
if(buf[0]=='5'){
digitalWrite(4,0);
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(7,0);
}
// Si recibe '6' activa el pin 6
if(buf[0]=='6'){
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(7,0);
  }  
// Si recibe '7' activa el pin 7 
if(buf[0]=='4'){
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,1);
 }}}

.

2 comentarios en “Control remoto por RF (Radio-Frecuencia) usando Arduino/Genuino y un Joystick

  1. Es interesante integrar este mando con crazy bot, yo he utilizado el celular en proyecto similar con motor DC, pero me interesa mucho el stepper usado en el crazy. Muy bueno este proyecto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.