Estás interesado en hacer que tu próximo proyecto Arduino sea inalámbrico por menos que lo que cuesta una taza de café? ¡Entonces escoge un módulo transmisor y receptor de RF de 433 MHz!

 

Está disponible en nuestra tienda, y es una de las opciones de comunicación de datos más asequibles disponibles. Y, lo mejor de todo, este módulo es tan pequeño que puedes incorporarlo a casi cualquier proyecto.

Descripción general del hardware

Echemos un vistazo más de cerca a los módulos transmisores y receptores de RF de 433 MHz.

 

El transmisor

Este pequeño módulo sirve como transmisor. Es tan simple como parece. En el núcleo del módulo hay un resonador SAW sintonizado para operar a 433.xx MHz. Aparte de eso, tiene un transistor de conmutación y algunos componentes pasivos.

Cuando la entrada de DATOS es alta, el oscilador genera una onda portadora de salida de RF constante a 433,xx MHz, y cuando la entrada de DATOS es baja, el oscilador deja de funcionar; dando como resultado una onda modulada en amplitud. Esta técnica se conoce como Amplitude Shift Keying, que veremos en detalle en breve.

El receptor

Este módulo en particular es un receptor. Es tan simple como el módulo transmisor, a pesar de su apariencia. Consiste en un circuito sintonizado de RF y un par de amplificadores operacionales (OP Amps) que amplifican la onda portadora recibida. Luego, la señal amplificada se alimenta a un PLL ( Phase Lock Loop ), que permite que el decodificador se “bloquee” en un flujo de bits digitales, lo que resulta en una mejor salida decodificada e inmunidad al ruido.

ASK – Modulación por desplazamiento de amplitud

Como se mencionó anteriormente, estos módulos utilizan una técnica conocida como  Amplitude Shift Keying , o ASK, para transmitir datos digitales por radio. En la modulación por desplazamiento de amplitud, la amplitud de la onda portadora (señal de 433 MHz en nuestro caso) se modifica en respuesta a una señal de datos entrante.

Es muy parecido a la técnica de modulación de amplitud utilizada en la radio AM. Debido a que solo tiene dos niveles, a veces se le denomina modulación por desplazamiento de amplitud binaria.

Puede considerarlo como un interruptor de ENCENDIDO/APAGADO.

    • Para la lógica 1: se transmite la onda portadora.
    • Para 0 lógico, no se transmite ninguna señal.

Aquí hay una ilustración de la modulación de amplitud:

La ventaja de la modulación por cambio de amplitud es que es muy fácil de implementar. El circuito del decodificador es bastante simple de diseñar. Además, ASK requiere menos ancho de banda que otras técnicas de modulación como FSK (Frequency Shift Keying frecuencias de modulación por desplazamiento). Esta es una de las razones por las que es rentable.

La desventaja de ASK es que es susceptible a la interferencia de otros equipos de radio y al ruido ambiental. Sin embargo, siempre que transmita datos a una velocidad relativamente lenta, puede funcionar de manera confiable en la mayoría de los entornos.

Asignación de pines del transmisor y receptor de RF de 433 MHz

Echemos un vistazo a la distribución de pines de los módulos transmisores y receptores de RF de 433 MHz.

DATA : pin acepta datos digitales para ser transmitidos.

VCC : proporciona energía al transmisor. Se puede utilizar cualquier tensión de CC positiva entre 3,5 V y 12 V. Cabe señalar que la salida de RF es proporcional al voltaje de suministro, por lo que cuanto mayor sea el voltaje, mayor será el rango.

GND : es el pin de tierra.

Antenna : es un pin que se conecta a la antena externa. Para mejorar el alcance, debe soldar un cable sólido de 17,3 centímetros de largo a este pin. Se discute en detalle más adelante.

 

VCC : proporciona energía al receptor. A diferencia del transmisor, el receptor requiere un voltaje de suministro de 5V.

DATA : Los pines emiten los datos digitales recibidos. Ambos pines están vinculados internamente, por lo que puede usar cualquiera de ellos para la salida de datos.

GND: es el pin de tierra.

Antenna : es un pin que se conecta a la antena externa. Para mejorar el alcance, debe soldar un cable sólido de 17,3 centímetros de largo a este pin.

 

Cableado de los módulos transmisor y receptor de RF de 433 MHz al Arduino

 

Ahora que tenemos una comprensión completa de estos módulos, ¡es hora de ponerlos en práctica!

Debido a que enviaremos datos entre dos placas Arduino, necesitaremos dos placas Arduino, dos placas de prueba y algunos cables de puente.

 

Cableado para el transmisor

Es sencillo cablear el transmisor, ya que solo tiene tres conexiones.

Conecta el pin VCC del módulo al pin 5V de Arduino y GND a tierra. El pin de entrada de datos debe estar conectado al pin digital 12 en el Arduino. Intenta usar solo el pin digital 12 para la entrada de datos, ya que la biblioteca que estamos usando usa este pin de manera predeterminada.

 

 

Cableado para el Receptor

Después de conectar el transmisor, puede pasar al receptor. El cableado del receptor es tan simple como el del transmisor.

Una vez más, solo hay que hacer tres conexiones. Conecta el pin VCC del módulo al pin 5V de Arduino y GND a tierra. Conecte cualquiera de los dos pines de salida de datos del medio al pin digital #11 de Arduino, ya que están conectados internamente.

El cableado se muestra en la siguiente imagen.

 

 

RadioHead Library: una navaja suiza para módulos inalámbricos

 

A diferencia de los módulos de RF avanzados como  el nRF24L01 , el módulo de RF de 433 MHz es un módulo de RF básico sin detección de errores de transmisión de datos incorporada. Por lo tanto, es nuestra responsabilidad incorporar CRC ( comprobación de redundancia cíclica ) en nuestro código.

Aquí es donde la conocida biblioteca RadioHead  resulta útil. Maneja cálculos CRC, lo que hace que la comunicación sea más confiable. La biblioteca es tan versátil que se puede utilizar con cualquier tipo de módulo de RF, no solo con módulos de RF de 433 MHz.

En el extremo del transmisor, la biblioteca RadioHead toma los datos, los encapsula en un paquete de datos (conocido como paquete RadioHead) con una suma de verificación CRC y luego lo envía a otro Arduino con el preámbulo y el encabezado necesarios. En el extremo del receptor, si los datos se reciben correctamente, se notifica al Arduino receptor que los datos están disponibles.

 

El paquete RadioHead

El paquete RadioHead se construye de la siguiente manera: al comienzo de cada transmisión, se envía un flujo de 36 bits de pares de bits “1” y “0” conocido como “preámbulo de entrenamiento”. Estos bits son necesarios para que el receptor ajuste su ganancia antes de recibir los datos reales. Luego se agrega un “Símbolo de inicio” de 12 bits, seguido de los datos reales (carga útil).

Al final del paquete, se agrega una secuencia de verificación de tramas o CRC, que RadioHead vuelve a calcular en el extremo del receptor y, si la verificación de CRC es correcta, se alerta al dispositivo receptor. Si la comprobación de CRC falla, el paquete se descarta.

Así es como se ve el paquete de RadioHead:

Descarga la Librería

Puedes obtener la librería en  airspayce.com  o haciendo clic en el siguiente enlace: RadioHead.zip

Para instalar la biblioteca, inicie el IDE de Arduino, vaya a Sketch > Incluir biblioteca > Add.ZIP Library y luego elija el archivo RadioHead que acaba de descargar. Para obtener más información sobre la instalación de una librería, consulte el  tutorial Instalación de una biblioteca Arduino .

 

Código de ejemplo de Arduino

En este sencillo experimento, intentaremos enviar un mensaje de texto corto desde el transmisor al receptor y ver si se puede decodificar. Será útil para aprender a usar los módulos y puede servir como base para experimentos y proyectos más prácticos.

Código para el transmisor

Aquí está el boceto que usaremos para nuestro transmisor:

// Incluye la biblioteca de claves RadioHead Amplitude Shift
#include <RH_ASK.h>
// Incluir biblioteca SPI dependiente 
#include <SPI.h> 
 
// Crear objeto de incrustación de desplazamiento de amplitud
RH_ASK rf_driver;
 
void setup()
{
    // Initialize ASK Object
    rf_driver.init();
}
 
void loop()
{
    const char *msg = "Hello World";
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();
    delay(1000);
}

Explicación del código:

Es un sketch corto, pero eso es todo lo que necesitas para enviar un mensaje. El sketch comienza con la inclusión de la biblioteca ASK de RadioHead. La librería Arduino SPI  también debe incluirse porque la librería RadioHead depende de ella. Si quieres conocer más sobre el protocolo SPI puedes revisar el siguiente tutorial Protocolo SPI (Serial Peripheral Interface)

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

Para acceder a funciones especiales relacionadas con la librería ASK de RadioHead, primero debemos crear un objeto ASK.

//Crear objeto de incrustación de desplazamiento de amplitud
RH_ASK rf_driver;

En la función de configuración, inicializamos el objeto ASK.

// Inicializar el objeto ASK
rf_driver.init();

Comenzamos la función de loop preparando un mensaje. Es solo una cadena de texto que se almacena en un puntero de carácter llamado msg. Tenga en cuenta que su mensaje puede ser lo que quiera, pero no debe tener más de 27 caracteres para un rendimiento óptimo. Además, mantenga un registro de la cantidad de caracteres que contiene porque lo necesitará en el código del receptor. Tenemos 11 caracteres en nuestro caso.

// Preparación de un mensaje
const char *msg = "Hello World";

A continuación, el mensaje se envía mediante la función send(). Esta función toma dos parámetros: una matriz de datos y el número de bytes (longitud de datos) para enviar.

Normalmente, la send()función es seguida por la waitPacketSent()función, que espera hasta que se completa la transmisión. Finalmente, el boceto se detiene por un segundo para permitir que nuestro receptor procese todo.

rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
delay(1000);

Código para el Receptor

Aquí está el código de nuestro receptor. Conecte el circuito del receptor a la computadora y cargue el siguiente código.

// Incluye la biblioteca de claves RadioHead Amplitude Shift
#include <RH_ASK.h>
// Include dependant SPI Library 
#include <SPI.h> 
 
// Crear objeto de incrustación de desplazamiento de amplitud
RH_ASK rf_driver;
 
void setup()
{
    // Inicializar el objeto ASK
    rf_driver.init();
    // Configurar Serial Monitor
    Serial.begin(9600);
}
 
void loop()
{
    // Establecer el búfer en el tamaño del mensaje esperado
    uint8_t buf[11];
    uint8_t buflen = sizeof(buf);
    // Compruebe si el paquete recibido tiene el tamaño correcto
    if (rf_driver.recv(buf, &buflen))
    {
      
      // Mensaje recibido con suma de comprobación válida
      Serial.print("Message Received: ");
      Serial.println((char*)buf);         
    }
}

Después de cargar el sketch, abre tu monitor en serie. Si todo está bien, deberías poder ver tu mensaje.

Salida de módulo RF inalámbrico de 433 MHz en monitor serie – Receptor

Explicación del código:

El código del receptor, al igual que el código del transmisor, comienza cargando las liberría RadioHead y SPI y creando un objeto ASK.

#include <RH_ASK.h>
#include <SPI.h> 
RH_ASK rf_driver;
En la función de configuración, inicializamos el objeto ASK y configuramos el monitor serie para mostrar el mensaje recibido.
rf_driver.init();
Serial.begin(9600);

En la función de loop, creamos un búfer del mismo tamaño que el mensaje transmitido. ¿Recuerdas que en nuestro caso son 11? Esto deberá ajustarse para que coincida con la longitud de su mensaje. Incluye los espacios y la puntuación porque todos cuentan como caracteres.

uint8_t buf[11];
uint8_t buflen = sizeof(buf);
Entonces llamamos a la recv()función. Esto activa el receptor. Cuando hay un mensaje válido disponible, lo copia en su primer búfer de parámetros y devuelve verdadero. Si la función devuelve verdadero, el mensaje recibido se imprime en el monitor serie.
if (rf_driver.recv(buf, &buflen))
{
  Serial.print("Message Received: ");
  Serial.println((char*)buf);         
}

Luego volvemos al principio del ciclo y repetimos el proceso.

Mejora del alcance del módulo RF de 433 MHz con una antena

La antena que usa tanto para el transmisor como para el receptor puede tener un impacto significativo en el rango que puede lograr. De hecho, sin una antena, tendrías suerte de poder comunicarte a más de un metro. Con el diseño de antena adecuado, podrá comunicarse a una distancia de 50 metros.

La antena no tiene por qué ser complicada. Se puede usar un cable de un solo núcleo para hacer una antena excelente tanto para el transmisor como para el receptor.

La longitud de la antena más efectiva es igual a la longitud de onda de una frecuencia de transmisión. En la práctica, sin embargo, la mitad o la cuarta parte de esa longitud es suficiente.

La longitud de onda de una frecuencia  se calcula como:

La velocidad de transmisión en el aire es igual a la velocidad de la luz, que es de 299 792 458 m/s para ser precisos. Entonces, para la banda de 433 MHz, la longitud de onda es:

Una antena de 69,24 cm es bastante larga e incómoda de usar. Por eso utilizaremos una antena de cuarto de onda, que mide 17,3 cm o 6,8 pulgadas.

Enrollar la antena para hacerla más compacta reducirá severamente su alcance. ¡Siempre es preferible una antena recta!

Insight Into How 433MHz RF Tx-Rx Modules Work & Interface with Arduino (lastminuteengineers.com)