Comunicación por radiofrecuencia con Arduino

En este artículo vamos a aprender a realizar una comunicación por radiofrecuencia con un circuito básico. Este es un buen modo de comunicación para controlar robots, pequeños vehículos o para transmisión de datos.

rf, radiofrecuencia

Para realizar la comunicación por radiofrecuencia es necesario un transmisor que es el que se encarga de enviar una señal electromagnética a una cierta frecuencia y un receptor que la recibe. En mi caso utilizare un transmisor CDR03A y un receptor CDT-88 de 433MHz.

Para programar necesitaremos la librería de virtualwire que se puede encontrar gratuitamente en internet, esta la tendremos que descomprimir en la carpeta libraries de Arduino y ya podremos usarla.

Material necesario:

  • Dos placas Arduino 
  • Un juego de transmisor/receptor
  • Un pulsador 
  • Un led
  • Una resistencia de 10k Ohm
  • Una resistencia de 220 Ohm


Esquema de montaje

 

En 2 partes

Transmisor:

Esquema transmisor rf arduino

Receptor:

Esquema receptor rf arduino


Programa Arduino transmisor:

#include <VirtualWire.h>  //incluimos la libreria de virtualwire
int boton = 2;            //Asignamos el numero dos al boton
char *msg = "";           //Asignamos el mensaje en blanco
int eb = 0;               //Asignamos el estado del boton en 0

void setup(){
  vw_setup(7000);            //Configuramos la velocidad de transimsion de datos
  pinMode(boton, INPUT);    //Configuramos el pin boton como entrada
}

void loop () {
  eb = digitalRead(boton);    //Leemos el estado del boton y lo guardamos en la variable
  if ( eb == HIGH) {          //Condicion para ver si esta activado el boton
    msg = "E";                //Si lo esta, asignamos la letra E al mensaje
    vw_send((uint8_t *)msg, strlen(msg));  //y enviamos este mensaje
  }
  else {                      //Si no lo esta
    msg = "A";                //Asignamos A al mensaje
    vw_send((uint8_t *)msg, strlen(msg));    // y lo enviamos
   
  }
}

Programa Arduino Receptor:


#include <VirtualWire.h>  //incluimos la libreria de virtualwire

int led = 12; //Asignamos el 12 a la variable led


void setup() {
  vw_setup(7000);        //Seleccionamos la velocidad de transmision de datos
  vw_rx_start();         //Iniciamos la comunicación
  pinMode(led, OUTPUT);  //Asignamos la variable led como salida
}

void loop(){
  uint8_t msg[VW_MAX_MESSAGE_LEN];   
  uint8_t len = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(msg, &len)){  //Condicion para ver si hay mensaje
  if ( msg[0] == 'E') {            //Si el mensaje es una E
  digitalWrite(led, HIGH);         //Encendemos el LED
  }
  else if (msg[0] == 'A'){         // Si es una A
    digitalWrite(led, LOW);        //Apagamos el led
  }
}
}


Demostración:

Búsqueda:

Comentarios

<p>disculpa me podrias ayudar a corregir estos errores??</p><p><p>In file included from sketch_apr27a.ino:1:</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:54: error: variable or field 'vw_set_tx_pin' declared void</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:54: error: 'uint8_t' was not declared in this scope</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:58: error: variable or field 'vw_set_rx_pin' declared void</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:58: error: 'uint8_t' was not declared in this scope</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:62: error: variable or field 'vw_set_ptt_pin' declared void</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:62: error: 'uint8_t' was not declared in this scope</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:66: error: variable or field 'vw_set_ptt_inverted' declared void</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:66: error: 'uint8_t' was not declared in this scope</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:71: error: variable or field 'vw_setup' declared void</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:71: error: 'uint16_t' was not declared in this scope</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:90: error: 'uint8_t' does not name a type</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:96: error: 'uint8_t' does not name a type</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:99: error: 'uint8_t' does not name a type</p><p>C:\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.h:104: error: 'uint8_t' does not name a type</p><p>sketch_apr27a.ino: In function 'void setup()':</p><p>sketch_apr27a:7: error: 'vw_setup' was not declared in this scope</p><p>sketch_apr27a.ino: In function 'void loop()':</p><p>sketch_apr27a:15: error: 'vw_send' was not declared in this scope</p><p>sketch_apr27a:19: error: 'vw_send' was not declared in this scope</p><div></div></p><p>&nbsp;</p>

Hola tito,

Tienes descargada la libreria de virtualwire y dentro del directorio de libraries de arduino? Si es asi usaste el codigo de arriba?

Un saludo

muchas gracias si tenia la libreria pero no me servia, descargue otra y ya esta funcionando.

otra cosa si no es mucha molestia me podrias decir como hechar andar un servo?? ya que creo que necesita de mas voltaje (soy nuevo en esto) 

saludos

Buenas tito,

Tendría que saber el modelo de ese servomotor para ver sus caracteristicas tecnicas y si necessita de un aporte exterior de energia.

Igualmente te dejo el link de un tutorial de servomotor controlado por ordenador, te sirve igual aunque solo necessites el control del servo.

http://www.ikkaro.com/control-servomotor-ordenador

Un saludo