Tutorial: Como utilizar os módulos RF Link (315MHz/434MHz)

 

Olá Garagistas! No tutorial de hoje mostraremos como você pode facilmente utilizar os módulos de transmissão RF Link (315MHz/434MHz) utilizando o Garagino. Como demonstração faremos acionamentos no módulo receptor, a partir de botões pressionador no módulo transmissor.

 

 

Material Utilizados:

2x Kit Garagino Rev 1

1x Módulo Transmissor(315MHz)/Módulo Receptor(315MHz) ou Módulo Tra...

4x Chave Tactil

3x Resistor 330Ω (Acionamento do LEDs)

4x Resistor 10KΩ (Pull-down das chaves táteis)

3x LEDs (Verde, Amarelo e Vermelho)

2x Protoboard

Alguns Jumpers (Circuito e Antena)

 

 

1. RF Link (315MHz/434MHz)

Figura 1 - Pinout Módulos RF

Os Módulos RF Link são módulos para transmissão por Rádio Frequência. Normalmente quando se pensamos em comunicação sem fio para ser utilizado com Garagino ou Arduino, a primeira coisa que vem à mente são os famosos XBee, contudo nem todos tem a possibilidade de comprar um XBee, pois são relativamente caros se comparado com os módulos RF.

Esses módulos são bem simples, o transmissor enviar dados em série para o receptor fazendo um método de transmissão simplex, o transmissor envia e o receptor recebe, simples assim. Contudo, seria necessário você utilizar um encoder (codificador) e um decoder (decodificador) para facilitar o processo de transmissão entre seus módulos, daí a vantagem de você pode utilizar um Garagino ou Arduino, porque além de você utilizá-lo como encoder ou decoder, você irá consumir somente 1 pino de cada Garagino para a comunicação e terá todo os outros disponíveis para a leitura de sensores, acionamentos de carga e pode também tratar os dados que serão enviados e recebidos.

E qual a diferença entre as frequências de 315MHz e 434MHz? Como a diferença entre as frequências desses módulos é pequena, basicamente em aplicações práticas os resultados vão ser bem próximos, já na teoria a frequência de 433MHz deve se comportar melhor em ambientes fechados enquanto a de 315MHz terá o maior comprimento de onda, logo você terá maior alcance ao ar livre. Lembrando que no Brasil essas frequência são permitidas para uso livre pela Anatel.

Em nossa aplicação teremos então um Garagino (encoder) para o módulo transmissor e um Garagino (decoder) para o módulo receptor. Faremos a leitura dos botões conectados nos pinos digitais D6~D9 do módulo transmissor e faremos o acionamento desses respectivos pinos digitais no módulo receptor, onde estão conectados nesses pinos:

D6 - LED Verde

D7 - LED Amarelo

D8 - LED Vermelho

D9 - Módulo Relé (Lâmpada)

2. Biblioteca VirtualWire.h

Nessa demonstração utilizamos a biblioteca VirtualWire.h, ela facilita a aplicação e utilização desses módulos. É uma biblioteca bastante útil e simples de se utilizar e ela pode ser utilizada tanto para o módulo RF Link de 315MHz quanto para o módulo RF Link de 434MHz, para informações mais detalhadas sobre as biblioteca, consulte o material neste link. Neste tutorial foi utilizada a versão 1.20 desta biblioteca, e ela pode ser baixada, clicando aqui.

3. Sketch Módulo Receptor

- Transfira o sketch abaixo para o Garagino do módulo receptor:

#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h

void setup()
{

  //++++++++++++++Inicializa o módulo receptor+++++++++++++++++++
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_set_rx_pin(2); //Configura o pino D2 para a leitura dos dados
  vw_rx_start(); //Inicia a leitura de dados do módulo receptor
  //==============================================================

  //Configura os pinos de 6 a 9 como saída
  for(int i=6;i<=9;i++)
  {
    pinMode(i, OUTPUT);
  }
  //======================================

}

