You are on page 1of 7

Comunicao entre dois Arduinos com auxlio do PC,

atravs de Rdio Frequncia, utilizando os mdulos de RF


433Mhz

H algum tempo venho pensando em desenvolver um link de comunicao serial entre o PC e o arduino com um
display digital. Algo onde fosse possvel escrever no PC e transmitir para o LCD. Conversando com meu filho sobre
esse assunto tivemos a idia de desenvolver um mdulo transmissor e um receptor sem fio, onde fosse possvel
escrever uma mensagem na tela do PC e esta mesnagem ser transmitida para o LCD remotamente. Pensamos em
algumas possibilidade e aps verificar o que tinhamos disponvel em nossa bancada resolvemos utilizar os Mdulo
RF Transmissor+receptor 433mhz, um LCD de fundo azul e letras brancas, uma placa protoshield, baterias para o
mdulo remoto, fios e conectores.

Comeamos pela montagem da base do LCD que deve ser compacta e por este motivo optamos por montar em uma
ProtoShield que so placas de circuito impresso normalmente projetadas para acoplar em cima do Arduino.e utilizar as
mesmas conexes.

A ligao do LCD ao arduino muito simples, utilizamos os pinos digitais 2, 3, 4, 5, 6, 7 que esto livres e no so
utilizados internamente pela VirtualWire, que falaremos mais adiante.

Na ProtoShield soldamos os pinos refrente as conexes do Arduino para que a placa se encaixe perfeitamente.
Tambm soldamos as barras de conexo que sero usadas para encaixar os pinos de 1 a 16 do LCD e todas as
ligaes referente aos pinos de contraste, backlight e alimentao do mdulo.

Em seguida construmos os conectores que ligam os componentes de RF a placa do Arduino. So necessrios


apenas quatro fios para ligar, que podem ser da seguinte forma: Um fio vermelho para os 5 ou 3,3 Volts dependendo
do mdulo transmissor. Um fio preto para o GND (negativo), um fio branco para a comunicao de dados e outro
para a antena que deve ter 30 centmetros.

No mdulo receptor comum ter mais do que quatro terminais, mas alguns so interligados internamente, voc deve
consultar o Datasheet do fabricante para ter certesa de como fazer as ligaes.
No Arduno que ser usado como transmissor utilizamos o pino digital 12 para a transmisso de dados, que o
default no VirtualWire.h. Os fios positivo e GND foram ligados nos pinos 3V3 e GND.

No mdulo receptor, utilizamos o pino digital 13 para a transmisso de dados, que o default no VirtualWire.h. Os
fios positivo e GND foram ligados nos pinos 5V e GND.

A ps a montagem da ProtoShield, soldagem da barra de terminais no mdulo LCD e os conectores dos mdulos RF,
encaixamos todos os mdulos e conclumos a parte referente ao hardware do nosso projeto.
O VirtualWire uma biblioteca que fornece recursos para enviar mensagens curtas. Pode ser utilizado
com diversos modelos de transmissores e receptores de rdio de baixo custo. Tem tudo o que
necessrio para transmitir e receber dados atravs dos mdulos Arduno. Pode ser baixado de vrios sites
conhecidos que falam sobre Arduino.

O cdigo fonte foi retirado de alguns exemplos e adaptado para exibir mensagens em uma tela de LCD.

O VirtualWirw.h deve ser descompactado para dentro da pasta /libraries

//TRANSMISSOR

#include <VirtualWire.h> // you must download and install the VirtualWire.h to your
hardware/libraries folder

char myCmd[16];
int inputSize=0;

void setup()
{
Serial.begin(9600);
// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for RF Link module
vw_setup(2000); // Bits per sec

vw_set_tx_pin(12); // Set the digital IO pin to use for transmit data. Defaults to 12.

}
void loop()
{
inputSize=0;
if (Serial.available() > 0) {
delay(300);
inputSize = Serial.available();
Serial.print("inputSize=");
Serial.println(inputSize);

for (int i = 0; i < inputSize; i++){


myCmd[i] = Serial.read();
}

// say what you got:


Serial.print("I received: ");
Serial.println(myCmd);

vw_send((uint8_t *)myCmd, strlen(myCmd));


vw_wait_tx(); // Wait for message to finish
delay(200);
}

//RECEPTOR LCD

#include <VirtualWire.h>

#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int i;
int cont;
int message_ok;

void setup()
{

Serial.begin(9600); // Debugging only


Serial.println("setup");

// set up the LCD's number of columns and rows:


lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Setup LCD");

// Initialise the IO and ISR


vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec

vw_rx_start(); // Start the receiver PLL running

lcd.clear();
lcd.print("VirtualWire ");

void loop()
{
// set the cursor to column 0, line 1 (note: line 1 is the second row, since
counting begins with 0)
lcd.setCursor(0, 1);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

//reception to stabilize
message_ok = 0;
cont = 0;
for (cont = 0; cont < 12 ; cont++)
{
delay(50); // wait for reception to stabilize

message_ok = vw_get_message(buf, &buflen); // check the reception


if (message_ok > 0){cont = 12;} //force the output

Serial.print(message_ok);
Serial.print(" ");

//if (vw_get_message(buf, &buflen)) // Non-blocking


if (message_ok > 0)
{
digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)


{
Serial.print(buf[i], HEX);
Serial.print(" ");

lcd.print(buf[i]);
}
Serial.println("");
digitalWrite(13, false);
}else
{ lcd.print("No message.....");}

You might also like