domingo, 9 de junho de 2013

Transmissão RF

Olá, neste artigo iremos explicar como realizar uma transmissão com Rádio Frequência (RF), utilizando os módulos abaixo com dois arduinos.


O módulo menor é o transmissor (TX). O maior é o receptor (RX). Utilizaremos também a biblioteca VirtualWire para fazer a comunicação com os módulos. Esses módulos só permitem a comunicação em um sentido ou unidirecional, ou seja, sempre teremos o envio de dados do TX para o RX. Para que possamos fazer uma comunicação completa com envio e recebimento por ambos teríamos que utilizar dois pares de módulos com frequências diferentes. O download da biblioteca e maiores detalhes sobre ela, podem ser obtidos no link já informado.

Em ambos os módulos temos um local para colocar uma antena (ANT). Com a antena, a distância entre eles poderá ficar bem maior. 

Transmissão (TX)

Iniciaremos pela aplicação que envia os dados. Essa aplicação enviará a mensagem "TransRF" a cada segundo. Ligue os pinos de alimentação e terra do módulo ao arduino e o pino ATAD ao pino 9 também do arduino. 

Segue abaixo o código-exemplo.

#include <VirtualWire.h> // lib para RF

//Pinos para o transmissor RF
#define TX_PIN 9
#define RX_PIN 10
#define PTT_PIN 11

#define DOIS_MIL 2000

char mensagem[8];

void setup()
{
  //Pino de envio
  vw_set_tx_pin(TX_PIN);
  //Pino de recepcao. Embora nao seja utilizado no TX, faz-se necessario definir
  vw_set_rx_pin(RX_PIN);
  vw_set_ptt_pin(PTT_PIN);
  vw_set_ptt_inverted(true);
  vw_setup(DOIS_MIL);
  
  mensagem[0]= 'T';
  mensagem[1]= 'r'; 
  mensagem[2]= 'a';
  mensagem[3]= 'n';
  mensagem[4]= 's';
  mensagem[5]= 'R';
  mensagem[6]= 'F';
  mensagem[7]= '\0';
}

void loop()
{
     vw_send((uint8_t *)mensagem, 8);
     delay(1000);
}

Recepção

Essa aplicação receberá a mensagem enviada pelo TX e imprimirá a mesma no console serial.
Ligue os pinos de alimentação e terra do módulo no arduino e ligue o pino DATA ao pino 9 também do arduino. Note de nesse módulo temos 2 pinos de dados. Ambos são iguais. Utilize qualquer um deles.

Segue abaixo o código-exemplo.

#include <VirtualWire.h>

void setup() {                
  Serial.begin(9600); 
  vw_set_tx_pin(10);//Embora nao usado, mas precisa ser definido
  vw_set_ptt_pin(11);
  vw_set_rx_pin(9);//Pino de envio
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_rx_start(); 
}

void loop() {
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
 
  Serial.println("Aguardando");
  if (vw_get_message(buf, &buflen))
  {
    Serial.print("Texto recebido:");
    Serial.write((char*)buf);
    Serial.println();
  }
  delay(1000);
}

Saída do console serial:


Segue abaixo uma foto dos módulos montados:


Até a próxima.

Sem comentários:

Enviar um comentário