collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: RF Link Receiver/Transmitter - Arduino  (Lida 14159 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
RF Link Receiver/Transmitter - Arduino
« em: 29 de Julho de 2012, 05:17 »
Boas, quando comprei estes módulos RF não tinha conhecimentos nenhuns de electrónica e nunca tinha programado um arduino, portanto achei complicado começar a comunicar sem fios. Neste momento já acho simples e como não encontrei nenhum tutorial sobre isso aqui, pensei que seria boa ideia fazer um e contribuir com o pouco que sei :)

Os receptor/transmissor que usei são os seguintes:

Transmissor


Receptor


São módulos relativamente baratos e têm um alcance de 100 metros em terreno aberto.
A velocidade máxima de recepção/transmissão dos que utilizei é de 4800bps.

Para comunicar com os módulos precisamos, em primeiro lugar de 2 arduinos. Eu utilizei um Arduino Mega e um Arduino Uno. Ligar o transmissor é bastante simples. O que eu tenho apenas tem indicação para a antena, mas através de uma pesquisa rápida na internet ou mesmo acedendo à datasheet do mesmo se consegue saber para que são os outros pinos. Os 2 arduinos vão comunicar com o computador pela porta Serial, portanto devem estar ligados através do cabo usb ao mesmo.

Deixo aqui uma imagem com o pinout do transmissor e receptor:


A ligação com o arduino é bastante simples em ambos os casos:

Vcc - Alimentação (de 5V a 12V)
GND - Ground
Data - Qualquer pino digital do arduino

Convém ter o arduino sem nenhum código a correr que utilize os pinos guardados para a comunicação, há pouco esqueci-me que tinha o arduino a utilizar um pino como saída e liguei o pino Data ao pino do arduino. Passado uns segundos cheirou-me a queimado e lembrei-me logo... Felizmente não estraguei nada, mas aprendi a lição...

O código para o transmissor é o seguinte:
Código: [Seleccione]
#include <VirtualWire.h> // É necessário utilizar esta biblioteca para transmitir a informação

char info[30];
int index = 0;
char inChar;

void setup() {
  pinMode(6,OUTPUT);
  Serial.begin(9600);
  vw_set_tx_pin(6); // Esta função diz que o pino responsável por transferir a informação é o 6
  vw_set_ptt_inverted(true); // Sei que esta função tem de ser usada, mas não sei o que significa, se alguém souber e quiser acrescentar
  vw_setup(2000); // função responsável por declarar a velocidade de transmissão (neste caso 2000bps)
}

void loop()
{
  if (Serial.available() > 0) {  // Se houver informação à espera para ser lida começa o loop abaixo
      while (1) {
      inChar = Serial.read(); // Guarda temporariamente o primeiro caracter/byte
      info[index] = inChar; // Coloca o caracter numa array de caracteres
      index++; // acrescenta 1 valor a index, de forma a que quando se repetirem as operações de cima o byte não seja escrito no mesmo sítio
        delay(2); // Este pequeno delay é necessário para que chegue o próximo byte, caso este delay não cá esteja o arduino vai terminar o loop
        if (Serial.available() <= 0) { // Esta condição é necessária para verificar se existe mais informação para ser lida
          index = 0; // Como não existe mais informação para ler a variável index volta a 0
          const char *msg = info;
          vw_send((uint8_t *)msg, strlen(msg)); // envia a informação recebida pela porta Serial para o receptor RF
          vw_wait_tx(); // espera que a informação seja transferida
          memset( &info, 0, sizeof(info) ); // faz reset à array de caracteres, de forma a ficar limpa para ser escrita novamente
          break; // por fim termina o loop e dá continuidade ao código (neste caso não há mais código, mas poderia haver)
        }
      }
   }
}


Receptor:
Código: [Seleccione]
#include <VirtualWire.h>

char info[30];

