Icono del sitio AranaCorp

Uso de un módulo RF433MHz con Arduino

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

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.

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

Fuentes


Salir de la versión móvil