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

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.

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

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:

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.

//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:

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:

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.

//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:

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)

Related posts

Data e hora no RTC DS1302 com Arduino

by Arduino e Cia
10 anos ago

Acelerômetro e Giroscópio MPU6050

by Arduino e Cia
10 anos ago

Como funciona o conversor de nível lógico bidirecional

by Arduino e Cia
9 anos ago
Sair da versão mobile