void loop()
{

  uint8_t buf[VW_MAX_MESSAGE_LEN]; //Variável para o armazenamento do buffer dos dados
  uint8_t buflen = VW_MAX_MESSAGE_LEN; //Variável para o armazenamento do tamanho do buffer

  if(vw_get_message(buf, &buflen)) //Se no buffer tiver algum dado (O ou 1)
  {

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    //Incrementa a posição para a leitura do buffer por i (0 a 4)
    //Incrementa a posição dos pinos digitais por j (6 a 9)
    int j=6;
    for (int i = 0; i < buflen; i++,j++)
    {
      buf[i] = buf[i] - 48; //Pega o dado do buffer que é recebido em hexadecimal e subtrai 48
      if(buf[i] == 1) //Se o dado na determinada posição do buffer for igual 1
      {
        digitalWrite(j,!digitalRead(j)); //Inverte o estado do respectivo pino digital
      }
    }
    //========================================================================================

  }

}

 

 

4. Sketch Módulo Transmissor

- Transfira o sketch abaixo para o Garagino do módulo transmissor:

#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h

 

char *nibble = "0000"; //Cria a variável nibble com o valor 0000

 

int le_pino; //Cria a variável para a leitura dos pinos digitais

 

void setup()
{

  //++++++++++++++Inicializa o módulo transmissor+++++++++++++++++++
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_set_tx_pin(3); //Configura o pino D3 para a leitura dos dados
  //================================================================

  //Configura os pinos de 6 a 9 como entrada
  for(int i=6; i<=9; i++)
  {
    pinMode(i, INPUT_PULLUP);
  }
  //======================================

}

void loop()
{

  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  //Incrementa a posição para o armazenamento no nibble por i (0 a 4)
  //Incrementa a posição dos pinos digitais por j (6 a 9)
  int j=0;
  for(int i=6;i<=9;i++,j++)
  {
    le_pino = digitalRead(i); //Lê o estado do botão
    if(le_pino == 1) //Se o botão estiver pressionado
    {
      while(le_pino == 1) le_pino = digitalRead(i); //Aguarda o botão ser despressionado
      nibble[j] = '1'; //Armazena na respectiva posição do no nible o caracter 1
    }
    else nibble[j] = '0'; //Senão armazena na respectiva posição do no nible o caracter 1
  }

vw_send((uint8_t *)nibble, strlen(nibble)); //Envia a variável nibble
  vw_wait_tx(); //Aguarda o fim de transmissão
  //=======================================================================================

}

 

 

5. Circuito do Módulo Receptor

Faça as ligações do circuito do módulo receptor:

Figura 2 - Circuito do Módulo Receptor

6. Circuito do Módulo Transmissor

Faça as ligações do circuito do módulo transmissor:

Figura 3 - Circuito do Módulo Transmissor

 

 

Referências

http://www.airspayce.com/mikem/arduino/

http://lusorobotica.com/index.php?topic=772.0

http://www.univasf.edu.br/~gari/futvasf/paginas/download/Apresenta%C3%A7%C3%A3oRF_Manoel%2009-04-2010.pdf

 

 

 

Exibições: 57986

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 alvin em 20 outubro 2014 às 12:42

boa tarde.

Fiz tudo conforme a matéria, mas não funciona.

O que pode ser ?

Comentário de Eduardo castellani em 23 julho 2014 às 17:53

OI LUCAS, Obrigado. mas não achei o vídeo no face.

Comentário de Lucas Mantuan em 23 julho 2014 às 15:19

Pois é, Eduardo. Agora, posso te ajudar enviando esse link do meu projeto. Confira o vídeo :https://www.facebook.com/groups/arduinobra/permalink/804963472881381/

Comentário de Eduardo castellani em 23 julho 2014 às 14:16

Valeu Lucas, vou buscar algo na inter, ´difícil fazer algo se não tem tutorial de quem já fez antes.

abraço 

Comentário de Lucas Mantuan em 23 julho 2014 às 12:15

Eduardo, no meu projeto eu transmito dados em código binário (0 ou 1), na verdade, eu converto uma variável analógica em uma digital  ou discreta (utilizando o Arduino). Creio eu, que com o APC220 vc tbm consiga transmitir dados em formato de código binário ou outro e dps esse código ser decodificado em forma de imagem ou vídeo, de maneira análoga a transmissão via rádio utilizadas pelas redes de TV. Pesquise mais sobre essa possibilidade. Quando tiver um tempinho posso te ajudar. Abraço.

Comentário de Eduardo castellani em 23 julho 2014 às 10:36

Uma pergunta aos especialistas.

O que poderei transmitir sem fio por esse modelo APC220?  ( Ou outro, peço sugestão )   preciso transmitir sequencia de fotos com audio, ou vídeo com áudio. obrigado

Comentário de André Giovanni em 23 julho 2014 às 10:23

Bruno,

Verifiquei o módulo APC220 e é realmente interessante, tem protocolo de comunicação, ao que me pareceu já tem controle de comunicação por hardware e protocolo.

Porém a frequência é 433, não acredito que esta antena que vem junto no equipamento refresque alguma coisa pois no 433 o que manda é a antena de 17,5 cm de fio rígido, devido às características físicas da onda. Testei no meu projeto antenas de roteador e não funcionam.

Não sei maiores detalhes do seu projeto, mas, ao que tudo indica, penso que é mais vantajoso e garantido, utilizar um XBEE, como ele funciona em 2,4gHz, as antenas de roteador farão a diferença e vc vai conseguir comunicar à uma distância maior.

É salgado, mas é garantido, já vi fazerem umas coisas muito legais com ele.

Blz? Espero ter ajudado.

Comentário de Lucas Mantuan em 23 julho 2014 às 9:01

André, agradeço a atenção. Muito obrigado! Meu problema é que preciso de um par de módulo RF que trabalhe numa distância acima de 200, 300 m. Provavelmente terei que utilizar o único módulo que encontrei no mercado que promete essa distância (APC220, conhece?). Vou ter que retirar a antena omnidirecional e trocar por uma direcional para aumentar ainda mais essa distância, o que deve pesar um pouco no bolso. É  o jeito. Mas, na verdade, estou com medo do dispositivo não prometer com o que se fala por ai na net ("consegui 500 m com o APC220!"), afirmando-se que com a própria antena omnidirecional se tem esse alcance. Vou ver o que consigo fazer, qualquer coisa, volto com minhas dúvidas. Obrigado, mais uma vez, André.

Comentário de André Giovanni em 23 julho 2014 às 2:48

Lucas, bom dia.

Não sou nenhum especialista em eletrônica, mas tenho aprendido muito configurando e montando meu carrinho. 

Pelos testes que fiz aqui, consegui ultrapassar os 15 metros, o que considero bem razoável dada a quantidade de interferências que este tipo de comunicação está sujeito.

Não acredito que a comunicação chegue aos 200 metros como já vi por aí falarem, para mim é um exagero extremo.

Há alguns cuidados que você deve tomar para conseguir bons resultados:

1 - muito cuidado com a antena, deve ser feita com, no mínimo, fio rígido de cobre acima de 1mm de diâmetro e deve possuir exatos 17,5 cm, ou seja, 1/4 do comprimento de onda. A antena deve estar na posição vertical, caso contrário perderá muito sinal.

2 - utilize capacitores como filtro na alimentação, tanto no tx, quanto no rx, caso contrário podem ocorrer harmônicos que detonam a comunicação.

3 - muito cuidado com a tensão, pois ela deve ser o mais próximo possível de 12 volts no transmissor e de 5 volts no receptor, lembre-se que o arduino, ou no meu caso o garagino, funcionam por volta dos 5 volts, então recomendo utilizar uma fonte de 12 volts e um regulador do tipo 7805 para obter ambas as voltagens necessárias.

4 - cuidado quando utilizar ligações de negativo (comum) para ligar motores dc, no circuito onde está o rx, pois o ruído gerado por eles simplesmente mata seu receptor.

5 - a biblioteca virtualwire utilizada neste exemplo funciona legal, mas achei que é muito lenta, estou utilizando uma chamada rcswitch que achei mais rápida e tem alguns recursos de correção de erros bem interessantes, ela também trabalha com códigos numéricos mais facilmente, não sendo necessário enviar strings char.

Isso foi tudo o que consegui juntar de experiências nas minhas pesquisas, todos os itens testei e garanto que funcionam.

Espero por ter contribuído assim como já obtive muitas respostas pesquisando o labdegaragem.

[]s

Comentário de Lucas Mantuan em 22 julho 2014 às 17:25

Olá, galera do LabdeGaragem. Poderiam me informar qual a distância máxima de comunicação entre os dois módulos, caso utilize um módulo como transmissor e outro como receptor?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço