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.

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:

Receptor:

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:

Comentarios
tito
Dom, 2013-04-28 05:09
Enlace permanente
errores
<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> </p>
Wk3
Dom, 2013-04-28 13:17
Enlace permanente
Hola tito,
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
tito
Dom, 2013-04-28 19:07
Enlace permanente
Hola wk3
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
Wk3
Dom, 2013-04-28 19:54
Enlace permanente
Servo
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