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

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 Leonilde Diogenes Gurgel Neto em 14 agosto 2012 às 19:45

Distância de algumas centenas em área livre... quanto a ser confiável... veja.. .a frequência que isso utiliza não é lá essas coisas e o tipo de modulação tmbm não... então o mínimo que se utiliza é uma chave lógica pra garantir q a fonte de envio é realmente conhecida...

No caso pode ser realizado um procedimento baseado em protocolos já existentes e assim vai... e garantir um algoritmo de compressão, correção e assim vai...

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

Ola galera,

Vcs sabem qual a distância máxima que pode ser feito com esse transmissor e receptor? e se a transmissão é realmente confiável?

Comentário de Leonilde Diogenes Gurgel Neto em 17 maio 2012 às 17:21

Olás!

Sempre tive curiosidade sobre esse módulo e após ver este post resolvi estudar um pouco mais e comprar também.

O lance é que pelo que verifiquei... do jeito que está sendo postado... funcionar "funciona" não da melhor maneira... por motivos de ruido, interferências e etc... seria bom ter um CODE / DECODE e seguindo a linha de raciocínio de Fabrício Dalla Veccia... isso seria uma solução física e com relação ao TCP sendo uma solução lógica... e para não ter que gastar NADA comprando estes CI´s Code/Decode li sobre eles e a implementação me parece muito simples e resolvi implementar isso agora mesmo...

Conseguindo alguma coisa posto assim que puder...

[]´s

Comentário de Fabrício Dalla Vecchia em 10 maio 2012 às 13:29
O que você acha de dar uma atenção na transmissão dos dados.
Colocando uma transmissão confiável, baseado em tcp.
To trabalhando em cima disso e quando conseguir eu posso mostrar
Mais se tiver uma idéia vamos compartilhar

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço