Sunteți pe pagina 1din 16

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

1 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

Posted by

7 Comments

ago 23, 2015

feb 19, 2015

jun 04,
2015

En este tutorial vamos a realizar una comunicacin inalmbrica entre


dos Arduino usando mdulos de radiofrecuencia de bajo costo.
Los mdulos RF de 433Mhz son muy populares por su bajo costo y
fcil uso. Vienen en pareja, emisor (FS1000A) y receptor (XY-MK-5V),
el tipo de comunicacin es simplex, es decir en un solo canal y
unidireccional, son de baja velocidad de transmisin pero para
aplicaciones bsicas son muy tiles.

ago 06,
2016

jun 15, 2016

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

2 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

may 25, 2016

La frecuencia de trabajo es de 433MHz, debido a que es una banda


de libre uso. Para utilizar estos mdulos basta con alimentarlos y
conectar el pin de datos por un lado del Transmisor (TX) y en otro el
Receptor (RX). Para la programacin no es necesario agregar ningn
tipo de librera, ya que es un proceso "transparente", por lo que el
programa sera igual a usar una comunicacin serial (UART) entre 2
MCUs , sin embargo existen algunas libreras que nos ofrecen ciertas
ventajas como: verificacin de errores, mejor transmisin,
Direccionamiento, Enrutamiento, mallas, etc.
Cable Dupont, macho
a macho 20cm, 20...
S/. 5,00 S/. 6,00

La antena tiene una gran influencia sobre todo en el mdulo receptor,


por lo que se recomienda conectar un cable de cobre de unos 17cm
de largo para alcanzar la frecuencia de 433MHz.Tambien son muy
comunes y eficientes antenas helicoidales de 5mm de dimetro y
3.4cm de longitud. La posicin de la antena tambin afecta la
recepcin de datos.

Para este tutorial se est usando antenas helicoidales.

Pantalla Oficial LCD


03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

3 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Touch de 7 pulgadas
S/. 470,00

Soporte para montaje


en superficies
paralelas a las guas
de 8mm dimetro
S/. 10,00

Para este tipo de comunicacin solo basta con conectar el mdulo RF


al Pin RX o TX del Arduino dependiendo si es transmisor y receptor.
S/. 30,00

Para este ejemplo usaremos un Arduino el cual transmitir seriamente


informacin a travs del RF transmisor, el mdulo receptor est
conectado a un conversor USB serial (Puedes usar otro Arduino en
lugar del conversor) y visualizaremos los datos des de la pc.
La conexin es la siguiente:
Conexiones del emisor:

Rodamiento polimrico
para gua de 8mm de
dimetro
S/. 15,00

Cristal oscilador de
16 MHz de
frecuencia. Utilizado
en Arduino Uno,...

Conexiones del receptor

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

4 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

S/. 2,00

Ideal para unir los


extremos de nuestra
correa GT2.
S/. 10,00

Con respecto al programa se trabaja como si se tratase de una


comunicacin serial (UART) normal, con el inconveniente que no
existe validacin o seguridad para saber si los datos son transmitidos
correctamente. Pero se puede usar para visualizar mensajes o datos
que sean redundantes o que no sean necesarios validar.
Para lograr una mejor transferencia se recomienda usar velocidades
de 1200 o 2400 baudios o inferiores.
A continuacin se muestra un cdigo de ejemplo para testear nuestros
mdulos.

El mdulo Relay te
permite controlar el
encendido/apagado
de equipos de...
S/. 6,00

Sensor capacitivo te
permite detectar
objetos metlicos y
no metlicos...

void setup() {
// Inicializamos la comunicacin serial a 2400 baudi
os
Serial.begin(2400);
}
void loop() {
Serial.print("Hola mundo ... ");
Serial.print(millis()); // enviamos
idos
Serial.println("ms");
delay(10);
}

los ms transcurr

Para visualizar los datos recibidos, en herramientas cambiamos al


puerto COM al del conversor, abrimos el Monitor serial y cambiamos
la velocidad a 2400 baudios, debemos recibir los datos como se
muestra en la siguiente imagen

S/. 40,00

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

5 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Existen varios mtodos para validar informacin, una de las ms fcil


de implementar es en enviar el mismo dato varias veces, por ejemplo
3 veces y en el receptor se debe validar verificando que se reciba 3
veces el mismo dato. Otros mtodos son la paridad, agregar tramas
de validacin, sumar los bytes trasmitidos, etc.

Una de las librera ms comunes y eficientes es la


desarrollado por Mike McCauley, con esta librera vamos a trabajar los
proximos ejemplos del tutorial
Necesitamos
Arduino.

e importarla a nuestro IDE

A continuacin explicamos las funciones principales de la librera:

Inicializar el software VirtualWire, como parmetro hay que


indicarle la velocidad de operacin, que representa los bits por
segundo para la transmisin RF

Estable el pin IO digital por donde se va a transmitir los datos

Estable el pin digital IO por donde se va a recibir datos.

