Comunicación RF 433Mhz con Arduino

Comunicación RF 433Mhz con Arduino

A la hora de diseñar un proyecto con Arduino donde la comunicación entre dos o más Arduinos sea un requerimiento, los módulos RF 433Mhz (o 315Mhz) son una excelente opción cuando las distancias entre Arduinos no es muy excesiva. Existen en el mercado opciones chinas de juegos de módulos emisor/receptor a precios increíblemente económicos y bien integrados operan con increible rendimiento.

Los módulos RF 433Mhz

Los módulos se venden usualmente de a pares (un emisor y un receptor) y según la aplicación podremos necesitar un par o dos (dependiendo de si necesitamos emitir y recibir desde ambos Arduinos, o solo emitimos desde uno y recibimos en el otro). Veremos ambos módulos, su conexionado típico, y algunas características de cada uno.

Módulo Receptor

Módulo receptor RF 433Mhz

El módulo receptor es el que tiene forma más rectangular. Se caracteríza por tener 4 pines de conexión (aunque solo se usan 3), y no poseen opción para antena (en realidad vienen con el agujero estañado ya que no es necesaria antena externa). El receptor opera a 5V por lo que podremos alimentarlo directamente desde nuestro Arduino. Las especificaciones técnicas del módulo son las siguientes:

  • Voltaje de trabajo: 5VDC
  • Consumo: 4mA
  • Modulación: ASK / OOK
  • Frecuencia de recepción: 433Mhz (o 315Mhz según el modelo)

Y lo conectaremos a nuestro Arduino de la siguiente manera:

Módulo -> Arduino UNO / Mega 2560
GND -> GND
VCC -> 5V
DATA -> Pin 2

Arduino UNO conectado a receptor RF 433Mhz

Módulo Transmisor

Módulo transmisor RF 433Mhz

El módulo transmisor es el más cuadrado de los dos. Posee 3 pines de conexión. Una característica especial de este módulo es el lugar para una antena opcional que mejorará su ganancia. Otra característica especial de este módulo es su capacidad de operar en un rango amplio de voltajes (3V-12V) aunque su rendimiento será proporcional al mismo. Para nuestras pruebas lo alimentaremos directamente desde nuestro Arduino con 5V y no usaremos antena externa. Las especificaciones técnicas del módulo son las siguientes:

  • Voltaje de trabajo: 3-12VDC
  • Consumo: 20-28mA
  • Modulación: ASK / OOK
  • Frecuencia de transmisión: 433Mhz (o 315Mhz según el modelo)

Y lo conectaremos a nuestro Arduino de la siguiente manera:

Módulo -> Arduino UNO / Mega 2560
GND -> GND
VCC -> 5V
DATA -> Pin 4

Arduino UNO conectado a transmisor RF 433Mhz

Sketches

Antes de cargar los Sketches, deberán asegurarse de tener la libreria RadioHead instalada. Puede encontrarla aqui: http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.81.zip

Emisor RF 433Mhz

#include <RH_ASK.h>
#include <SPI.h>

// 2000bps, Pin 2 recibir, in 4 enviar
RH_ASK driver(2000, 2, 4);

void setup() {
  
    Serial.begin(9600);
    
    if (!driver.init()) {
         Serial.println("Fallo de iniciacion");
    }
}

void loop() {
  
    const char *msg = "Hola Mundo!";

    driver.send((uint8_t *)msg, strlen(msg));
    
    // Esperamos a que se termine de enviar el mensaje
    driver.waitPacketSent();
    
    // Enviamos el texto cada 1 segundo
    delay(1000);
}

Receptor RF 433Mhz

#include <RH_ASK.h>
#include <SPI.h>

RH_ASK driver(2000, 2, 4);

void setup() {
  
    Serial.begin(9600);
    
    if (!driver.init()) {
         Serial.println("Fallo de iniciacion");
    }
}

void loop() {
    uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
    uint8_t buflen = sizeof(buf);

    if (driver.recv(buf, &buflen)) {
	buf[buflen] = '\0';

	// Mostrar el mensaje recibido
        Serial.print(String("Recibido: ") + String((char*)buf));
	// driver.printBuffer("", buf, buflen);
    }
}

Cargue primero el Sketch del emisor y luego el del receptor. Abra una consola Serial en el receptor y deberá ver algo similar a lo siguiente:

Recibido: Hola Mundo!
Recibido: Hola Mundo!
Recibido: Hola Mundo!

Donde el mensaje se irá repitiendo cada 1 segundo.

Enlace a otras páginas que exploran estos módulos en mayor profundidad:

 

Deja un comentario