terça-feira, 17 de março de 2015

Kit Transmissor + Receptor RF 315MHz/433MHz

Apresentaremos hoje os módulos de transmissão e recepção sem fio. Estes módulos possibilitam a comunicação entre dispositivos através de uma comunicação serial remota sem fio.

São fáceis de trabalhar e são diretamente compatíveis com a plataforma Arduino e com qualquer outro microcontrolador também.

Com eles você poderá fazer dois Arduinos conversarem entre si a distâncias de até por volta de 180m! A distância de funcionamento é relativa e varia de acordo com vários fatores, entre eles: ruídos eletromagnéticos do ambiente, tensão de alimentação do transmissor, uso de antenas apropriadas, velocidade de comunicação.

Neste exemplo de utilização, vamos controlar o brilho de um LED bicolor conectado em um Arduino remoto. Para tanto, iremos usar dois potenciômetros conectados nas portas analógicas do Arduino Transmissor (Tx). Cada potenciômetro irá definir a largura de pulso de PWM que será aplicada aos terminais do LED bicolor.

TRANSMISSÃO

Esquema de ligação do Arduino Transmissor




Lista de materiais para a montagem do transmissor:

Fotos da montagem do transmissor:





A estratégia de envio dos dados através do módulo transmissor foi a de usar o canal UART  de comunicação onde cada bit do dado é enviado de forma serial através do pino TX.

Como o dado resultante da conversão A/D tem o tamanho de 10 bits, precisamos dividi-lo em dois e enviar os dois primeiros MSB e logo em seguida os oito LSB. Fazemos isto para os dois valores obtidos através dos canais A0 e A1. Um byte de start (0xFF) é enviado primeiro para indicar o início da transmissão.

Aqui temos o link para o algoritmo utilizado no Arduino Transmissor. Não foi usado nenhum protocolo de comunicação conhecido. Numa aplicação mais robusta se faz necessário o uso de protocolos de comunicação e rotinas que chequem a integridade dos dados recebidos.

RECEPÇÃO

Esquema de ligação do Arduino Receptor



Lista de materiais para a montagem do receptor

 Fotos da montagem do receptor:




No receptor utilizamos um Arduino DUE e conectamos a ele o LED bicolor e o modulo receptor RF. O algoritmo de recepção baseia-se na ideia de colher o que o canal Serial 1 (RX1 - pin 19) recebe e tratar os dados recebidos. Usamos um vetor (array) de 4 posições para, após o recebimento do byte de start (0xFF), os próximos dados poderem ser gravados.

Precisamos receber os dois valores de saída do A/D do Arduino UNO (transmissor), A0 e A1 e usá-los como referência para setar os sinais PWM que irão ser aplicados no LED bicolor de dois terminais do lado do receptor.

Como dito anteriormente, o A/D do Arduino UNO tem resolução de 10 bits. Portanto, os dois valores de saída do A/D para A0 e A1, serão recebidos em parcelas. Por isto usamos um vetor de 4 posições e não duas. Depois, fazendo as contas necessárias podemos unir novamente estes valores no Arduino DUE receptor e setar os valores PWM para o LED bicolor.

Antenas


As antenas são necessárias quando a distância entre dispositivos começa a passar de ±5 metros. Em geral, o tamanho da antena é tido como ¼ do comprimento de onda (λ). Acompanhe:


Onde:
λ: comprimento de onda (m);
c: velocidade de propagação da onda (velocidade da luz) (m/s);
f: frequência da onda (Hz).

Para uma onde 315MHz, temos:


Como o comprimento da antena é ¼ do comprimento de onda (λ). Então o comprimento da antena para sistemas de RF com 315MHz é:


Portanto, uma antena de 24 cm é suficiente.

Arquivos de código ".ino" TX e RX.


* * *



Lembrem-se que esta foi apenas 1 estratégia para termos o resultado desejado. Existem muitas possibilidades que vocês podem descobrir. Adquira um dos kits RF disponíveis em nossa loja e explore ainda mais seu Arduino.

9 comentários:

  1. Não é preciso utilizar a biblioteca VirtualWire???

    sabem dizer qual a aplicação da mesma se nao ha necessidade?

    ResponderExcluir
    Respostas
    1. Olá!
      A Biblioteca VirtualWire não foi utilizada nesse exemplo, uma vez que a maneira apresentada por nós para a utilização do Kit RF foi apenas uma das muitas formas possíveis de utilização para o mesmo. A biblioteca VirtualWire é uma maneira conhecida de utilizar módulos RF, com bastante documentação divulgada na web.
      Para testá-la, assumindo que já foi feito o download e a instalação da mesma, pode ser utilizado o seguinte código, que fará o led ligado ao pino 13 do Arduino receptor acender e apagar, de acordo com a transmissão enviada.

      Para o transmissor:

      #include
      char *controller;
      void setup() {
      pinMode(13,OUTPUT);
      vw_set_ptt_inverted(true); //
      vw_set_tx_pin(12);
      vw_setup(4000);// speed of data transfer Kbps
      }

      void loop(){
      controller="1" ;
      vw_send((uint8_t *)controller, strlen(controller));
      vw_wait_tx(); // Wait until the whole message is gone
      digitalWrite(13,1);
      delay(2000);
      controller="0" ;
      vw_send((uint8_t *)controller, strlen(controller));
      vw_wait_tx(); // Wait until the whole message is gone
      digitalWrite(13,0);
      delay(2000);
      }

      Para o Receptor:

      #include
      void setup()
      {
      vw_set_ptt_inverted(true); // Required for DR3100
      vw_set_rx_pin(12);
      vw_setup(4000); // Bits per sec
      pinMode(13, OUTPUT);

      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
      {
      if(buf[0]=='1'){


      digitalWrite(13,1);
      }
      if(buf[0]=='0'){
      digitalWrite(13,0);
      }
      }
      }

      Lembrando que é necessário que se use 2 Arduinos, e que a ligação dos módulos seja feita de maneira que o terminal de dados fique no pino 12 do Arduino, tanto no receptor quanto no transmissor

      Esperamos ter ajudado.
      Obrigado pelo feedback!
      Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br

      Excluir
  2. Olá,
    Pelo código eu vi que a velocidade é de 4800.
    Existe alguma opção de aumentar esta velocidade?
    Em caso positivo, como eu configuro isto no emissor/receptor?

    Obrigado.

    ResponderExcluir
    Respostas
    1. Sim, é possível, Diego.
      Basta alterar o valor 4800 na linha "Serial.begin(4800);" para um valor que seja mais conveniente.
      Porém, é importante lembrar que este valor deverá ser um múltiplo inteiro do valor 4800 (por exemplo: 9600, 19200...),para facilitar a visualização dos dados no Monitor Serial.
      Esperamos ter ajudado.
      Obrigado pelo feedback!
      Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br

      Excluir
    2. Obrigado!!
      Já efetuei a compra! :D

      Excluir
  3. Olá!

    Seria possível aumentar a distância de comunicação, algo próximo de 1km, seja utilizando este módulo ou um módulo mais sofisticado? O fato de a antena e o receptor estarem em movimento pode afetar o funcionamento?

    Caso seja necessário um módulo mais sofisticado, vocês poderia produzir um protótipo e posteriormente em escala?

    ResponderExcluir
  4. Muito bom. E para dois led's qual seria alteração necessária nesse código?

    ResponderExcluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir