Você está na página 1de 12

http://labduino.blogspot.com.

br/
Tutoriais - Módulo RF

Modulo RF tutorial
http://produto.mercadolivre.com.br/MLB-435313532-modulo-rf-transmissor-receptor-
433mhz-_JM (acesso em 17/09/2012)
http://lojabrasilrobotics.blogspot.com.br/2011/06/wireless-rf-r2500.html (17/09/2012)

Radio frequência são sinais que se propagam em um cabo condutor e são


irradiados no ar através de antenas. A antena permite converter o sinal que é
transmitido em um circuito via cabos em um sinal “wireless” e ao mesmo tempo
receber as ondas eletromagnéticas e converte-las em um sinal a ser conduzido através
de fios.

Fig.01: Espectro eletromagnético (http://fisicapaidegua.com/teoria/moderna/espectro.jpg)

A ANATEL (agencia Nacional de telecomunicação) regulariza o uso das faixas


de frequência que podem ser utilizadas
O que ocorre na transmissão é que temos uma “onda portadora” que carrega
a informação como se fosse um carro em uma estrada. Ou seja o sinal é modulado.
Para este modulo o tipo de modulação é “Modulação por chaveamento de amplitude,
ou do inglês "Amplitude Shift Keying (ASK)", é uma técnica de modulação de sinais
digitais os quais são representados como variações de amplitude da onda portadora.”
Normalmente este tipo de modulação é usada para regiões de baixos ruídos.

marisac@pucsp.br ou marisacavalcante@uol.com.br 1
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Transmissor (módulo TX): Função é converter os sinais analogicos, digitais ou


sinais de audio em ondas eletromagneticas e transmiti-las no espaço

Para o transmissor RF temos pinos para ligação em VCC , GND e um píno para a
transmissão de dados.
O default para a biblioteca básica é o pino 12.

Receptor (módulo RX): Função de receber as ondas eletromagneticas enviadas


pelo modulo TX e converter em sinais eletricos de corrente e tensão. Composto por
uma antena para receber os sinais enviados pelo modulo TX

Para o receptor RF temos pinos para ligação em VCC , GND pinos para a recepção de
dados.
O default para a biblioteca básica é o pino 11.

marisac@pucsp.br ou marisacavalcante@uol.com.br 2
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

1º passo: Para usar o modulo RF devemos baixar a biblioteca VirtualWire em


diferentes versões disponivel neste link http://www.open.com.au/mikem/arduino/
Para a versao IDE do Arduino 1.0.1 recomenda-se usar a versao 1.9 disponiel para
download em http://www.open.com.au/mikem/arduino/VirtualWire-1.9.zip
Para acesso a documentação desta biblioteca clique aqui:
Documentação da biblioteca:
http://download.milesburton.com/Arduino/VirtualWire/VirtualWire.pdf

Para incorporar a biblioteca. Descompacte a pasta na pasta “libraries” do


Arduino. Para encontrar esta pasta abra a pasta onde se encontra o Arduino

Ao baixar a biblioteca, feche a IDE do Arduino e abra após a instalação


2º passo: Testando a recepção do sinal

No Arduino conectado ao modulo TX (que enviará os dados) usamos o pino


12 para transmitir o sinal.

Pino 12

marisac@pucsp.br ou marisacavalcante@uol.com.br 3
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Para o receptor, utilize outro Arduino e conecte a recepção do sinal no pino 11

Pino 11
Em seguida clique em “examples” e em VirtualWire.

No modulo TX abra o exemplo transmitter a faça upload no Arduino


correspondente

marisac@pucsp.br ou marisacavalcante@uol.com.br 4
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Modulo RX Modulo TX

Neste exemplo o transmissor deverá enviar ao receptor a mensagem “hello”


O receptor deverá receber esta mensagem e imprimir na tela em Hexadecimal
Veja a tabela Ascii em anexo:

Chr HEX
h 68
e 65
l 6C
l 6C
0 6F

marisac@pucsp.br ou marisacavalcante@uol.com.br 5
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

http://www.asciitable.com/index/asciifull.gif

Para que você obtenha a impressão da palavra “hello”, basta ir até a linha de
programação do modulo RX e alterar para:

De -> Serial.print(buf[i], HEX); para -> Serial.print(buf[i]);

Pronto já conseguimos estabelecer a comunicação entre os dois Arduinos,


através de RF.



marisac@pucsp.br ou marisacavalcante@uol.com.br 6
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Exemplo: Coletando dados das portas analógicas e


enviando via RF
Antes de iniciarmos o nosso exemplo temos que considerar um aspecto muito
importante: a transmissão de dados para estes módulos se dá através de portas
digitais. Assim um sinal analógico coletado por um Arduino deverá ser convertido em
digital usando a conversão PWM.
Código para o modulo TX com transmissão de dados através do pino 12 do Arduino
----------------------------------------------------------------------------------------------------
// 433Mhz transmitter by Jan Leander Jensen 2011
// TX pin12, PTT pin 10
// include library

#include <VirtualWire.h> // ver. 1.9


// end include library

//global variable
byte msg[7];
// end global variable

// setup
void setup() {
vw_set_ptt_inverted(true); // Required for PTT para DR3100
vw_setup(2000); // Bits per sec taxa de velocidade para transmissão no modulo RF
}
// end setup

// main loop
void loop()
{
// Função map para transformar a entrada de 10 bits das analógicas para 8 bits (PWM)
msg[0] = map(analogRead(A0), 0, 1023, 0, 255);
msg[1] = map(analogRead(A1), 0, 1023, 0, 255);
msg[2] = map(analogRead(A2), 0, 1023, 0, 255);
msg[3] = map(analogRead(A3), 0, 1023, 0, 255);
msg[4] = map(analogRead(A4), 0, 1023, 0, 255);
msg[5] = map(analogRead(A5), 0, 1023, 0, 255);

vw_send(msg, 7); // transmit msg


vw_wait_tx(); // Wait for message to finish
delay(500);
}
// end main loop
----------------------------------------------------------------------------------------------------

marisac@pucsp.br ou marisacavalcante@uol.com.br 7
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Código para o módulo RX com recebendo o sinal no pino 11


------------------------------------------------------------------------------
// 433Mhz receveiver2 by Jan Leander Jensen 2011
// RX pin 11
// include library

#include <VirtualWire.h> // ver. 1.5


// end include library

//global variable
byte buf[7];
byte buflen;
// end global variable

// setup
void setup()
{
buflen = 7;
Serial.begin(9600);
vw_setup(2000); // Bits per sec taxa de velocidade para transmissão no modulo RF
vw_rx_start(); // Start up the receiver
}
// end setup

// main loop
void loop()
{
if (vw_get_message(buf, &buflen)) // check to see if anything has been received
{
Serial.print("A0=");
int A0 = buf[0];
Serial.print(A0);
Serial.println();

Serial.print("A1=");
int A1 = buf[1];
Serial.print(A1);
Serial.println();

Serial.print("A2=");
int A2 = buf[2];
Serial.print(A2);
Serial.println();

Serial.print("A3=");
int A3 = buf[3];

marisac@pucsp.br ou marisacavalcante@uol.com.br 8
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Serial.print(A3);
Serial.println();

Serial.print("A4=");
int A4 = buf[4];
Serial.print(A4);
Serial.println();

// Batt. test start Para executar este teste voce deve conectar a entrada A5 do
//Arduino TX em VCC através do um resistor (1Kohms, pó exemplo). Deste modo o
//receptor avisa quando a bateria estiver abaixo de um dado valor mas para este caso
//suspendemos este controle
//int A5 = buf[5];
//if (A5 < 107)
{
//Serial.print("BATT. LOW (6,7V)");
//Serial.println();
}
// Batt. test end
Serial.println();
}
}
// end main loop

Podemos utilizar outros pinos para enviar dados e


coletar dados pelo modulo RF?
Sim podemos o exemplo abaixo utilizará o pino 9 para envio de dados no Arduino TX e
o pino 9 também para a recepção do sinal no Arduino RX

Neste código os dados serão enviados via teclado. Se digitarmos no modulo TX o


caracter ‘1’ acenderemos o led do pino 13 do Arduino RX e se digitarmos ‘2’
apagaremos o led do pino 13 do Arduino RX

Código no modulo TX

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


void setup()
{
Serial.begin(9600); //Ativa Serial Monitor
Serial.println("Ativado"); // avisa que esta ok
vw_set_ptt_inverted(true); //
vw_set_tx_pin(9); // porta que vamos usar
vw_setup(2000); // bits para comunicação
}

marisac@pucsp.br ou marisacavalcante@uol.com.br 9
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

void loop()
{
if ( Serial.available() > 0) // verifica se foi digitado algo
{
char message = Serial.read(); // le o que foi digitado
vw_send((uint8_t *)&message, strlen(&message)); // envia toda a mensage e
converte para str
vw_wait_tx(); // bloqueia TX até ser enviado todas as letras envia uma por uma
}
}

Codigo para o módulo RX

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

int LED = 8;
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(9); // pino para recepção 9
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen))
{
digitalWrite(13,true);
if (buf[0] == '1')
{
digitalWrite(13,true);
}
else if ( buf[0] == '2')
{
digitalWrite(13,false);
}
Serial.print(buf[0]);
}
digitalWrite(13,false);
}