Empieza a escuchar los datos provenientes por el pin_rx, es


necesario llamar a esta funcin para poder recibir los datos

Enviar un mensaje con la longitud dada. La funcin termina rpido


pero mensaje ser enviado en el momento adecuado establecido
por las interrupciones. Dnde: buf , es el puntero al vector para
trasmitir. Y len es el nmero de bytes a transmitir
03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

6 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Hace una pausa hasta que se trasmitan todos los datos.

Si un mensaje est disponible (con buena suma de comprobacin


o no), almacena el mensaje en buf , devuelve true si la
comprobacin es correcta. buf es puntero a la ubicacin para
guardar los datos de lectura y leng es un puntero a la cantidad de
bytes disponibles de buf.

Antes de empezar a programar necesitamos hacer las siguientes


conexiones:
Conexiones del Emisor:

Conexiones del receptor:

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

7 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

En este ejemplo se encender un led conectado al pin 13 del Arduino,


para apagar y prender se lo har de forma remota desde otro Arduino,
para enviar la orden lo haremos desde la PC pero se lo puede hacer a
travs de un pulsador.
El cdigo del Emisor es el siguiente:
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("Emisor RF");
// Se inicializa el RF
vw_setup(2000); // velocidad: Bits per segundo
vw_set_tx_pin(2); //Pin 2 como salida para el RF
}
void loop()
{

while (Serial.available() > 0)


{
char dato[1];
dato[0] = Serial.read();
//Enviamos el carcter recibido al RF
vw_send((uint8_t*)dato,sizeof(dato));
vw_wait_tx();
}
delay(200);
}

Como se observa el programa enva inalmbricamente el dato que


recibe por el puerto serie.
EL cdigo del receptor se muestra a continuacin:
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

8 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

// Se inicializa el RF
vw_setup(2000);
// velocidad: Bits per segundo
vw_set_rx_pin(2); //Pin 2 como entrada del RF
vw_rx_start();
// Se inicia como receptor
pinMode(13, OUTPUT);
//Configuramos el pin del L
ed como entrada
digitalWrite(13, false);
}
void loop()
{
uint8_t dato;
uint8_t datoleng=1;
//verificamos si hay un dato valido en el RF
if (vw_get_message(&dato,&datoleng))
{
if((char)dato=='a')
{
digitalWrite(13, true); //Encendemos el Led
}
else if((char)dato=='b')
{
digitalWrite(13, false); //Apagamos el Led
}
}
}

Para encender el led es necesario abrir el monitor serial del trasmisor


y enviar una a o b para encender o apagar el Led respectivamente

En este ejemplo un Arduino enva una mensaje Hola mundo hacia


otro Arduino receptor, para visualizar el mensaje recibido usaremos el
monitor serial.
Cdigo del Emisor:

#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("Emisor: Setup");
// Se inicializa el RF

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

vw_setup(2000);
// velocidad: Bits per segundo
vw_set_tx_pin(2); //Pin 2 como salida para el RF
}
void loop()
{
const char *msg = "Hola mundo";
digitalWrite(13, true); // Parpadeamos el led al e
nviar
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); //Esperamos hasta que el mensaje se e
nvie
digitalWrite(13, false);
delay(200);
}

Cdigo del receptor:


#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("Emisor: Setup");
// Se inicializa el RF
vw_setup(2000);
// velocidad: Bits per segundo
vw_set_rx_pin(2);
//Pin 2 como entrada del RF
vw_rx_start();
// Se inicia como receptor
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
//verificamos si hay un dato valido en el RF
if (vw_get_message(buf, &buflen))
{
int i;
digitalWrite(13, true); // Parpadeamos

el led al

recibir
//verificamos si hay un dato valido en el RF
Serial.print("Mensaje: ");
for (i = 0; i < buflen; i++)
{

9 de 16

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Serial.print((char)buf[i]);
}
Serial.println("");
digitalWrite(13, false);
}
}

Para visualizar los datos es necesario abrir el monitor serial del


receptor.

La librera principalmente trasmite cadenas de bytes, que pueden ser


una cadena de texto o un dato convertido en cadena, pero cuando se
necesitan enviar varios datos hay dos formas de hacerlo, un mtodo
es empaquetar todo en una sola trama y enviarlo, el receptor debe de
desempaquetar y obtener los datos.
Otra forma ms sencilla es enviar un inicio de trama diferente para
cada dato, el cual indicara al receptor que dato es el que se est
enviando, el siguiente ejemplo lo hacemos de esta forma, enviaremos
dos datos, cada uno con un inicio de trama diferente.
Cdigo del emisor:
#include <VirtualWire.h>
void setup()
{

10 de 16

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

11 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Serial.begin(9600);
// Debugging only
Serial.println("setup");
// Se inicializa el RF
vw_setup(2000); // velocidad: Bits per segundo
vw_set_tx_pin(2); //Pin 2 como salida para el RF
}
void loop()
{
char buf[VW_MAX_MESSAGE_LEN]; // Cadena para enviar
int dato1=millis()/1000; //variable con el tiempo e
n segundos
float dato2=3.14;
//segundo dato para enviar
String str="";
str="i"+String(dato1); //convertimos el entero a St
ring y agramos un inicio de trama
str.toCharArray(buf,sizeof(buf)); //convertimos el
String en un array
vw_send((uint8_t *)buf, strlen(buf)); //Enviamos el
array
vw_wait_tx(); //Esperamos hasta que el mensaje se e
nvie
str="f"+String(dato2); //convertimos el float a Str
ing y agramos un inicio de trama
str.toCharArray(buf,sizeof(buf)); //convertimos el
String en un array
vw_send((uint8_t *)buf, strlen(buf)); ////Enviamos
el array
vw_wait_tx(); //Esperamos hasta que el mensaje se e
nvie
delay(200);
}

Cdigo del Receptor


#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("Receptor: setup");
// Se inicializa el RF
vw_setup(2000);
// velocidad: Bits per segundo

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

12 de 16

vw_set_rx_pin(2);
vw_rx_start();

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

//Pin 2 como entrada del RF


// Se inicia como receptor

}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
int dato1=0;
float dato2=0.0;
//verificamos si hay un dato valido en el RF
if (vw_get_message((uint8_t *)buf,&buflen))
{
int i;
String DatoCadena="";
if((char)buf[0]=='i') //verificamos el inicio d
e trama
{
for (i = 1; i < buflen; i++)
{
DatoCadena.concat((char)buf[i]);
}
dato1=DatoCadena.toInt();
Serial.print("Dato1 recivido: ");
Serial.println(dato1);
}
else if((char)buf[0]=='f') //verificamos el ini
cio de trama
{
for (i = 1; i < buflen; i++)
{
DatoCadena.concat((char)buf[i]);
}
dato2=DatoCadena.toFloat();
Serial.print("Dato2 recivido: ");
Serial.println(dato2);
}
}
}

Los datos lo visualizaremos en el monitor serial del receptor

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

13 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Tags:
70

Compartir

cristian
jul 17, 2016
como puedo hacer la antena helicoidal. que calibre de
cobre y cuanto necesito?

Naylamp
jul 20, 2016
Cristian, prueba con un cable calibre AWG 20
y has un espiral con dimetro 5mm y 3.5 cm
de longitud, las espiras no deben de tocarse
entre s, como se muestra en la imagen del
tutorial. Saludos

Federico Mahieu

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

14 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

jul 27, 2016


Buenas tardes, consulta, si quisiera tener comunicacion
entre tres arduinos es posible codificar las seales de los
transmisores y receptores?.-Gracias.-

Naylamp
jul 28, 2016
Con estos mdulos RF no se pueden trasmitir
ms de uno a la vez, estos mdulos
bsicamente trabajan con modulacin ASK,
con ausencia y presencia de seal que definen
los 1 y 0 lgicos, por eso cualquier otra seal
de la misma frecuencia interfiere en la
transmisin. Si quieres conectar ms de un
Arduino tu algoritmo debe asegurar que solo
uno transmita a la vez.

Jonathan Ascencio
sep 27, 2016
Existe algn mdulo o que componentes requiero que me
permita comunicar varios dispositivos a la vez. Por
ejemplo tengo 5 focos (llamemos cliente) que estn con un
rele y arduino y quiero controlar su encendido y apagado
desde un arduino principal (llamemos servidor). Es posible
y que mdulos o componentes de comunicacin requiero,
Gracias.

Naylamp
sep 30, 2016
Hola Jonathan, Si solo existe un Emisor y
varios receptores si es posible trabajar con
estos mdulos. Desde el emisor aparte del
dato que deseas enviar tambin tienes que
enviar un variable con el ID del receptor con el
que quieres comunicarte, en el receptor tienes
que validar si el ID es el que le corresponde
para aceptar los datos que recibe. En cambio
s ms de un arduino va a trasmitir tienes que
usar mdulos RF de varios canales, para que
no haya interferencia entre ellos. Para este
caso puedes usar el NRF24L01.

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

15 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Alberto
oct 2, 2016
Muchas Gracias, es el primer tutorial, de este mdulo, que
encuentro claro, fcil y que funciona. Es frustrante
empezar en este mundo y nada ms que encontrar basura
por la red. Voy a ver si soy capaz de modificar tu cdigo
para encender el led con un botn. Una vez ms gracias,
estaba completamente desanimado.

* Name:
* E-mail:
(Not
Published)
Website:
(Site url
withhttp://)
* Comment:

Submit

Introduzca su direccin de correo electrnico

Naylamp Mechatronics,
Trujillo Per
Llmanos ahora:
997646858

03/10/2016 18:45

Comunicacin Inalmbrica con mdulos de RF de 433Mhz

16 de 16

http://www.naylampmechatronics.com/blog/32_Comunicacin-Inalm...

Email:

03/10/2016 18:45

S-ar putea să vă placă și