Uma opção barata e eficiente para transmissão de dados entre placas Arduino, o módulo RF 433 MHz funciona muito bem em aplicações onde a velocidade de transmissão não é um ponto crítico.

Comunicação sem fio Arduino módulo RF 433 MHz

Esses módulos são pequenos, baratos e relativamente fáceis de usar, e é isso que veremos neste artigo, enviando sinais de um Arduino para outro.

O módulo RF 433 MHz

O módulo transmissor funciona com alimentação entre 3,5 e 12V, o que influi na potência e alcance do sinal, que pode chegar à 200 metros quando utilizamos também antenas adequadas.

Módulo RF 433 MHz Pinagem

Para testar esses módulos RF com Arduino, vamos utilizar o seguinte material:

  • 2 placas Arduino Uno
  • 1 Módulo RF 433 MHz Transmissor
  • 1 Módulo RF 433 MHz Receptor
  • 1 Push button
  • 1 Led
  • 1 resistor de 220 ohms (resistor pull-up do push-button)
  • 1 resistor de 470 ohms (para o led)

Vamos montar dois circuitos separados, um para o transmissor e outro para o receptor. Para pequenas distâncias, não é necessário o uso da antena.

Obs: Se deseja utilizar o módulo RF 433MHz com vários transmissores e um receptor, não deixe de conferir o post Sistema Chama Garçom com Arduino e módulo RF 433MHz, aqui mesmo no Arduino e Cia!

Circuito Arduino Uno – Transmissor

No circuito transmissor o pino DATA do módulo RF será conectado ao pino digital 4 do Arduino. O push-button vai no pino analógico A0, e a alimentação do circuito é de 5V:

Circuito Arduino Módulo RF 433 MHz - Transmissor

Antes de carregar o programa, faça o download da biblioteca VirtualWireneste link. Faça o download, descompacte o arquivo e coloque a pasta VirtualWire dentro da pasta LIBRARIES da IDE do Arduino.

Carregue o programa abaixo no Arduino que será o TRANSMISSOR. Em caso de problemas com a recepção, tente alterar a velocidade de comunicação alterando a linha vw_setup(5000) colocando um valor menor, lembrando que o valor deve ser o mesmo tanto programa do transmissor como do receptor.

O programa verifica se o botão foi pressionado, e nesse caso inverte o valor da variável estado (0 ou 1) para string, enviando esse valor para o módulo transmissor RF.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//Programa: Comunicacao com Modulo RF 433 - Emissor
//Autor: Arduino e Cia
#include <VirtualWire.h>
//Define pinos Led e Botao
const int ledPin = 13;
const int pino_botao = A0;
int valor_botao;
char Valor_CharMsg[4];
//Armazena estado led = ligar/desligar
int estado = 0;
void setup()
{
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
pinMode(pino_botao,INPUT);
//Pino ligado ao pino DATA do transmissor RF
vw_set_tx_pin(4);
//Velocidade de comunicacao (bits por segundo)
vw_setup(5000);
Serial.println("Trasmissao modulo RF - Acione o botao...");
}
void loop()
{
//Verifica o estado do push-button
valor_botao = digitalRead(pino_botao);
//itoa(valor_botao,Valor_CharMsg,10);
//Caso o botao seja pressionado, envia dados
if (valor_botao == 0)
{
//Altera o estado do led
estado = !estado;
//Converte valor para envio
itoa(estado,Valor_CharMsg,10);
//Liga o led da porta 13 para indicar envio dos dados
digitalWrite(13, true);
//Envio dos dados
vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg));
//Aguarda envio dos dados
vw_wait_tx();
//Desliga o led da porta 13 ao final da transmissao
digitalWrite(13, false);
Serial.print("Valor enviado: ");
Serial.println(Valor_CharMsg);
delay(500);
}
}
//Programa: Comunicacao com Modulo RF 433 - Emissor //Autor: Arduino e Cia #include <VirtualWire.h> //Define pinos Led e Botao const int ledPin = 13; const int pino_botao = A0; int valor_botao; char Valor_CharMsg[4]; //Armazena estado led = ligar/desligar int estado = 0; void setup() { Serial.begin(9600); pinMode(ledPin,OUTPUT); pinMode(pino_botao,INPUT); //Pino ligado ao pino DATA do transmissor RF vw_set_tx_pin(4); //Velocidade de comunicacao (bits por segundo) vw_setup(5000); Serial.println("Trasmissao modulo RF - Acione o botao..."); } void loop() { //Verifica o estado do push-button valor_botao = digitalRead(pino_botao); //itoa(valor_botao,Valor_CharMsg,10); //Caso o botao seja pressionado, envia dados if (valor_botao == 0) { //Altera o estado do led estado = !estado; //Converte valor para envio itoa(estado,Valor_CharMsg,10); //Liga o led da porta 13 para indicar envio dos dados digitalWrite(13, true); //Envio dos dados vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg)); //Aguarda envio dos dados vw_wait_tx(); //Desliga o led da porta 13 ao final da transmissao digitalWrite(13, false); Serial.print("Valor enviado: "); Serial.println(Valor_CharMsg); delay(500); } }
//Programa: Comunicacao com Modulo RF 433 - Emissor
//Autor: Arduino e Cia

#include <VirtualWire.h>

//Define pinos Led e Botao
const int ledPin = 13;
const int pino_botao = A0;

int valor_botao;
char Valor_CharMsg[4]; 
//Armazena estado led = ligar/desligar
int estado = 0;

void setup() 
{
  Serial.begin(9600);   
  pinMode(ledPin,OUTPUT);
  pinMode(pino_botao,INPUT);
  //Pino ligado ao pino DATA do transmissor RF
  vw_set_tx_pin(4);
  //Velocidade de comunicacao (bits por segundo)
  vw_setup(5000);
  Serial.println("Trasmissao modulo RF - Acione o botao...");
}

void loop() 
{
  //Verifica o estado do push-button
  valor_botao = digitalRead(pino_botao);
  //itoa(valor_botao,Valor_CharMsg,10);
  
  //Caso o botao seja pressionado, envia dados
  if (valor_botao == 0)
  {
    //Altera o estado do led
    estado = !estado;
    //Converte valor para envio
    itoa(estado,Valor_CharMsg,10);
    //Liga o led da porta 13 para indicar envio dos dados
    digitalWrite(13, true);
    //Envio dos dados
    vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg));
    //Aguarda envio dos dados
    vw_wait_tx();
    //Desliga o led da porta 13 ao final da transmissao
    digitalWrite(13, false);
    Serial.print("Valor enviado: ");
    Serial.println(Valor_CharMsg);
    delay(500);
  }
}

Verifique o funcionamento do circuito abrindo o serial monitor e checando se o estado do botão está sendo alterado:

Serial Monitor RF433 MHz - Transmissor

Circuito Arduino Uno – Receptor

A alimentação do módulo receptor também é feita por meio do pino 5V do Arduino. O receptor possui 2 pinos de dados, e qualquer um deles pode ser utilizado para ligação ao Arduino, na porta 7. O led que vai acender ou apagar conforme os comandos enviados pelo Arduino Transmissor está ligado à porta 5:

Circuito Arduino Módulo RF 433 MHz - Receptor

O ideal é alimentar o Arduino com o módulo receptor utilizando uma bateria ou fonte externa, para testar o alcance do módulo.

O programa do receptor recebe do transmissor o valor 0 ou 1 em formato string, converte esse valor para int (inteiro) e aciona a porta 5, ligando ou desligando o led.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//Programa: Comunicacao com Modulo RF 433 - Receptor
//Autor: Arduino e Cia
#include <VirtualWire.h>
//Define pino led
int ledPin = 5;
int valor_recebido_RF;
char recebido_RF_char[4];
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
//Pino ligado ao pino DATA do receptor RF
vw_set_rx_pin(7);
//Velocidade de comunicacao (bits por segundo)
vw_setup(5000);
//Inicia a recepcao
vw_rx_start();
Serial.println("Recepcao modulo RF - Aguardando...");
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
for (i = 0; i < buflen; i++)
{
//Armazena os caracteres recebidos
recebido_RF_char[i] = char(buf[i]);
}
recebido_RF_char[buflen] = '\0';
//Converte o valor recebido para integer
valor_recebido_RF = atoi(recebido_RF_char);
//Mostra no serial monitor o valor recebido
Serial.print("Recebido: ");
Serial.print(valor_recebido_RF);
//Altera o estado do led conforme o numero recebido
if (valor_recebido_RF == 1)
{
digitalWrite(ledPin, HIGH);
Serial.println(" - Led aceso !");
}
if (valor_recebido_RF == 0)
{
digitalWrite(ledPin, LOW);
Serial.println(" - Led apagado !");
}
}
}
//Programa: Comunicacao com Modulo RF 433 - Receptor //Autor: Arduino e Cia #include <VirtualWire.h> //Define pino led int ledPin = 5; int valor_recebido_RF; char recebido_RF_char[4]; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); //Pino ligado ao pino DATA do receptor RF vw_set_rx_pin(7); //Velocidade de comunicacao (bits por segundo) vw_setup(5000); //Inicia a recepcao vw_rx_start(); Serial.println("Recepcao modulo RF - Aguardando..."); } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { int i; for (i = 0; i < buflen; i++) { //Armazena os caracteres recebidos recebido_RF_char[i] = char(buf[i]); } recebido_RF_char[buflen] = '\0'; //Converte o valor recebido para integer valor_recebido_RF = atoi(recebido_RF_char); //Mostra no serial monitor o valor recebido Serial.print("Recebido: "); Serial.print(valor_recebido_RF); //Altera o estado do led conforme o numero recebido if (valor_recebido_RF == 1) { digitalWrite(ledPin, HIGH); Serial.println(" - Led aceso !"); } if (valor_recebido_RF == 0) { digitalWrite(ledPin, LOW); Serial.println(" - Led apagado !"); } } }
//Programa: Comunicacao com Modulo RF 433 - Receptor
//Autor: Arduino e Cia

#include <VirtualWire.h>

//Define pino led
int ledPin = 5;

int valor_recebido_RF;
char recebido_RF_char[4]; 

void setup() 
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  //Pino ligado ao pino DATA do receptor RF
  vw_set_rx_pin(7);
  //Velocidade de comunicacao (bits por segundo)
  vw_setup(5000); 
  //Inicia a recepcao  
  vw_rx_start();
  Serial.println("Recepcao modulo RF - Aguardando...");
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    
    if (vw_get_message(buf, &buflen)) 
    {
    int i;
        for (i = 0; i < buflen; i++)
       {            
          //Armazena os caracteres recebidos  
          recebido_RF_char[i] = char(buf[i]);
       }
       recebido_RF_char[buflen] = '\0';
       
       //Converte o valor recebido para integer
       valor_recebido_RF = atoi(recebido_RF_char);
         
       //Mostra no serial monitor o valor recebido
       Serial.print("Recebido: ");
       Serial.print(valor_recebido_RF);
       //Altera o estado do led conforme o numero recebido
       if (valor_recebido_RF == 1)
       {
         digitalWrite(ledPin, HIGH);
         Serial.println(" - Led aceso !");
       }
       if (valor_recebido_RF == 0)
       {
         digitalWrite(ledPin, LOW);
         Serial.println(" - Led apagado !");
       }
    }
}

Você também pode acompanhar o resultado da recepção desse circuito no serial monitor, que vai ter informações sobre o valor recebido e o estado do led:

Serial Monitor RF433 MHz - Receptor

Gostou do post módulo RF 433 MHz com Arduino? Confira aqui mesmo no Arduino e Cia outros posts sobre comunicação wireless.

5/5 - (1 voto)