marisac@pucsp.br ou marisacavalcante@uol.com.br 10
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

Acendendo Leds utilizando o teclado do Arduino TX

Código no Arduino RX: Circuito led no pino 8 e pino 9 recebe o sinal do Arduino TX
---------------------------------------------------------------------------------------------------------

#include <VirtualWire.h> // inclui a biblioteca para comunicação

int LED = 8; // declara variável LED, pino 8 conectado o led


void setup()
{
Serial.begin(9600); // comunicação com a serial
Serial.println("setup");
pinMode(8,OUTPUT); // declara os pinos de saída 8 e 13
pinMode(13,OUTPUT); declara os pinos de saída 8 e 13
vw_set_ptt_inverted(true);
vw_setup(2000); // taxa de comunicação do modulo RF
vw_set_rx_pin(9); // pino para recepção 9
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen))
{
digitalWrite(13,true); / / estiver recebendo a informação led 13 acende
if (buf[0] == '1')
{
digitalWrite(LED,true); // quando digitar 1 no monitor serial do Arduino TX acende
//o Led do pino 8 por 100 ms
delay (100);
}
else if ( buf[0] == '2')
{
digitalWrite(LED,false); // quando digitar 1 no monitor serial do Arduino TX apaga
//o Led do pino 8 por 100 ms

delay(100);
}
Serial.print(buf[0]);
}
digitalWrite(13,false);
}

Código para o Arduino TX : pino 9 transfere informação para o RX

marisac@pucsp.br ou marisacavalcante@uol.com.br 11
http://labduino.blogspot.com.br/
Tutoriais - Módulo RF

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


void setup()
{
Serial.begin(9600); //Ativa Serial Monitor
Serial.println("Ativado"); // avisa que esta ok
vw_set_ptt_inverted(true); //
vw_set_tx_pin(9); // porta que vamos usar
vw_setup(2000); // bits para comunicação

}
void loop()
{
if ( Serial.available() > 0) // verifica se foi digitado algo
{
char message = Serial.read(); // le o que foi digitado
vw_send((uint8_t *)&message, strlen(&message)); // envia toda a mensagem e
//converte para str
vw_wait_tx(); // bloqueia TX até ser enviado todas as letras envia uma por uma
}
}

Algumas informações sobre os comandos

Em setup devemos ter sempre:


vw_set_tx_pin ( numero do pino) . Caracteriza o setup do pino que vai enviar a
mensagem. Default é o pino 12

vw_set_rx_pin (numero do pino) Caracteriza o pino que vai receber a mensagem .


default é o pino 11

vw_setup(2000) Caracteriza a taxa de velocidade de transferência de dados atraves do


RF

vw_rx_start(); Para começar a receber informações

No void loop
Em TX:
vw_send(uint8_t* buf, uint8_t len);

Enviar uma mensagem, com o comprimento especificado. Retorna quase


imediatamente, e a mensagem será enviada no tempo certo por interrupções. Retorna
true se a mensagem foi aceita para a transmissão. Retorna false se a mensagem é
muito longo.

Em RX
vw_get_message(buf, &buflen)

marisac@pucsp.br ou marisacavalcante@uol.com.br 12

Você também pode gostar