El módulo RF consiste en un transmisor y un receptor RF de 433 MHz. Se trata de módulos RF de tipo ASK (Amplitude shift keying) u OOK (Of Hook Keying). Cuando se transmite el cero lógico, el transmisor suprime totalmente la frecuencia portadora y, por lo tanto, sólo consume poca energía en el funcionamiento de la batería. Cuando se transmite la lógica uno, el transmisor está en ON, y la frecuencia portadora es completa y por lo tanto, habrá una alta fuente de alimentación que está en el rango de alrededor de 4,5mA con una fuente de alimentación de 3V.

El transmisor y el receptor son necesarios para ser interconectados con los microcontroladores para la transferencia de datos. Los datos se envían en serie desde el transmisor y son recibidos por un receptor sintonizado. El transmisor de RF recibe los datos en serie desde un microcontrolador y los transmite al receptor a través de una antena conectada al 4º pin del transmisor. El receptor recibe los datos a través de una antena y los entrega al microcontrolador conectado a él.

Estos módulos de RF funcionan a una frecuencia específica de 433MHz. Las señales de RF pueden viajar entre el transmisor y el receptor incluso cuando hay una obstrucción. Estos módulos se utilizan para la comunicación de corto alcance, de bajo presupuesto y basada en simplex. El bajo consumo de energía los hace ideales para implementaciones basadas en baterías. Se utilizan en diversos ámbitos, como controles remotos de iluminación, RFID de largo alcance, sistemas inalámbricos de alarma y seguridad, etc. La comunicación RF se utiliza en la comunicación móvil y puede tener una comunicación de largo alcance y eso es lo que los hace adecuados para la construcción de aplicaciones basadas en IoT. Así que aquí estamos empezando con un artículo introductorio sobre los módulos de RF y cómo los módulos de RF se pueden utilizar con Arduino para enviar y recibir datos.

433 MHz RF Transmitter Module

Este pequeño módulo es el transmisor de RF. Es muy simple. El resonador SAW que está sintonizado para el funcionamiento de 433,xx MHz es el corazón del módulo. Hay un transistor de conmutación y unos pocos componentes pasivos en él.

Cuando se da un ALTO lógico como entrada de datos, el oscilador está encendido y produce una onda portadora de salida de RF constante a 433,xx MHz y cuando la entrada de datos es baja lógica, el oscilador está apagado, por lo que no se produce ninguna portadora. Esta técnica se llama Amplitude Shift Keying (ASK).

Especificaciones

  • Tensión de trabajo: 3V – 12V
  • Corriente de trabajo: máx. Menos de 40mA, y mín. 9mA
  • Modo de resonancia: (SAW)
  • Modo de modulación: ASK
  • Frecuencia de trabajo: 433,92MHz
  • Potencia de transmisión: 25mW
  • Error de frecuencia: +150kHz (máx)
  • Velocidad: menos de 10Kbps
  • Alcance de transmisión: 90m (en espacio abierto)

Módulo receptor RF de 433 MHz

Este es el módulo receptor RF. Aunque parece complejo, es tan sencillo como el módulo transmisor. Consiste en un circuito sintonizador de RF, amplificadores OP y un PLL. Un par de OP-Amps se utilizan para amplificar la onda portadora recibida del transmisor. La señal amplificada se alimenta entonces a un PLL (Phase Lock Loop) que permite al decodificador «bloquear» un flujo de bits digitales que da una salida mejor decodificada e inmunidad al ruido.

Especificaciones

  • Tensión de trabajo: 5,0VDC +0,5V
  • Corriente de trabajo:≤5,5mA máx
  • Modo de modulación: OOK/ASK
  • Frecuencia de trabajo: 433.92MHz
  • Ancho de banda: 2MHz
  • Sensibilidad: supera los -100dBm (50Ω)

Componentes necesarios

  • Arduino Nano (2)
  • Módulo transmisor de 433MHz
  • Módulo receptor de 433MHz
  • Potenciómetro
  • LED (5)
  • Conexión de cables

Diagrama del circuito

El diagrama del circuito para el transmisor de RF utilizando Arduino Nano se da a continuación. Aquí se conecta un potenciómetro para variar los valores a enviar al receptor mediante el transmisor de RF.

A continuación se detallan las conexiones de los pines entre el transmisor de RF y Arduino

  • Pin D12 de Arduino – Pin DATA del transmisor de RF
  • VCC de Arduino – VCC del transmisor de RF
  • GND de Arduino – GND del transmisor de RF
  • GND de Arduino – primer pin del potenciómetro
  • Pin A2 de Arduino – Segundo pin del potenciómetro
  • VCC de Arduino – tercer pin del potenciómetro

El diagrama del circuito para el receptor de RF utilizando Arduino Nano se muestra a continuación. Aquí tenemos una serie de LEDs. Los LEDs se desplazan en base a los valores del potenciómetro recibidos por el receptor.

A continuación se muestran los detalles de las conexiones de los pines entre el receptor de RF y Arduino

  • Pin D11 de Arduino – pin DATA del receptor de RF.
  • VCC de Arduino – VCC del receptor de RF.
  • GND de Arduino – GND del receptor de RF.
  • Los cables positivos de los LEDs están conectados a los pines digitales D2, D3, D4, D5 y D6
  • Los cables negativos de los LEDs están conectados a tierra.

Explicación del código

El código completo de Arduino para el lado del transmisor y el receptor de RF se dan al final de este tutorial, aquí estamos explicando el programa completo para entender el funcionamiento del proyecto. Pero antes de comenzar con el código primero tenemos que instalar una biblioteca en Arduino IDE.

Aquí estamos utilizando la biblioteca de cable virtual. Descargue la biblioteca de cable virtual desde el siguiente enlace

https://www.resistorpark.com/content/Arduino_Libraries/Arduino_Wireless_Communication_Libraries/VirtualWire.zip

VirtualWire es una biblioteca de Arduino que proporciona las características para enviar mensajes cortos, sin direccionamiento, reconocimiento o retransmisión. Los mensajes se envían como un poco como UDP a través de la tecnología inalámbrica utilizando ASK (amplitude shift keying). Esta biblioteca es compatible con una serie de transmisores y receptores de radio de bajo costo.

Para añadir la biblioteca en Arduino IDE ir a Sketch>>Incluir biblioteca>>Añadir biblioteca .ZIP y luego subir la biblioteca que ha descargado desde el enlace anterior.

Después de subir el programa abra el monitor de serie en ambos lados y verá las salidas como se muestra a continuación.

La salida en la sección del transmisor de RF muestra los valores del potenciómetro.

Y la salida en el receptor muestra el valor del sensor recibido. Los LEDs se desplazan según el rango de los valores del sensor. Aquí hemos dado un rango de 200 para cada LED.

Así que esto es cómo Arduino se puede utilizar en la comunicación basada en RF, revisa más proyectos de IoT basados en Arduino aquí.

Código

Código para la sección del transmisor de RF
#include <VirtualWire.h>
const int SensorPin = A2; // pin del potenciómetro
int SensorData;
char SensorCharMsg;
void setup()
{
pinMode(SensorPin,INPUT);
// para depuración
Serial.begin(9600);
// VirtualWire setup
vw_setup(2000); // Bits por seg
}
void loop()
{
// Lee y almacena los datos del Sensor 1
SensorData = analogRead(SensorPin);
// Convertir los datos enteros en matriz Char directamente
itoa(SensorData,SensorCharMsg,10);
// DEBUG
Serial.print(«Sensor Integer: «);
Serial.print(SensorData); //imprime los datos del sensor
Serial.print(» Sensor CharMsg: «);
Serial.print(SensorCharMsg); //imprime la matriz de caracteres
Serial.println(» «);
delay(100);
// END DEBUG
vw_send((uint8_t *)SensorCharMsg, strlen(SensorCharMsg)); // envía el mensaje
vw_wait_tx(); // espera hasta que se acabe todo el mensaje
delay(200);
} // END void loop

Código de la sección receptora de RF
#include <VirtualWire.h>
int SensorData; // Sensores
char SensorCharMsg; // Contenedor de transmisión RF
const int led1 = 2;
const int led2 = 3;
const int led3 = 4;
const int led4 = 5;
const int led5 = 6;
void setup()
{
Serial.begin(9600);
pinMode(led1, INPUT);
pinMode(led2, INPUT);
pinMode(led3, INPUT);
pinMode(led4, INPUT);
pinMode(led5, INPUT);
// VirtualWire
// Inicializa el IO y el ISR
// Necesario para el DR3100
vw_set_ptt_inverted(true);
// Bits por segundo
vw_setup(2000);
// Inicia la ejecución del PLL del receptor
vw_rx_start();
} // END void setup

void loop()
{
uint8_t buf;
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Sin bloqueo
if (vw_get_message(buf, &buflen))
{
int i;
// Mensaje con una buena suma de comprobación recibido, volcarlo.
for (i = 0; i < buflen; i++)
{
// Rellena el array SensorCharMsg Char con los correspondientes
// chars del buffer.
SensorCharMsg = char(buf);
}
// Terminar de forma nula el array de char
// Esto debe hacerse porque de lo contrario se producirán problemas
// cuando los mensajes entrantes tengan menos dígitos que el
// anterior.
SensorCharMsg = ‘\0’;
// Convierte la matriz de caracteres Sensor1CharMsg en un entero
SensorData = atoi(SensorCharMsg);
// DEBUG
Serial.print(«Sensor «);
Serial.println(SensorData);
// END DEBUG
}
if (SensorData <= 200)
{
digitalWrite(led1, HIGH);
}
else
digitalWrite(led1, LOW);
si ( SensorData > 200 && SensorData <= 400)
{
digitalWrite(led2, HIGH);
}
else
digitalWrite(led2, LOW);
if ( SensorData > 400 && SensorData <= 600)
{
digitalWrite(led3, HIGH);
}
else
digitalWrite(led3, LOW);
if ( SensorData > 600 && SensorData <= 800)
{
digitalWrite(led4, HIGH);
}
else
digitalWrite(led4, LOW);
if ( SensorData > 800 && SensorData <= 1023)
{
digitalWrite(led5, HIGH);
}
else
digitalWrite(led5, LOW);
}

Video

Deja una respuesta

Tu dirección de correo electrónico no será publicada.