Comunicação Wireless com Módulo RF 433MHz Deixe um comentário

Já vimos aqui algumas maneiras de comunicar o Arduino com o mundo “externo”, usando Bluetooth com Arduino ou um Arduino Ethernet Shield para verificar o estado de sensores e enviar comandos. Uma outra alternativa eficiente e barata para transmissão de dados é o uso de módulo RF (Rádio Frequência).

Circuito Módulo RF Arduino

Com um Kit Módulo RF Transmissor + Receptor 433 Mhz, você consegue enviar e receber dados sem a necessidade de uso de fios, e é isso que veremos no post de hoje. Você também pode optar pelo Módulo RF Transmissor 315Mhz, que é a mesma coisa, somente opera em outra frequência.

O cenário montado é o seguinte: utilizar um Arduino Uno ligado ao Módulo RF Transmissor, suportando a entrada de dados via Serial Monitor. Em outro Arduino (um Mega), alimentado por fonte externa, vamos colocar o Módulo RF Receptor e um display LCD, que vai mostrar os dados recebidos via RF.

Pinagem Módulo RF:

No circuito os dois módulos foram usados sem antena, mas se você for utilizar os módulos para comunicação à grandes distâncias (até 200 metros), a instalação da antena é essencial. Outro detalhe é que o módulo transmissor aceita tensões na faixa de 3,5 a 12v, o que também faz uma grande diferença no alcance da transmissão. Veja abaixo o detalhe da pinagem dos dois módulos:

Módulo RF Transmissor

Configurando Arduino Uno com Transmissor RF:

Já que estamos trabalhando numa configuração com 2 placas, vamos separar os circuitos, começando pelo transmissor. Utilizei um Mini Protoboard e liguei o pino de dados do Módulo RF Transmissor ao pino 8 do Arduino Uno:

Circuito_RF_433_Transmissor

Os programas foram desenvolvidos utilizando a biblioteca VirtualWire, que você encontra neste link! Carregue o programa abaixo no Arduino Uno:

//Programa : Módulo RF Transmissor com Arduino Uno
//Autor : FILIPEFLOP - Arduino e Cia

#include <VirtualWire.h>

String mensagem;

void setup()
{
  Serial.begin(9600);
  //Define o pino 8 do Arduino como 
  //o pino de dados do transmissor
  vw_set_tx_pin(8);
  vw_setup(2000);   // Bits per sec
  Serial.println("Digite o texto e clique em ENVIAR...");
}

void loop()
{
  char data[40];
  int numero;
  if (Serial.available() > 0)
  {
    numero = Serial.readBytesUntil (13,data,40);
    data[numero] = 0;
    Serial.print("Enviado : ");
    Serial.print(data);
    Serial.print(" - Caracteres : ");
    Serial.println(strlen(data));
    //Envia a mensagem para a rotina que
    //transmite os dados via RF
    send(data);
  }  
} 

void send (char *message)
{
  vw_send((uint8_t *)message, strlen(message));
  vw_wait_tx(); // Aguarda o envio de dados
}

Configurando Arduino Mega com Receptor RF:

Para o receptor, utilizei um Arduino Mega 2560 e um display LCD Nokia 5110. O pino de dados do receptor foi ligado ao pino 5 do Arduino Mega. Observe que o receptor tem 2 pinos de dados, e qualquer um pode ser utilizado:

Circuito RF 433 - Receptor

Carregue agora este programa no Arduino Mega:

//Programa : Receptor RF com Arduino Mega e Display Nokia 5110
//Autor : Arduino e Cia

#include <Adafruit_GFX.h>      //Carrega a biblioteca do display
#include <Adafruit_PCD8544.h>  //Carrega a biblioteca grafica
#include <VirtualWire.h>

byte message[VW_MAX_MESSAGE_LEN];    // Armazena as mensagens recebidas
byte msgLength = VW_MAX_MESSAGE_LEN; // Armazena o tamanho das mensagens

// Pinagem do LCD :
// pin 8 - Serial clock out (SCLK)
// pin 9 - Serial data out (DIN)
// pin 10 - Data/Command select (D/C)
// pin 11 - LCD chip select (CS/CE)
// pin 12 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); 
//Inicializa e seta os parametros do display

void setup()   {
  Serial.begin(9600);
    vw_set_rx_pin(5); // Define o pino 5 do Arduino como entrada 
//de dados do receptor
    vw_setup(2000);             // Bits por segundo
    vw_rx_start();              // Inicializa o receptor

  display.begin();
  display.setContrast(50); //Ajusta o contraste do display
  display.clearDisplay();   //Apaga o buffer e o display
  display.setTextSize(1);  //Seta o tamanho do texto
  display.setTextColor(BLACK); //Seta a cor do texto
  display.setCursor(0,0);  //Seta a posição do cursor
  display.print("Aguardando...");
  display.display();
  delay(2000);

}

void loop()
{
uint8_t message[VW_MAX_MESSAGE_LEN];    
uint8_t msgLength = VW_MAX_MESSAGE_LEN; 

  display.setCursor(0, 0);  //Seta a posição do cursor
    if (vw_get_message(message, &msgLength)) // Non-blocking
    {
        Serial.print("Recebido: ");
        display.clearDisplay();   //Apaga o buffer e o display
        for (int i = 0; i < msgLength; i++)
       {
          Serial.write(message[i]);
          display.write(message[i]);
          display.display();
       }
    Serial.println();
    }
}

Para efeito de testes, utilizamos o Arduino Mega (com o LCD e o módulo receptor) ligado à uma fonte de alimentação externa. O Arduino Uno com o transmissor deve estar ligado ao computador, e é por meio do Serial Monitor que serão enviados via RF os caracteres que serão mostrados no LCD do Arduino Mega.

Simulando o Módulo RF 433MHz no Serial Monitor:

Para utilizar o programa, carregue o Serial Monitor, e digite uma sequencia de caracteres no campo indicado na imagem. Aperte ENTER ou clique em SEND, e a sequencia de caracteres digitada será mostrada no display LCD.

Serial Monitor - Envio de Dados

 Gostou? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Faça seu comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *