0

Arduino e radiofrequência 433MHz com VirtualWire

Neste tutorial vamos aprender a conectar dois Arduinos sem fio usando dois módulos de RF 433MHz. Estes módulos são vendidos em pares (um emissor e um receptor) e por muito pouco dinheiro permite a comunicação sem fio entre dispositivos dentro de um alcance de até 100 metros, se não houver obstáculos no caminho.

O que vamos fazer é enviar um sinal de um arduino (Emissor) a outro (Recetor) para que este último acenda ou desligue o LED tendo o pino 13 segundo a ordem recebida. Isto  nos dará bases para desenvolver projetos mais complexos com base nesses módulos  de radiofrequência.

Para manter a vida simples, vamos utilizar a biblioteca VirtualWire Mike McCauley, esta biblioteca é responsável por gerir as funções dos módulos de radiofrequência como enviar e receber pacotes de dados, verificação de erros, etc … Para instalar o download do pacote do seu website clique aqui

Material necessário:

-2 x Arduino (Uno, Mega , Nano..)

– 1 x Par de emisor-receptor

-1 x Breadboard grande

2 x Baterias ou pilhas

Conexão

A conexão do transmissor é muito simples, você só tem que ligar 3 fios. Alimentamos o emissor radiofrequência de 433MHz desde a saída de 5V do Arduino (GND) e conectamos ao transmissor digital 12 pinos do Arduino. Para o recetor fazemos o mesmo, alimentamos desde da saída de 5V do Arduino (GND), em seguida, ligamos o recetor ao pino 11 do Arduino.

Dica: Se prestar  atenção nas placas do transmissor e do recetor vai ver que tem um pequeno buraco num canto que é marcado ANT (antena), lá pode soldar um pequeno cabo para melhorar a qualidade e alcance da transmissão.

Código do emissor

Este é um exemplo de código do emissor , como pode ver envia “Power on” e “off” em intervalos de 1 segundo.

/*
EMISOR
Envia as mensagens"Apagar" e "Acender" em intervalos de um segundo.
*/
 
#include <VirtualWire.h>  //incluimos a livraria virtualwire
 
void setup()
{
  
  Serial.begin(9600); //Iniciamos a comunicação serial
  Serial.writeln("Emisor Iniciado");
  vw_setup(2000);  //Iniciamos a comunicação com o modulo RF
}
void loop()
{
  send("Acender"); //Enviamos Acender
  delay(1000);      //Esperamos 1 segundo
  send("Apagar");   //Enviamos APAGAR
  delay(1000);      //Esperamos 1 segundo
}
 
//Funcao para enviar a mensagem por RF
void send (char *message)
{
  vw_send((uint8_t *)message, strlen(message)); //Envia a mensagem
  vw_wait_tx(); //Espera até que os dados sejam enviados
  Serial.println(message); //Muestra el mensaje por el serial
} 

Código do recetor

Graças ao módulo de radiofrequência recebemos um mote de caracteres que estão armazenados numa matriz, iremos comprovar se essa matriz é igual para ligar e desligar, para isso vamos por o LED no pino 13 do Arduino.

/*
RECETOR
Apaga o LED 13 recebe a mensagem "Apagar"
Acende o LED 13 recebe a mensagem "Acender"
*/
 
#include  //incluimos a livraria virtualwire
 
//Definimos algunas variaveis necesarias para o envío da mensagem
//Estas variaveis vem definidas na livraria VirtualWire
byte messagem[VW_MAX_MESSAGEM_LEN];
byte messagemLength = VW_MAX_MESSAGEM_LEN;
 
void setup()
{
  pinMode(13, OUTPUT); //Configuramos o pino 13 como saida
  Serial.begin(9600);  //Iniciamos a comunicação serial
  vw_setup(2000);      //Iniciamos a comunicação com o modulo RF
  vw_rx_start();       //Iniciamos a receção de dados
  Serial.println("Recetor iniciado");
}
void loop()
{
  if (vw_get_message(message, &messageLength)) //Recebemos um mensagem
  {
      if(comparar("Acender") == 0){               //e é igual a Acender
        digitalWrite(13, HIGH);                    //Acendemos o LED
        Serial.write("LED Acendemos\n");
      }
      else if(comparar("Apagar") == 0)             //e é igual APAGAR
      { 
        digitalWrite(13,LOW);                      //apagamos o LED
        Serial.write("LED Apagado\n");
      }
  
  }
} 
 
//Esta função compara a matriz de dados recebido com os comandos para executar ordens
//São iguais, devolve 1.No, devolve 0.
char comparar(char* cadena) {
  for(int i = 0; i<messageLength; i++)
  {
    if(message[i] != cadena[i])
    {
      return 1;
    }
  }
  return 0;
}

E com isto teremos tudo pronto para alimentar os Arduinos e ver como liga e desliga o LED.

Artigo gentilmente cedido por Vida de Silicio

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

Comments

Comentários

mariana guedes

Deixar uma resposta