[Link]
br/
Tutoriais - Módulo RF
Modulo RF tutorial
[Link]
433mhz-_JM (acesso em 17/09/2012)
[Link] (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 ([Link]
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@[Link] ou marisacavalcante@[Link] 1
[Link]
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@[Link] ou marisacavalcante@[Link] 2
[Link]
Tutoriais - Módulo RF
1º passo: Para usar o modulo RF devemos baixar a biblioteca VirtualWire em
diferentes versões disponivel neste link [Link]
Para a versao IDE do Arduino 1.0.1 recomenda-se usar a versao 1.9 disponiel para
download em [Link]
Para acesso a documentação desta biblioteca clique aqui:
Documentação da biblioteca:
[Link]
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@[Link] ou marisacavalcante@[Link] 3
[Link]
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@[Link] ou marisacavalcante@[Link] 4
[Link]
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@[Link] ou marisacavalcante@[Link] 5
[Link]
Tutoriais - Módulo RF
[Link]
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 -> [Link](buf[i], HEX); para -> [Link](buf[i]);
Pronto já conseguimos estabelecer a comunicação entre os dois Arduinos,
através de RF.
marisac@[Link] ou marisacavalcante@[Link] 6
[Link]
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@[Link] ou marisacavalcante@[Link] 7
[Link]
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;
[Link](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
{
[Link]("A0=");
int A0 = buf[0];
[Link](A0);
[Link]();
[Link]("A1=");
int A1 = buf[1];
[Link](A1);
[Link]();
[Link]("A2=");
int A2 = buf[2];
[Link](A2);
[Link]();
[Link]("A3=");
int A3 = buf[3];
marisac@[Link] ou marisacavalcante@[Link] 8
[Link]
Tutoriais - Módulo RF
[Link](A3);
[Link]();
[Link]("A4=");
int A4 = buf[4];
[Link](A4);
[Link]();
// 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)
{
//[Link]("BATT. LOW (6,7V)");
//[Link]();
}
// Batt. test end
[Link]();
}
}
// 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()
{
[Link](9600); //Ativa Serial Monitor
[Link]("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@[Link] ou marisacavalcante@[Link] 9
[Link]
Tutoriais - Módulo RF
void loop()
{
if ( [Link]() > 0) // verifica se foi digitado algo
{
char message = [Link](); // 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()
{
[Link](9600);
[Link]("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);
}
[Link](buf[0]);
}
digitalWrite(13,false);
}
marisac@[Link] ou marisacavalcante@[Link] 10
[Link]
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()
{
[Link](9600); // comunicação com a serial
[Link]("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);
}
[Link](buf[0]);
}
digitalWrite(13,false);
}
Código para o Arduino TX : pino 9 transfere informação para o RX
marisac@[Link] ou marisacavalcante@[Link] 11
[Link]
Tutoriais - Módulo RF
#include <VirtualWire.h> // lib para RF
void setup()
{
[Link](9600); //Ativa Serial Monitor
[Link]("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 ( [Link]() > 0) // verifica se foi digitado algo
{
char message = [Link](); // 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@[Link] ou marisacavalcante@[Link] 12