[go: up one dir, main page]

0% encontró este documento útil (0 votos)
75 vistas6 páginas

RF 433 MHZ para Arduino 2

Este documento explica cómo conectar dos placas Arduino de forma inalámbrica utilizando módulos de radiofrecuencia RF 433MHZ y la librería VirtualWire. El código del receptor detecta mensajes recibidos y enciende o apaga un LED según el mensaje, mientras que el código del emisor envía periódicamente los mensajes "Encender" y "Apagar".
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
75 vistas6 páginas

RF 433 MHZ para Arduino 2

Este documento explica cómo conectar dos placas Arduino de forma inalámbrica utilizando módulos de radiofrecuencia RF 433MHZ y la librería VirtualWire. El código del receptor detecta mensajes recibidos y enciende o apaga un LED según el mensaje, mientras que el código del emisor envía periódicamente los mensajes "Encender" y "Apagar".
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

Tutorial de Arduino y de

radiofrecuencia con
VirtualWire
Posted on February 10, 2015 by N4n0

¡Hola! Hoy voy a explicaros cómo conectar dos placas Arduino de forma inalámbrica con un
módulo de radiofrecuencia RF 433MHZ.

Emisor (izquierda) y receptor(derecha)


Estos módulos vienen en parejas: un receptor y un emisor que se comunican mediante ondas
de radio. No son ninguna maravilla, pero permiten comunicar dos dispositivos… ¡por poco
dinero! Cuestan entre 2 y 5 euros el par.
Cómo programar estos chismes desde cero es muy laborioso, podemos utilizar la librería
VirtualWire. Esta librería se encarga de gestionar las funciones más básicas de estos módulos
de radiofrecuencia low-cost: envío de información, comprobación de los paquetes de datos…
Os recomiendo que descarguéis la librería desde este enlace. Los que no sepáis cómo
instalar librerías en Linux, seguid nuestro tutorial.
Para probar los módulos de radiofrecuencia, haremos que una de las placas Arduino dé la
orden a la otra para que encienda el LED del pin 13.

 Componentes
¿Qué necesitamos?

 2x Placas Arduino: UNO, Duemilanove, Nano o Mega servirán

 Receptor y emisor de radiofrecuencia: recomiendo soldar una antena al emisor

 Batería/Pilas: alimentaremos una placa con el cable USB y la otra con pilas

 Breadboard y jumpers

 Cable USB de impresora

Y ya está. Hoy sale barato 

Conexiones
Las conexiones de cada una de las placas Arduino con los módulos serán:
Emisor:
-Arduino 5V – Módulo VCC
-Arduino GND – Módulo GND
-Arduino Digital 12 – Módulo DATA

Emisor
 
Receptor:
-Arduino 5V – Módulo VCC
-Arduino GND – Módulo GND
-Arduino Digital 11 – Módulo DATA (tiene dos pines DATA: cualquiera de los dos vale)
-Arduino VCC – Positivo de la batería
-Arduino GND – Negativo de la batería

Receptor
 

Código del Receptor


Arduino recibirá un mensaje que se guardará en el array de carácteres message[]. Después,
comprobará que este mensaje se corresponda a la instrucción “Encender” o “Apagar”, y si es
así encenderá o apagará el LED 13.

1 /*
RECEPTOR
2
3  
Apaga el LED 13 si recibe el mensaje "Apagar"
4 Enciende el LED 13 si recibe el mensaje "Encender"
5  
6 Escrito por Nano en beneficio de los seres humanos
7 www.robologs.net
8 */
9  
#include <VirtualWire.h>
10
11  
//Creamos un mensaje
12 //La constante VW_MAX_MESSAGE_LEN viene definida en la libreria
13 byte message[VW_MAX_MESSAGE_LEN];
14 byte messageLength = VW_MAX_MESSAGE_LEN;
15  
16 void setup()
{
17   pinMode(13, OUTPUT); //Configuramos el pin 13
18   
19   Serial.begin(9600);//Iniciamos el Serial
20   Serial.println("Iniciando...");
21   
22   vw_setup(2000);
23   vw_rx_start();
24
25
26
27
28 }
void loop()
29 {
30   if (vw_get_message(message, &messageLength))
31   {
32       if(comparar("Encender") == 0){
33         digitalWrite(13, HIGH);
        Serial.write("LED Encendido\n");
34       }
35       else if(comparar("Apagar") == 0)
36       {
37         digitalWrite(13,LOW);
        Serial.write("LED Apagado\n");
38
      }
39
  
40   }
41 }
42  
43 char comparar(char* cadena) {
44   //Esta funcion compara el string cadena con el mensaje recibido.
  //Si son iguales, devuelve 1. Si no, devuelve 0.
45
  
46   for(int i = 0; i<messageLength; i++)
47   {
48     if(message[i] != cadena[i])
49     {
50       return 1;
    }
51   }
52  
53     return 0;
54 }
55
56
57
58
En el programa usamos funciones propias de VirtualWire.
vw_setup_(2000) sirve para iniciar la comunicación por radio, de forma similar
al Serial.begin().
vw_rx_start() inicia el pin de recepción. Si no le decimos nada, el pin por defecto es el 11. Si
quisiéramos cambiarlo al 9 (por ejemplo), deberíamos escribir vw_set_rx_pin(9) antes de
iniciarlo.
vw_get_message() lee un mensaje de longitud messageLength y lo guarda en el array
message. Además devuelve true si el mensaje está correcto o false si está corrupto. De ahí
que en el código lo pongamos dentro de un condicional. Lo que estamos diciendo es: “Lee el
mensaje. Si no está corrupto, continúa”
Código del Emisor
El emisor emite los mensajes “Encender” y “Apagar” en intervalos de un segundo.

1
2
3 /*
4 EMISOR
5  
6 Envia los mensajes "Apagar" y "Encender" en intervalos de un segundo
7  
8 Escrito por Nano en beneficio de los seres humanos
www.robologs.net
9 */
10  
11 #include <VirtualWire.h>
12  
13 void setup()
14 {
15   //Iniciamos el Serial y la comunicacion por radio
  Serial.begin(9600);
16   Serial.write("Sistema encendido\n");
17   vw_setup(2000);
18 }
19 void loop()
{
20   send("Encender");
21   delay(1000);
22   send("Apagar");
23   delay(1000);
24 }
25  
//Funcion para enviar el mensaje
26 void send (char *message)
27 {
28   vw_send((uint8_t *)message, strlen(message)); //Envia el mensaje
29   vw_wait_tx(); //Espera hasta que se haya acabado de transmitir todo
30   
31   Serial.println(message); //Muestra el mensaje por Serial
}
32
33
34
vw_send() sirve para enviar el mensaje. Recibe dos parámetros: el primero es la función en sí
y el segundo cuántos bytes contiene el mensaje.
vw_wait_tx() espera hasta que se haya transmitido todo el mensaje antes de continuar con el
programa.
Escribimos una función send() para que sea más cómodo enviar los mensajes. Así no
tenemos que escribir cada vez vw_send() y vw_wait_tx().
Si quisiéramos cambiar el pin de recepción, deberíamos
escribir vw_set_rx_pin(numero_pin) justo antes de vw_setup(2000). Si no decimos nada,
por defecto será el 11. Si queremos cambiar el pin tx, podemos hacerlo
con vw_set_tx_pin(numero_pin).
¡Y ya está! Bueno, ¿Qué tal ha salido? Si habéis seguido mis pasos, veréis cómo el LED 13
del receptor se enciende y se apaga. Si no es así… ¡volved a repasar todos los pasos!

Si tenéis alguna duda, comentario, etc, podéis escribirme en los comentarios de abajo. 

Actualización 11 de Mayo de 2016:


Leyendo los comentarios, veo que una de las consultas que más gente me hace es cómo
enviar la señal de “encender” pulsando un botón o con un sensor de distancia infrarrojo, en
vez de hacerlo automáticamente.

Venga, gente, ¿no me digáis que no sabéis hacerlo? ¡Si es muy fácil! 
Sólo hay que añadir un condicional “if” que mire si se cumple la condición de encendido. En el
caso del botón, el void loop quedaría:

1
2 void loop()
3 {
  if(digitalRead(boton) == HIGH)
4   {
5       send("Encender");
6   }
7   else
  {
8
    send("Apagar");
9   }
10   delay(100);
11 }
12
Con el botón es más de lo mismo. Si tenemos una función que devuelve la distancia del
sensor (que llamaremos leer_sensor()), sólo hay que poner un condicional:

1
2 void loop()
3 {
  if(leer_sensor() >= 100) //Sustutuimos 100 por cualquier distancia
4   {
5       send("Encender");
6   }
7   else
  {
8
    send("Apagar");
9   }
10   delay(100);
11 }
12
La única “dificultad” será construirnos esta función leer_sensor(), aunque muchos fabricantes
de sensores ofrecen ejemplos de cómo utilizar su sensor con Arduino.

También podría gustarte