void setup()
{
    Serial.begin(9600);
    pinMode(7,INPUT);
    vw_set_rx_pin(7); // Pino de recepção
    vw_set_ptt_inverted(true);
    vw_setup(2000);
    vw_rx_start(); // Necessário para começar a receber informação
}

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

    if (vw_get_message(buf, &buflen)) // Caso chegue alguma mensagem ao receptor
    {
int i;
        digitalWrite(13, true); // Esta parte é opcional, eu utilizei para testar e ver se estava a receber alguma coisa
for (i = 0; i < buflen; i++) // Basicamente isto vai repetir para cada byte recebido e vai guardar a informação numa array de caracteres
{
          info[i]=buf[i];
}
Serial.println(String(info)); // Enviamos pela porta Serial a informação recebida
        memset( &info, 0, sizeof(info) ); // Fazemos reset à variável info para utilizar uma outra vez
        digitalWrite(13, false);
    }
}


Pronto, basicamente é isto...
Fica aqui ainda uma imagem do resultado final :)




À esquerda está a janela do receptor e à direita está a do transmissor.


Cumprimentos

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: RF Link Receiver/Transmitter - Arduino
« Responder #1 em: 29 de Julho de 2012, 16:18 »
Tambem tou com  ideias de comprar um kit parecido / igual ao seu, para fazer umas brincadeiras.

bom tutorial, bem explicado, e simples.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: RF Link Receiver/Transmitter - Arduino
« Responder #2 em: 29 de Julho de 2012, 16:58 »
Depois conta como correu, se precisares de ajuda e se eu souber diz :)

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: RF Link Receiver/Transmitter - Arduino
« Responder #3 em: 29 de Julho de 2012, 17:54 »
Obrigado pelo tutorial. Por acaso, à uns tempos andei a ver esses artigos, pois sao bem mais baratos que os xbee (se bem que xbee é uma coisa diferente).

Quando comprar, ja sei por onde me guiar :D

Aproveito para te perguntar, se quando transmites informação, os dados demoram muito tempo aparecer no receptor.

Abraço
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: RF Link Receiver/Transmitter - Arduino
« Responder #4 em: 29 de Julho de 2012, 19:22 »
Tb tenho aqui ja um par RF Transmissor/Receptor a 433.92MHz AM pela RF Solutions
Transmissor - AM-RT4 e Receptor - AM-HRR.
Problema e que nao tenho tido tempo nenhum com tanto trabalho. Mas tenho o codigo mais ou menos desenvolvido ( foi dificil encontrar outros projectos similares ja que e quase tudo Zigbees, etc)... Mas tenho que ver se perco algum tempo e documentar o projecto para partilhar !
Ja agora, mantem o pessoal informado, sff !

PS- Alguns links que possam ajudar, que tinha guardado
http://thegiblins.com/projects/arduino_homeeasy_receiver_manual1.php?Bigulate=0
http://arduino.cc/forum/index.php/topic,109265.0.html
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: RF Link Receiver/Transmitter - Arduino
« Responder #5 em: 29 de Julho de 2012, 19:41 »
Obrigado pelo tutorial. Por acaso, à uns tempos andei a ver esses artigos, pois sao bem mais baratos que os xbee (se bem que xbee é uma coisa diferente).

Quando comprar, ja sei por onde me guiar :D

Aproveito para te perguntar, se quando transmites informação, os dados demoram muito tempo aparecer no receptor.

Abraço

Pois, eu comprei estes módulos porque não tinha dinheiro para gastar em Xbees, são bem mais caros :s Ainda não testei grandes distâncias, mas do que testei os dados demoram menos de meio segundo a chegar, não é instantâneo, mas não demora assim tanto tempo, mas eu também não utilizei antenas, se calhar com antenas melhora.

Tb tenho aqui ja um par RF Transmissor/Receptor a 433.92MHz AM pela RF Solutions
Transmissor - AM-RT4 e Receptor - AM-HRR.
Problema e que nao tenho tido tempo nenhum com tanto trabalho. Mas tenho o codigo mais ou menos desenvolvido ( foi dificil encontrar outros projectos similares ja que e quase tudo Zigbees, etc)... Mas tenho que ver se perco algum tempo e documentar o projecto para partilhar !
Ja agora, mantem o pessoal informado, sff !

PS- Alguns links que possam ajudar, que tinha guardado
http://thegiblins.com/projects/arduino_homeeasy_receiver_manual1.php?Bigulate=0
http://arduino.cc/forum/index.php/topic,109265.0.html

Boa sorte, eu vou tentar fazer um vídeo hoje e assim podem ver a velocidade de transmissão e todo o setup.
Pois, por acaso a datasheet do meu tinha um código de exemplo, mas já não me lembro porquê o código não estava a funcionar e tive de procurar alternativas, foi aí que encontrei esta biblioteca.

