RF 433 MHz – Módulos Transmissor e Receptor

RF 433 MHz consiste em um par de módulos transmissor e receptor de baixíssimo custo.
Ideal para iniciantes que desejam uma comunicação Wireless.
Popularmente usado em controle remoto, também se usa para transmissão de dados em baixa velocidade e curta distância.
Utiliza uma comunicação via rádio frequência com modulação AM e frequência de trabalho de 433MHz.

Especificações

Transmissor:

    • Descrição do Produto: MX-FS-03V
    • Alcance: 20-200 metros
    • Tensão de operação: 3,5-12V
    • Modo de operação: AM (Modulação em Amplitude)
    • Taxa de transferência: 4KB/s
    • Potência de transmissão:10mW
    • Frequência de transmissão: 433MHz
    • Dimensões: 19mm x 19mm

Receptor:

    • Descrição do Produto: MX-05V
    • Tensão de operação: 5V DC
    • Corrente de operação: 4mA
    • Sensibilidade: -105dB
    • Frequência de recepção: 433MHz
    • Dimensões: 30mm x 14mm x 7mm

Material Necessário para Teste e Projeto

    • 02 – Arduino
    • 01 – Par de Módulos TX/RX RF 433 MHz
    • 02 –  Push button
    • 02 – Resistor 220 Ω
    • 02 – Resistor 10 KΩ
    • Jumpers

Conhecendo os Módulos RF 433 MHz

Quase sempre, quando obtemos algum dispositivo novo, é logo saber se realmente está funcionando, mas para isso devemos ter conhecimento de como fazer a conexão correta.
A montagem com o Arduino é bem simples como podemos observar nos esquemas a seguir:

RF 433 MHz

Primeiramente, devemos incluir a biblioteca RH_ASK.h na IDE Arduino. Feito isso, monte os módulos nas respectivas placas conforme os esquemas:

Transmissor

RF 433 Transmissor - Esquema

 

Receptor

RF 433 Receptor - Esquema

Feita a montagem, então carregue os códigos:

Transmissor (Pino DATA na Porta Digital 12)

//TRANSMITTER PINO 12

// RadioHead - Version: Latest 
#include <RH_ASK.h>
// SPI - Version: Latest
// Not actualy used but needed to compile 
#include <SPI.h>

RH_ASK driver; 

void setup()
{
    Serial.begin(9600);
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    const char *msg = "Hello World!";
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
    delay(1000);
}

 

Receptor (Pino DATA na Porta Digital 11)

//RECEIVER

// RadioHead - Version: Latest 
#include <RH_ASK.h>
// SPI - Version: Latest
// Not actualy used but needed to compile 
#include <SPI.h>

RH_ASK driver; 

void setup()
{
    Serial.begin(9600);
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen))
    {
      int i;
      Serial.print("Message: ");
      Serial.println((char*)buf);  
          
    }
}

O interessante desta biblioteca RH_ASK.h é que os pinos DATA já estão definidos. O transmissor devemos conectar o pino DATA na porta digital 12 no Arduino. O receptor devemos conectar o pino DATA na porta digital 11.
Então, já com os códigos carregados, basta abrir o Monitor Serial do receptor e se estiver tudo correto aparecerá uma mensagem a cada 1 segundo.

MENSAGEM TESTE RF433

Projeto

Depois de testar o funcionamento dos módulos RF 433 MHz, estamos prontos para iniciarmos um projeto simples de acendimento de LEDs via rádio.
Então, monte o projeto conforme os esquemas:

Transmissor

RF 433 Transmissor

Receptor

RF 433 Receptor

Inclua a biblioteca VirtualWire.h e depois carregue os códigos:

Código transmissor

#include <VirtualWire.h>

#define pinRF  12

struct tipoPacote {
  boolean valor1;
  boolean valor2;
};

tipoPacote pacote;

boolean leBotao(int porta);   // Protótipo função que lê o botão.

# define botaoPin_1 5   // Entrada do push button
# define botaoPin_2 6   // Entrada do push button

void setup() {

  vw_set_tx_pin(pinRF);
  vw_set_ptt_inverted(true);
  vw_setup(2000);

  Serial.begin(9600);

  pinMode(botaoPin_1, INPUT_PULLUP);   // Define o pino do botão como INPUT_PULLUP
  pinMode(botaoPin_2, INPUT_PULLUP);
  
}

void loop() {

  vw_send((uint8_t *)&pacote, sizeof(pacote));
  vw_wait_tx();

  pacote.valor1 = leBotao(botaoPin_1);
  Serial.print("Botao Verde     ");
  Serial.println(pacote.valor1);
  

  pacote.valor2 = leBotao(botaoPin_2);
  Serial.print("Botao Vermelho  ");
  Serial.println(pacote.valor2);
  

  delay(100);
}

boolean leBotao(int porta) // Funçao lê botão
{
  static boolean estadoAnterior[2] = {true, true}; /* static --> para manter a variável na memória */

  boolean estadoBotao = digitalRead(porta);
  boolean ligado = false;

  if (!estadoBotao && estadoAnterior[porta]) /* Esse controle permite que, mesmo o botão permanecendo apertado, vai ser considerado apenas uma vez*/
  {
    ligado = true;
  }

  estadoAnterior[porta] = estadoBotao;

  return ligado;
}

 

Código Receptor

#include <VirtualWire.h>

#define pinRF  11

struct tipoPacote {
  boolean valor1;
  boolean valor2;
};

tipoPacote pacote;
uint8_t buf[sizeof(pacote)];
uint8_t buflen = sizeof(pacote);

# define LedVerde 5
# define LedVermelho 6

void setup() {

  Serial.begin(9600);

  vw_set_rx_pin(pinRF);
  vw_setup(2000);
  vw_rx_start();

  pinMode(LedVerde, OUTPUT);
  pinMode(LedVermelho, OUTPUT);

}

void loop() {

  if ( vw_have_message() ) {
    vw_get_message(buf, &buflen);
    memcpy(&pacote, &buf, buflen);
  }

  if (pacote.valor1 == true)
  {
    digitalWrite(LedVerde, digitalRead(LedVerde) ^ 1); // Acende e apaga LED Verde
    Serial.println("LED Verde");
    pacote.valor1 = false;
  }

  if (pacote.valor2 == true)
  {
    digitalWrite(LedVermelho, digitalRead(LedVermelho) ^ 1); // Acende e apaga LED Verde
    Serial.println("LED Vermelho");
    pacote.valor2 = false;
  }

  delay(100);
}

 

Então, feito isso, é só observar que ao pressionar cada botão seu respectivo LED acende e ao pressionar novamente o mesmo  apaga.

 

PROJETO RF433

 

Onde comprar?

LOJAS

Conheça também!