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: 58104

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 Fábio Pereira em 6 agosto 2013 às 23:39

Acho que o teu caso não é esse tipo de transmissor. Ja pensou em bluetooth? daí tu pode comunicar direto do iPad, pegando até mais dados do que simplesmente a placa, e com mais facilidade. Só tem que ver a questão do pareamento, mas pelo que entendi do teu caso, se não parear com o iPad, não abastece.

Comentário de Roger Luiz em 6 agosto 2013 às 23:36

Pois é, Fábio. Também acho que iria gerar muitas interferências.

Alguma sugestão para esse tipo de implementação que não fosse RF? Se possível de forma automática. Já pensei até mesmo em incluir um cartão com o QR CODE em cada veículo e o operador tiraria a foto com o iPad e ele detectaria as informações, mas não ficaria tão automatizado assim.

Por isso pensei em fazer algo com Arduino mesmo. Algo que possa receber um "cheguei" e a placa do carro e que possa enviar através da rede para um banco de dados. Será que o transmissor RF é a melhor opção mesmo?

Comentário de Leonilde Diogenes Gurgel Neto em 6 agosto 2013 às 23:34

O problema é o foco e a solução... fazer coisas muito vagas é um tiro no escuro.. utilizar coisas PEBAS em ambiente industrial é uma MERDA.

Comentário de Roger Luiz em 6 agosto 2013 às 23:31

Na verdade, a intenção do projeto é o RF transmitir para o receptor informações básicas do veículo, como a placa. Assim, quando ele chegar no posto de combustível, automaticamente o iPad do operador (sim, ele vai usar um iPad, hehehe) emite o alerta e gera um novo abastecimento com a placa do carro que se colocou para abastecer. Por isso a idéia de usar o transmissor de RF.

O problema maior é esse de funcionar como transponder. Não sei se seria o ideal. Pensei até em obrigar o motorista a ligar o aparelho quando estiver chegando ao posto, mas confiar em mãos humanas pra funcionar bem nunca é o ideal.

Ficar ligado o tempo todo em uma zona com mais de 1.400 redes diferentes circulando não pode acabar gerando interferências? Além do mais, precisaria de autorização da Anatel para funcionar na frequência, correto?

Comentário de Fábio Pereira em 6 agosto 2013 às 23:29

Acredito que não precisa "tudo isso", porque trabalhar com este equipamento agindo como transceiver gera muita interferencia. Se o equipamento da garagem ficasse só regsitrando quem transmite pra ele, tipo de 30 em 30 min o carro sinaliza que está ali e o receptor anota (log em SD card, webservice, socket, sinal de fumaça ..... tanto faz aqui), o carro que não sinalizar é porque não está ali. Isso vai facilitar na implementação do protocolo

Comentário de Leonilde Diogenes Gurgel Neto em 6 agosto 2013 às 23:19

Se isso for só pra sabe se o veiculo está na garagem ou não o mais simples é

-Master em períodos fica validando uma lista de ativos e gerando um log
-A quantidade total dos carros já é sabida
-Master envia uma pergunta 1 na escuta? 1 respondo e vai pra lista ativo(presente na garagem)
-E assim para todos os da lista
-Depois de um certo período ele faz essa checagem ( loop eterno )

Você pode melhorar o tempo de espera pra poder checar novamente... mas pra isso vc vai precisar de
uma boa coleta de dados para poder saber o tempo médio e sempre que puper atualizar este tempo

Esses dados devem ser enviados a um servidor ( lista / histórico das presenças ) e um aplicativo
no servidor realizar este calculo e devolver ao microcontolador uma atualização dessa "espera" pra
realizar novamente a checagem

Comentário de Fábio Pereira em 6 agosto 2013 às 23:05

No caso de utilizar ele no carro, tu pode ficar transmitindo direto, claro que é bom colocar um intervalo pra não consumir consumir tanta energia. O consumo do transmissor (arduino + RF Transmiter) ligado a uma bateria de automóvel é irrisório. Deixa ele funcionando como se fosse um transponder, isso possibilita mais de um ponto de recepção (se for o caso). O comprimento de onda de 433,92 é 69,68 cm, se não me engano, tu pode utilizar uma antena de 1/4 de onda que já fica um alcance bom. Mas fique atento com os obstáculos, principalmente paredes sólidas ou revestimentos metálicos, eles diminuem o alcance consideravelmente. Pode usar a biblioteca virtual wire que funciona.

Comentário de Roger Luiz em 6 agosto 2013 às 21:30

Oi Leonilde. Obrigado por responder!

Acho que a sua sugestão não vai dar certo, pelo menos no ambiente de mineradoras, hehehe. Como lidaria com a sujeira e tudo o mais? Já fiz algumas coisas com QR Code e acho bem bacana, mas creio que nesse caso não resolveria, hehehe.

Pelo que pesquisei, um RF na frequência 433mhz resolveria a questão do alcance, porém ainda não sei bem como faria com a questão da transmissão frequente.

Comentário de Leonilde Diogenes Gurgel Neto em 6 agosto 2013 às 21:19

Saudações Roger,

Existem diversas abordagens e seria bom pesquisar sobre as tecnologias envolvidas nessa sua arquitetura.

Tem que verificar alguns detalhes importantes como a questão de "ficar sempre enviando e etc"...
Na minha opinião... isso poderia ser resolvido de uma maneira super legal!!!

1 - Uma camera de vídeo 

2 - Um Adesivo QR CODE no parabrisa

3 - Sistema capaz de pegar esse vídeo  e processar o QR code

PS: Quem fizer este sistema e ganhar dinheiro, lembre-se de mim :D

Comentário de Roger Luiz em 5 agosto 2013 às 23:00

Boa noite! Tenho a necessidade de usar um transmissor RF com uma placa Nano que ficará dentro de um veículo. Sempre que o mesmo chegar a uma garagem, irá automaticamente enviar dados para um receptor. A distãncia não é problema, mas e os obstáculos? Será que se eu mantiver a placa com o transmissor no pára-brisas irá funcionar sem problemas? E como fazer o transmissor funcionar assim que entrar? Ele teria de ficar enviando dados o tempo todo até ser captado pelo receptor? Obrigado!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço