Site icon AranaCorp

Usando um módulo RF433MHz com Arduino

A frequência de rádio de 433MHz (RF 433MHz) é amplamente utilizada no campo das transmissões de rádio, seja para controlo remoto ou transmissão de dados. Pode ser encontrado em controlos remotos ou em domótica.

Material

Como funciona

O módulo RF de 433 MHz é utilizado para transmitir informação sem fios através de ondas de rádio. O transmissor modula os dados de série externos em alta frequência e transmite-os por ligação rádio para o módulo receptor. O módulo consiste num transmissor de rádio APF03 e num receptor APRXB12. Utiliza a modulação ASK (Amplitude Shift Keying) com uma frequência de 433 MHz.

Os módulos de rádio RF433MHz têm um alcance de alguns metros (<5m). Esta gama pode ser grandemente aumentada com uma fonte de tensão mais alta e uma antena de tamanho adequado. Em teoria, até 100m sem obstrução.

Existem diferentes módulos de comunicação sem fios utilizando diferentes protocolos (Wifi, LoRa, etc.) ou com desempenho superior (HC-12, nRF24l01, nRF905, etc.) Verificar as especificações técnicas e o desempenho do módulo utilizado.

Esquema

Na biblioteca VirtualWire que vamos utilizar, os pinos predefinidos utilizados são o pino 12 para o pino de dados do transmissor e o pino 11 para o pino de dados do receptor.

A atribuição dos pinos pode ser diferente dependendo do código e da biblioteca utilizada.

Código do emissor

Para começar, é necessário descarregar a biblioteca VirtualWire em zip, depois em Arduino, ir ao sketch, incluir uma biblioteca, adicionar a biblioteca .zip e colocar a pasta .zip correspondente. Uma vez instalado, é necessário reiniciar o Arduino. Quando as placas estiverem ligadas ao seu PC, escolha uma porta 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 do 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);
  }
}

É possível alterar os pinos utilizados utilizando as funções vw_set_rx_pin e 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

Uma vez carregados os códigos em cada um dos microcontroladores, deverá ver a mensagem exibida no monitor de série do receptor.

Aplicações

Fontes


Exit mobile version