Acho que para projectos que não requiram comunicação a longas distâncias estes módulos servem bem.


Cumprimentos

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: RF Link Receiver/Transmitter - Arduino
« Responder #6 em: 31 de Julho de 2012, 03:44 »
Aqui está o vídeo onde podem ver a velocidade de transmissão. Experimentei a 4800bps mas não estava a funcionar bem, alguns bytes não chegavam ao receptor, portanto baixei para 4000bps e estava a funcionar bem.
Não escrevi mensagens compridas porque o código estava programado para mensagens de 30 caracteres, no entanto podem alterar a array para um comprimento superior.
O transmissor estava a uma distância de 3/4m do receptor. Não consegui testar distâncias maiores porque tenho o fixo estragado e a minha irmã decidiu meter password no portátil dela... Fica para a próxima.



Cumprimentos

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: RF Link Receiver/Transmitter - Arduino
« Responder #7 em: 31 de Julho de 2012, 03:47 »
Podes implementar ai um sistema de CRC simples e assim tens correcção de erros, se o CRC da mensagem recebida for diferente do suposto crc do original, pede uma re-transmissão.
Avr fanboy

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: RF Link Receiver/Transmitter - Arduino
« Responder #8 em: 31 de Julho de 2012, 03:54 »
É uma ideia, mas assim ia precisar de outro transmissor certo? Só tenho mesmo este.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: RF Link Receiver/Transmitter - Arduino
« Responder #9 em: 31 de Julho de 2012, 04:01 »
Dai eu já ter dito para usar algo melhor, e até mais barato que esses, como por exemplo o nRF, que até tratam de re-transmissão no hardware se não me engano, mas pelo menos consegues baud-rates muito maiores, e são bi-direccionais.
Avr fanboy

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: RF Link Receiver/Transmitter - Arduino
« Responder #10 em: 31 de Julho de 2012, 04:11 »
Tenho de comprar uns para experimentar, mas neste momento não tenho mesmo possibilidade de gastar dinheiro, senão já tinha feito umas comprinhas :(

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: RF Link Receiver/Transmitter - Arduino
« Responder #11 em: 06 de Agosto de 2012, 21:40 »
Citar
vw_set_ptt_inverted(true); // Sei que esta função tem de ser usada, mas não sei o que significa, se alguém souber e quiser acrescentar

Esta funcao so e usada no caso do transceiver  DR3100; Que vem de um protocolo em domotica no Home-easy.
Na biblioteca diz que por defeito, o PTT pin qdo o transmissor esta enabled. Com esta flag, ele vai LOW qdo o transmissor estiver enabled( para fins do DR3100, parece).
   

Um caso simples, nao usando o referido DR3100, teria sido
Código: [Seleccione]
#include <VirtualWire.h>
void setup()
{
  vw_setup(2000); // Bits per sec
}
void loop()
{
  const char *msg = "hello";
  vw_send((uint8_t *)msg, strlen(msg));
  delay(400);
}

ou

Código: [Seleccione]
#include <VirtualWire.h>
void setup()
{
  Serial.begin(9600);
  Serial.println("setup");
  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;
    // Message with a good checksum received, dump HEX
    Serial.print("Got: ");
    for (i = 0; i < buflen; i++)
    {
      Serial.print(buf[i], HEX);
      Serial.print(" ");
    }
    Serial.println("");
  }
}
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline tops72

  • Mini Robot
  • *
  • Mensagens: 263
  • Robotica é uma Arte
    • MicroTops
Re: RF Link Receiver/Transmitter - Arduino
« Responder #12 em: 27 de Fevereiro de 2013, 22:43 »
Boas.
Sobre RF e queria saber tb estou a pensar em comprar esse modulos,mas dps não é preciso alguma coisa para a verificação de erros??

Nao há impossiveis, na Robotica
http://microtops.allalla.com/index.html
ToPs SaNtoS

Offline saminarob

  • Mini Robot
  • *
  • Mensagens: 1
    • http://www.sekopeko.com/
Re: RF Link Receiver/Transmitter - Arduino
« Responder #13 em: 01 de Março de 2013, 13:53 »
What a lovely forum page. I’ll undoubtedly be back again. Please maintain writing!