MODULO DE RADIO FRECUENCIA RF433 - ARDUINO

Vivimos en una época y somos parte de una generación donde la comunicación forma parte de nuestras vidas, utilizamos dispositivos electrónicos que nos permiten comunicarnos al instante con cualquier persona, todo esto nos obliga a la hora de realizar un proyecto electrónico en el que necesitamos establecer una comunicación entre dispositivos, que esta comunicación sea inalambrica, usar un cable seria renegar de las nuevas tecnologías y le quitaría seriedad a nuestro proyecto.

Supongamos que queremos implementar un timbre con arduino, para que colocar un cable desde el timbre hasta la campana que esta en el interior de la casa si podemos establecer la comunicación inalambricamente.

La comunicación la podemos implementar de muchas maneras, pero en este tutorial vamos a hacerlo mediante el módulo de radio frecuencia RF433.

Modulo de radiofrecuencia 433MHZ

Este modulo viene con dos componentes, uno el emisor y otro el receptor, obviamente no son lo mejor que hay, pero teniendo en cuenta que solo sale dos dolares en eBay vale a pena utilizarlo!

Buscando información sobre el tema, encontré muchos ejemplos que utilizan al emisor para darle la orden al receptor que encienda un led, obviamente lo importante no es encender un led si no establecer la comunicación entre ambos dispositivos.

Índice
  1. MATERIALES
  2. CÓDIGO RECEPTOR
  3. CÓDIGO EMISOR

MATERIALES

La verdad es que no necesitamos muchas cosas, por suerte esta vuelta sale todo barato!

  • Dos arduino, uno para el emisor y otro para el receptor
  • Modulo de radio frecuencia RF433 Emisor/Receptor
  • Un Led y algunas resistencias
  • Ganas de programar 🙂

CÓDIGO RECEPTOR

Como se puede ver en el código, utilizamos la libreria VirtualWire.h, en ella se resuelven la mayoría de los problemas que tendríamos si nos mandamos a hacer todo nosotros mismos.

  • vw_setup(2000) es la función que da arranque a la comunicación por radio frecuencia, tiene el mismo funcionamiento que la serial.begin, es importante que toda la configuración de pines este definido antes de invocar a esta función.
  • vw_rx_start() con esta función damos inicio a que nuestro pin de recepción comience a escuchar lo que se le envía, es muy importante saber que si la función la utilizamos como en este ejemplo arduino reconoce que el pin es el numero once, podemos elegir otro pin, pero para eso tenemos que invocar a la función de la siguiente manera vw_set_rx_pin(9) por ejemplo.
#include <VirtualWire.h>
 
//Creamos un mensaje
//La constante VW_MAX_MESSAGE_LEN viene definida en la libreria
byte message[VW_MAX_MESSAGE_LEN];
byte messageLength = VW_MAX_MESSAGE_LEN;
 
void setup()
{
  pinMode(13, OUTPUT); //Configuramos el pin 13
  
  Serial.begin(9600);//Iniciamos el Serial
  Serial.println("Iniciando...");
  
  vw_setup(2000);
  vw_rx_start();
}
void loop()
{
  if (vw_get_message(message, &messageLength))
  {
      if(comparar("Encender") == 0){
        digitalWrite(13, HIGH);
        Serial.write("LED Encendido\n");
      }
      else if(comparar("Apagar") == 0)
      {
        digitalWrite(13,LOW);
        Serial.write("LED Apagado\n");
      }
  
  }
}
 
char comparar(char* cadena) {
  //Esta funcion compara el string cadena con el mensaje recibido.
  //Si son iguales, devuelve 1. Si no, devuelve 0.
  
  for(int i = 0; i<messageLength; i++)
  {
    if(message[i] != cadena[i])
    {
      return 1;
    }
  }
 
    return 0;
}

CÓDIGO EMISOR

En función de lo que el emisor nos envía, con este código vamos a recibir la señal, procesarla y realizar la acción que corresponda, como dije antes, aca se trata solo de prender un Led, pero la acción podría ser cualquier otra cosa, prender el aire acondicionado, cerrar la puerta etc etc.

La idea es entender la comunicación, el resto depende de la imaginación de ustedes 🙂

#include <VirtualWire.h>
void setup()
{
  Serial.begin(9600);
  Serial.write("Sistema encendido\n");
  vw_setup(2000);
}
void loop()
{
  send("Encender");
  delay(1000);
  send("Apagar");
  delay(1000);
}
void send (char *message)
{
  vw_send((uint8_t *)message, strlen(message)); //Envia el mensaje
  vw_wait_tx(); //Espera hasta que se haya acabado de transmitir todo
  Serial.println(message); //Muestra el mensaje por Serial
}

  1. oye estoy tratando de compilar el programa del emisor y me salen estos errores que puedo hacer

    sketch_oct21b.ino: In function 'void setup()':
    sketch_oct21b:6: error: 'vw_setup' was not declared in this scope
    sketch_oct21b.ino: In function 'void send(char*)':
    sketch_oct21b:17: error: 'vw_send' was not declared in this scope
    sketch_oct21b:18: error: 'vw_wait_tx' was not declared in this scope

  2. veloso dice:

    Como estas jimbrayan?
    Te comento, es muy probable que exista una incompatibilidad en la librería que tienes con versiones anteriores, pro favor fíjate dentro de la libreria VirtualWire.h si tienes lo siguiente.

    #include
    #include

    En el caso de encontrarlo reemplazarlo por esto.

    #include
    #if ARDUINO < 100#include
    #else
    #include
    #endif

    Gracias por comentar, y espero que se resuelva de esa manera.

    Saludos!

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.

Subir

Este sitio web utiliza cookies propias y de terceros para mejorar su experiencia. Puede optar por no participar si lo desea. Mas información