Modulo RF Tutorial
Modulo RF Tutorial
Modulo RF Tutorial
br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 1
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 frequncia so sinais que se propagam em um cabo condutor e so
irradiados no ar atravs 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 eletromagnticas e converte-las em um sinal a ser conduzido atravs
de fios.
Fig.01: Espectro eletromagntico (http://fisicapaidegua.com/teoria/moderna/espectro.jpg)
A ANATEL (agencia Nacional de telecomunicao) regulariza o uso das faixas
de frequncia que podem ser utilizadas
O que ocorre na transmisso que temos uma onda portadora que carrega
a informao como se fosse um carro em uma estrada. Ou seja o sinal modulado.
Para este modulo o tipo de modulao Modulao por chaveamento de amplitude,
ou do ingls "Amplitude Shift Keying (ASK)", uma tcnica de modulao de sinais
digitais os quais so representados como variaes de amplitude da onda portadora.
Normalmente este tipo de modulao usada para regies de baixos rudos.
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 2
Transmissor (mdulo TX): Funo converter os sinais analogicos, digitais ou
sinais de audio em ondas eletromagneticas e transmiti-las no espao
Para o transmissor RF temos pinos para ligao em VCC , GND e um pno para a
transmisso de dados.
O default para a biblioteca bsica o pino 12.
Receptor (mdulo RX): Funo de receber as ondas eletromagneticas enviadas
pelo modulo TX e converter em sinais eletricos de corrente e tenso. Composto por
uma antena para receber os sinais enviados pelo modulo TX
Para o receptor RF temos pinos para ligao em VCC , GND pinos para a recepo de
dados.
O default para a biblioteca bsica o pino 11.
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 3
1 passo: Para usar o modulo RF devemos baixar a biblioteca VirtualWire em
diferentes verses 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 documentao desta biblioteca clique aqui:
Documentao 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 aps a instalao
2 passo: Testando a recepo do sinal
No Arduino conectado ao modulo TX (que enviar os dados) usamos o pino
12 para transmitir o sinal.
Pino 12
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 4
Para o receptor, utilize outro Arduino e conecte a recepo do sinal no pino 11
Pino 11
Em seguida clique em examples e em VirtualWire.
No modulo TX abra o exemplo transmitter a faa upload no Arduino
correspondente
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 5
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
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 6
http://www.asciitable.com/index/asciifull.gif
Para que voc obtenha a impresso da palavra hello, basta ir at a linha de
programao do modulo RX e alterar para:
De -> Serial.print(buf[i], HEX); para -> Serial.print(buf[i]);
Pronto j conseguimos estabelecer a comunicao entre os dois Arduinos,
atravs de RF.
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 7
Exemplo: Coletando dados das portas analgicas e
enviando via RF
Antes de iniciarmos o nosso exemplo temos que considerar um aspecto muito
importante: a transmisso de dados para estes mdulos se d atravs de portas
digitais. Assim um sinal analgico coletado por um Arduino dever ser convertido em
digital usando a converso PWM.
Cdigo para o modulo TX com transmisso de dados atravs 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 transmisso no modulo RF
}
// end setup
// main loop
void loop()
{
// Funo map para transformar a entrada de 10 bits das analgicas 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
----------------------------------------------------------------------------------------------------
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 8
Cdigo para o mdulo 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 transmisso 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];
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 9
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 atravs 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 tambm para a recepo do sinal no Arduino RX
Neste cdigo os dados sero 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
Cdigo 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 comunicao
}
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 10
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 mdulo 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 recepo 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);
}
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 11
Acendendo Leds utilizando o teclado do Arduino TX
Cdigo no Arduino RX: Circuito led no pino 8 e pino 9 recebe o sinal do Arduino TX
---------------------------------------------------------------------------------------------------------
#include <VirtualWire.h> // inclui a biblioteca para comunicao
int LED = 8; // declara varivel LED, pino 8 conectado o led
void setup()
{
Serial.begin(9600); // comunicao com a serial
Serial.println("setup");
pinMode(8,OUTPUT); // declara os pinos de sada 8 e 13
pinMode(13,OUTPUT); declara os pinos de sada 8 e 13
vw_set_ptt_inverted(true);
vw_setup(2000); // taxa de comunicao do modulo RF
vw_set_rx_pin(9); // pino para recepo 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 informao 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);
}
Cdigo para o Arduino TX : pino 9 transfere informao para o RX
http://labduino.blogspot.com.br/
Tutoriais - Mdulo RF
marisac@pucsp.br ou marisacavalcante@uol.com.br 12
#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 comunicao
}
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 informaes 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 transferncia de dados atraves do
RF
vw_rx_start(); Para comear a receber informaes
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 interrupes. Retorna
true se a mensagem foi aceita para a transmisso. Retorna false se a mensagem
muito longo.
Em RX
vw_get_message(buf, &buflen)