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

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 André Giovanni em 16 julho 2014 às 0:57

Problema resolvido.

Refiz as antenas com fio de cobre esmaltado, no transmissor reto, no receptor uma bobina.

Porém o tal delay que percebia foi uma tremenda de uma pescada durante a programação.

Estudei o código acima e quando voltei aos meu códigos (programar dois arduinos funde um pouco a cabeça) descobri dois delays perdidos que causavam o delay.

Fica a dica! Quando programar os dois arduinos, tenha em mente que um é cliente e outro é servidor, que um você vai gerar comandos e outro vai receber verificar e executar. Não é muito fácil não, mas com o tempo pega-se o jeito! 

Comentário de André Giovanni em 15 julho 2014 às 11:42

Bom dia.

No projeto de carrinho controle remoto (http://labdegaragem.com/photo/turbino?context=featured) que estou montando, utilizei um par rx/tx 433 mhz.

Estou utilizando um controle de PS2 para gerar comandos no arduino ligado ao transmissor (na versão final vou utilizar um garagino), 

Vamos lá:

Percebi no seu vídeo que a resposta está bem rápida quando o botão é pressionado, no meu caso, estou tendo uma demora na resposta que as vezes ultrapassa os 3 segundos. O que é estranho, pois estou enviando apenas um byte (uma letra), que seriam 8 bits e sendo a taxa de transferência 2000 (acredito bit por segundo), o tempo de transferência não deveria influenciar.

Estou imaginando que o problema seja a antena, então, qual seria uma apropriada? Outro detalhe é que o módulo receptor tem um ajuste, que me parece ser um capacitor variável, qual seria o efeito de tentar mudar o ajuste deste componente?

Por último, de acordo com o data-sheet deste equipamento, existem dois pinouts para o módulo TX, um digital e um analógico, qual seria a diferença na forma de transmitir os dados?

Peço desculpas pelo enorme post, porém espero que as respostas possam contribuir com outros que venham a se aventurar na utilização destes módulos.

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

Eu gostaria de utilizar esse codigo para abrir uma fechadura eletronica via comando de voz, como eu poderia adaptar o codigo?

abraço

Comentário de Laboratório de Garagem em 27 junho 2014 às 16:28

Para enviar a leitura de um sensor ou de uma entrada analógica, basta efetuar a leitura e enviar o código que desejar indicando o valor do sensor, neste tutorial foram enviados 0 e 1, indicando se tem botão pressionado ou não, nada impede de você enviar uma leitura de sensor.

Atenciosamente,

Equipe LdG.

Comentário de sidnei jonas becker em 18 junho 2014 às 12:05

alguem tem um codigo para enviar dados de leitura de um sensor  

Comentário de fabiano andrade em 5 abril 2014 às 20:29

para transmitir o estado de uma entrada ou saida analogica como devo proceder?

Comentário de fabiano andrade em 11 março 2014 às 19:33

ola! muito bom o tutorial! parabens!

Comentário de wilson domingos machado em 27 novembro 2013 às 11:02

cara projeto bem estruturado e fácil compreemção ,  parabéns 

Comentário de Samir M Teixeira em 22 novembro 2013 às 14:53

Parabéns, muito bom, eu estava justamente precisando de um tutorial do RF.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço