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.

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:
- 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:
Antes de carregar o programa, faça o download da biblioteca VirtualWire, neste 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.