Tutorial transmissor e receptor RF Link com Arduino

No mercado existe vários tipos e meios de comunicação para usar com Arduino. Neste tutorial usaremos os RF Link Receiver - 4800bps(315Mhz) e RF Link Transmitter - 315Mhz e testaremos a comunicção entre eles utilizando a biblioteca Virtual Wire e a documentação disponível aqui.

Neste tutorial vamos mostrar como mandar uma mensagem utilizando o RF Link Transmitter - 315Mhz com um Arduino e recebendo a mensagem utilizando o RF Link Receiver - 4800bps(315Mhz) com outro Arduino.

Antes de mais nada, baixe a biblioteca Virtual Wire e extraia para a pasta "libraries" localizada dentro da pasta da IDE do Arduino. Nesta biblioteca é bem fácil de usar, pois já existe um tratamento de erros para filtrar os erros que chegam no receptor.

Agora para montar o emissor RF Link Transmitter - 315Mhz com Arduino, faça a seguinte ligação:

Onde:

  • O Fio vermelho vai para o VCC ou 5V
  • O Fio preto vai para o GND
  • O FIo verde vai para o pino digital 12 do Arduino
  • Por opção, pode-se colocar uma antena para melhor captação de dados. O comprimento da antena é de cerca de 25cm 

Agora, abra a IDE do Arduino e vá em File/Examples/VirtualWire e selecione "transmitter",conecte o Arduino, selecione a versão do Arduino(UNO, Duemilanove,etc) e clique em UPLOAD. Abaixo mostra a programação:

// transmitter.pde
//
// Simple example of how to use VirtualWire to transmit messages
// Implements a simplex (one-way) transmitter with an TX-C1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: transmitter.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
Serial.begin(9600);                                      // Debugging only
Serial.println("setup");

// Initialise the IO and ISR
vw_set_ptt_inverted(true);                          // Required for DR3100
vw_setup(2000);                                          // Bits per sec
}

void loop()
{
const char *msg = "hello";

digitalWrite(13, true);                                   // Flash a light to show transmitting
vw_send((uint8_t *)msg, strlen(msg));      //Send the message
vw_wait_tx();                                                // Wait until the whole message is gone
digitalWrite(13, false);
delay(200);
}

A programação "transmitter" é um exemplo básico onde manda a palavra "hello" para o receptor. 

Pronto, agora vamos montar o RF Link Receiver - 4800bps(315Mhz):

Onde:

  • O fio vermelho vai para o VCC ou 5V
  • O fio preto vai para GND
  • O fio verde vai para o pino digital 11 do Arduino
  • Por opção, pode-se colocar uma antena para melhor captação de dados. O comprimento da antena é de cerca de 25cm
Agora, com outro Arduino e com a IDE do Arduino aberto, vá em File/Examples/ e clique em "receiver" e faça o mesmo procedimento que o do emissor. Abaixo mostra a programação do "receiver":

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");

// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec

vw_rx_start(); // Start the receiver PLL running
}

void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;

digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
digitalWrite(13, false);
}
}

Este exemplo mostra o receiver recebendo a informação do emissor, que nesse caso é o "hello". Ao abrir o Serial monitor do Arduino-1.0, você verá que os dados que chegam são números, estes números são números da tabela ASCII. Você pode ver que o número hexadecimal "68" equivale a letra "h".

E é isso!!! Esperamos que tenham gostado!!! Caso tenham dúvida sobre este tutorial, postem aqui mesmo neste blog. Vocês podem ver outros tutoriais, clicando aqui. Temos a seção de projetos também que vocês podem ver e postar seus projetos! Até a próxima!!

Referências:

http://www.labdegaragem.org/loja/index.php/38-comunicacao/rf-link-r...

http://www.labdegaragem.org/loja/index.php/38-comunicacao/rf-link-t...

http://arduino.cc/playground/Main/InterfacingWithHardware#Communica...

http://www.sparkfun.com/products/10533

http://www.open.com.au/mikem/arduino/VirtualWire.pdf

http://www.open.com.au/mikem/arduino/VirtualWire-1.9.zip

http://www.sparkfun.com/datasheets/RF/KLP_Walkthrough.pdf

http://winavr.scienceprog.com/example-avr-projects/running-tx433-an...

Exibições: 58109

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Ademir Fontana em 30 setembro 2012 às 22:40

Aparece em Hexadecimal, mas e se eu quiser visualizar no serial monitor a mensagem "hello" em ASCII?

Comentário de Leonilde Diogenes Gurgel Neto em 24 agosto 2012 às 21:31

Muito bom,

Farei logo que puder!

Comentário de Marcelo Pizani em 24 agosto 2012 às 11:53

Leonilde e Alexandre, muito obrigado pela contribuição de vocês, pessoas assim como vocês é que fazem iniciantes (assim como eu) tomarem mais gosto pelo assunto e se aprofundar mais nos estudos e pesquisas.

Olhando os dispositivos X10 disponíveis, me parece ainda uma tecnologia não muito barata, mas porém, reduz drasticamente a mão de obra na automação residencial.

To querendo comprar alguma coisa para estudar o X10 e começar a testar a automação utilizando essa tecnologia, porém tenho alguma dúvidas.

Quanto ao transmissor, posso utilizar esse aqui: http://www.casautomatica.net/produtodetalhe.asp?id=607 - Eu utilizaria um transmissor RF ligado ao arduino para enviar os comandos X10 para este transmissor.

Quanto a automação de lâmpadas, tava vendo este cara, que não tem o custo tão alto: http://www.casautomatica.net/produtodetalhe.asp?id=615 - porém minha dúvida é, existe como dar um códido único a este cara, visto que a primeira vista ele parece não ter essa configuração nele, como os dispositivos para tomada, por exemplo, tem.

Comentário de Leonilde Diogenes Gurgel Neto em 24 agosto 2012 às 11:11

KCT!
Você é meu Herói Alexandre.... tá vendo que um pouco a mais de conhecimento, pesquisas e atuação na área não fazem.... hehehehehe... ótimas dicas e material... muito obrigado.

Comentário de Leonilde Diogenes Gurgel Neto em 23 agosto 2012 às 17:51

Tranquilo Marcelo,

Veja... o produto é muito legal... mas ele tem um transmissor e vários receptores isso com um circuito simples de CODE / DECODE para o receptor saber se é ele mesmo.

No seu caso... seria bom fazer algo do tipo 1-Wire ( rede interessante onde vc poderia controlar tudo isso ) ou então trabalhar melhor a caixa de distribuição elétrica e colocar o Arduino controlando os Relés para cada ponto.

O lance do 1-Wire é q dá pra colocar o Master no Arduino e os Slaves em cada ponto formando uma rede completa... eu acho "0% de conhecimento" que isso poderia estar sendo usado aproveitando o Fase ou Neutro... mas acho melhor estudar mais sobre.

Comentário de Marcelo Pizani em 23 agosto 2012 às 17:42

Obrigado pela atenção Leonilde.

Estou fazendo um projeto de automação para minha casa, controlar acionamento de luzes, alarme etc.

Exclusivamente para o acionamento de luzes, como minha casa é um pouco grande e tenho muitos pontos de luz, e seria inviável utilizar uma porta do arduino para cada lâmpada e ficar passando fio e tal... pensei em fazer algo parecido com esse cara aqui: http://www.vetti.com.br/v1/default.asp?pg=detalhe&codigo_produt...

Meu arduino teria o transmissor, e faria essas caixinhas aí com os receptores, que provavelmente devem acionar reles. O que vc me diz?

Comentário de Leonilde Diogenes Gurgel Neto em 23 agosto 2012 às 17:12

No caso vc precisa entender melhor sua necessidade e as tecnologias disponíveis.

1 - O contexto deverá entender-se como uma rede para que possamos identificar de maneira correta todos os dispositivos presentes.

2 - Você vai precisar ter algum tipo de processamento no receptor que garanta que É REALMENTE ELE que está sendo chamado.

Você vai precisar de uma estrutura do tipo 1 Master e N Slaves e isso é uma rede do tipo Estrela onde a comunicação é unidirecional de 1 - N ( temos um problema nisso... como garantir que o Slave realmente recebeu a solicitação e se realmente ele executou )

Existe um CI que solicitei de um fabricante que não lembro agora... que poderia solucionar sua questão... mas só presta pra pouca distância... no caso para RESUMIR você poderia utilizar XBee no Master e nos Slaves colocar um Tiny para poder controlar essa parte de GARANTIA DO SERVIÇO.

[]´s

PS: No momento só me veio isso na cabeça como resposta ;D

Comentário de Marcelo Pizani em 23 agosto 2012 às 16:38

Ainda não trabalhei com RF no arduino, mas tenho um projeto que precisarei fazer uso desta tecnologia.

No meu caso terei um transmissor, ligado ao arduino, e diversos receptores que devem ser independentes(não estarão ligados a arduino).

A ideia é através de comandos do arduino poder acionar cada receptor separadamente. Que transmissor e receptores eu devo usar para isso? Como fazer para acionar um determinado receptor neste caso?

Comentário de Leonilde Diogenes Gurgel Neto em 15 agosto 2012 às 15:40

Opa Francisco,

Sim metros... é q depende do produto e fica entre 300metros a 1km dependendo da versão e etc... 

no caso do protocolo... veja... um exemplo bem simples é com uns CI´s CODE / DECO... mas no caso de arduino poderia ser feito por software essa parte... 

Poderia ser feito o procedimento de HandShake pra que os pontos de Rx/Tx possam firmar acordo de sincronismo +  CRC http://pt.wikipedia.org/wiki/Detec%C3%A7%C3%A3o_e_corre%C3%A7%C3%A3...

Acabei de chegar da rua e estou meio ruim... dor de kbeça... qlqr coisa vamos trocando ideias e já comentei em algum lugar sobre isso... estou com um modulo rx / tx e queria fazer algum implementação de software pra não precisar de CI CODE / DECODE e etc

[]´s

Comentário de Francisco Lucena Gomes Jr em 15 agosto 2012 às 14:09

Leonilde, quando vc disse algumas centenas, quis dizer centenas de metros, certo?

No caso de procedimento baseado em protocolo teria que ser com transmissão bidirecional?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço