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

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 Arlan Dantas em 6 outubro 2015 às 10:02

Jose Rodolfo, vossa senhoria falou que colocou os pinos 13 do receptor e do emissor como sendo o pino para a comunicação. Como podemos ver no exemplo dado, o pino 13 foi utilizado para apenas "exibir" que os dados estão sendo transmitidos, por isso os mesmos só podem ser utilizados para "exibição" da comunicação.

Então o ideal é que vc coloque para ser sinalizado a comunicação em outro pino ou coloque para a comunicação acontecer por meio de outro pino.

Por exemplo, modificar as linhas: "digitalWrite(13, true);" e "digitalWrite(13, false);" colocando outro pino que não seja o 13.

É isso, espero ter ajudado.

Fiquem com Deus ;)

Comentário de jose rodolfo durante em 6 outubro 2015 às 0:20

alguém pode me ajudar?

Comentário de jose rodolfo durante em 1 outubro 2015 às 1:05

Por favor me ajudem (sou iniciante e atrapalhado):

1. Como receptor usei outro modelo com 4 pinos somente. Algum problema?

2. Nos sketches da biblioteca aparece o pino 13 no receptor e no transmissor. No post

aparecem outros. Coloquei 13 nos 2 sketches. Algum problema?

3. Quando ambos ligados, o 13 do transmissor não pisca (flash) e do receptor sim e no monitor

somente aparece "setup" e mais nada. Algum erro meu?

4. Quando desligo o transmissor o 13 do receptor continua piscando. O que significa? Não parece que está tudo errado? 

Muito Obrigado pela futura ajuda. 

Comentário de jose rodolfo durante em 20 agosto 2015 às 11:18

Tenho que fazer alguma mudança para usar com módulo de 433mhz?

Comentário de Reiner C Zanotelli em 13 agosto 2014 às 10:53

Qual a distância máxima entre transmissor e receptor para o pleno funcionamento?? Tem que estar visado? 

Comentário de Jailton Mattos Pires em 16 junho 2014 às 19:00

 mensagem é para aparecer no LCD?
se for como faço para ligar?

Comentário de Jailton Mattos Pires em 3 junho 2014 às 11:49

Olá dá para simular no Proteus?

Comentário de Glauco Silva em 11 agosto 2013 às 1:51

A comunicação dos transmissores e receptores RF são criptografadas?? Ou seja, somente os dois podem se comunicar?

Comentário de Alexandre W D em 8 agosto 2013 às 10:36

Boa dia galera.

Estava tentando fazer esse um projeto parecido com esse só que com PIC 16F628A porem sem sucesso.

Então agora estou partindo do principio de fazer com arduino. Eu quero fazer pra ligar/desligar o LED com um botão por exemplo.

Podem me informar que adaptações preciso fazer no código?

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

Na verdade não.

Vai ser algo assim:

 - Carro entra no posto;
 - Receptor detecta o carro;
 - Detector envia informações do carro para o banco de dados;
 - iPad que fica verificando o banco de dados via Wifi percebe que há uma nova requisição de abastecimento;
 - Sistema abre tela de abastecimento com as informações do veículo;

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço