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.