Etiquetas: ,

La frecuencia de radio de 433MHz (RF 433MHz) se utiliza ampliamente en el campo de las transmisiones de radio, ya sea para el control remoto o la transmisión de datos. Se puede encontrar en los mandos a distancia o en la domótica.

Material

  • Ordenador
  • Arduino UNO
  • Cable USB A Macho
  • Interruptor de láminas (ILS)

Cómo funciona

El módulo RF de 433 MHz se utiliza para transmitir información de forma inalámbrica a través de ondas de radio. El transmisor se utiliza para modular los datos externos en serie a alta frecuencia y transmitirlos por enlace de radio al módulo receptor. El módulo está compuesto por un transmisor de radio APF03 y un receptor APRXB12. Utiliza la modulación ASK (Amplitude Shift Keying) en una frecuencia de 433 MHz.

Los módulos de radio RF433MHz tienen un alcance de pocos metros (<5m). Este alcance puede aumentar considerablemente con una fuente de tensión más alta y una antena de tamaño adecuado. En teoría, hasta 100 m sin obstáculos.

Existen diferentes módulos de comunicación inalámbrica que utilizan distintos protocolos (Wifi, LoRa, etc.) o con mayores prestaciones (HC-12, nRF24l01, nRF905, etc.) Compruebe las especificaciones técnicas y las prestaciones del módulo utilizado.

Esquema

En la librería VirtualWire que vamos a utilizar, los pines por defecto utilizados son el pin 12 para el pin de datos del transmisor y el pin 11 para el pin de datos del receptor.

arduino-module-rf433mhz-transmitter-receiver_bb Uso de un módulo RF433MHz con Arduino

La asignación de pines puede ser diferente dependiendo del código y de la biblioteca utilizada.

Código del emisor

Para empezar hay que descargar la librería VirtualWire en zip, luego en Arduino, ir a sketch, incluir una librería, añadir la librería .zip y poner la carpeta .zip correspondiente. Una vez instalado, hay que reiniciar Arduino. Una vez que las placas están conectadas a su PC, elija un puerto diferente para cada placa.

#include <VirtualWire.h>
#define TxPin 12
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, INPUT);
  Serial.begin(9600);    // Debugging only
  Serial.println("Setup Transmitter");

  // Initialise the IO and ISR
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);  // Bits per sec
}

void loop()
{
  const char *msg = "Bonsoir tous le monde";

  digitalWrite(13, true); // Flash a light to show transmitting
  vw_send((uint8_t *)msg, strlen(msg));
  vw_wait_tx(); // Wait until the whole message is gone
  digitalWrite(13, false);
  delay(200);
}

Código del receptor

#include <VirtualWire.h>
#define RxPin 11
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);  // Debugging only
  Serial.println("Setup Receiver");

  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);  // Bits per sec

  vw_rx_start();       // Start the receiver PLL running
}

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

  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    int i;

    digitalWrite(13, true); // Flash a light to show received good message
    // Message with a good checksum received, dump it.
    Serial.print("From transmitter : ");

    for (i = 0; i < buflen; i++)
    {
      //Serial.print(buf[i], HEX);       →sert a afficher les valeurs en héxa
      Serial.print(char(buf[i]));
      //Serial.print(" ");
    }
    Serial.println("");
    digitalWrite(13, false);
  }
}

Es posible cambiar los pines utilizados utilizando las funciones vw_set_rx_pin y vw_set_tx_pin:

//Pour l’émetteur il faut taper
vw_set_tx_pin(txPin);

//Pour le récepteur il faut taper
vw_set_rx_pin(rxPin);

Resultados

Una vez que los códigos se han cargado en cada uno de los microcontroladores, debería ver el mensaje que aparece en el monitor de serie del receptor.

Aplicaciones

  • Transmisión de datos a distancia
  • Control remoto del sistema

Fuentes