433MHz RF
Ligação dos módulos receptor e emissor de 433Mhz ao Arduino.
Especificações Transmissor.:
* Frequência.: 433 MHz
* Modulação.: ASK
* Sinal de Saída.: Alto = 1/2 Vcc; Baixo = 0,7v
* Tensão de Operação.: 3-12 v (Maior Tensão = Maior Potência de Transmissão)
* Alcance Aproximado.: 100m (Obedecendo as especificações da antena)
* Taxa de Dados.: 200 Bps min - 10k Bps máx
Especificações Receptor.:
* Frequência.: 433 MHz
* Modulação.: ASK
* Sinal de Entrada.: Alto = 0,7*Vcc; Baixo = 0,3*Vcc
* Tensão de Operação.: 3,5-5,5 v
* Alcance Aproximado.: 100m (Obedecendo as especificações da antena)
* Taxa de Dados.: 300 Bps min - 6k Bps máx
As ligações a estes módulos são bastante fáceis e basta seguir este esquema:
O esquema que fiz para este projecto é:
O código utilizado para testar foi este:
Emissor:
// 433Mhz transmitter by Jan Leander Jensen 2011
// TX pin12, PTT pin 10
// include library
#include <VirtualWire.h> // ver. 1.5
// end include library
//global variable
byte msg[7];
// end global variable
// setup
void setup() {
vw_set_ptt_inverted(true); // Required for PTT
vw_setup(2000); // Bits per sec
}
// end setup
// main loop
void loop()
{
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
Receptor:
// 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
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];
Serial.print(A3);
Serial.println();
Serial.print("A4=");
int A4 = buf[4];
Serial.print(A4);
Serial.println();
// Batt. test start
int A5 = buf[5];
if (A5 < 107)
{
Serial.print("BATT. LOW (6,7V)");
Serial.println();
}
// Batt. test end
Serial.println();
}
}
// end main loop
A biblioteca utilizada é a VirtualWire 1.3
Para testar o alcance dos módulos adaptei o projecto ao do LCD Nokia 5110, o código apenas foi alterado na recepção:
// 433Mhz receveiver2 by Jan Leander Jensen 2011
// RX pin 11
// include library
#include <VirtualWire.h> // ver. 1.5
// end include library
//LCD:
#include <PCD8544.h>
// A custom glyph (a smiley)...
static const byte glyph[] = { B00010000, B00110100, B00110000, B00110100, B00010000 };
static PCD8544 lcd;
int ledPin =8; // LED Backlight
char result[32];
//global variable
byte buf[7];
byte buflen;
// end global variable
// setup
void setup()
{
//LCD
pinMode(ledPin, OUTPUT); // sets the digital pin as output
digitalWrite(ledPin, HIGH); // sets the LED on
// PCD8544-compatible displays may have a different resolution...
lcd.begin(84, 48);
// Add the smiley to position "0" of the ASCII table...
lcd.createChar(0, glyph);
//Receptor:
buflen = 7;
Serial.begin(9600);
vw_setup(2000); // Bits per sec
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
{
lcd.setCursor(0, 0);
lcd.print("RECEBIDO:");
lcd.setCursor(0, 1);
lcd.print("A0= ");
int A0 = buf[0];
itoa (A0, result, 10);
lcd.setCursor(3, 2);
lcd.print(result);
lcd.setCursor(0, 4);
lcd.print("Arduino Rocks!");
lcd.setCursor(0, 5);
lcd.write(' ');
lcd.write(0); // write the smiley
delay(2000);
lcd.setCursor(0, 0);
lcd.print("RECEBIDO:");
lcd.setCursor(0, 1);
lcd.print("A1= ");
int A1 = buf[1];
itoa (A1, result, 10);
lcd.setCursor(3, 2);
lcd.print(result);
lcd.setCursor(0, 4);
lcd.print("Arduino Rocks!");
lcd.setCursor(0, 5);
lcd.write(' ');
lcd.write(0); // write the smiley
delay(2000);
lcd.setCursor(0, 0);
lcd.print("RECEBIDO:");
lcd.setCursor(0, 1);
lcd.print("A2= ");
int A2 = buf[2];
itoa (A2, result, 10);
lcd.setCursor(3, 2);
lcd.print(result);
lcd.setCursor(0, 4);
lcd.print("Arduino Rocks!");
lcd.setCursor(0, 5);
lcd.write(' ');
lcd.write(0); // write the smiley
delay(2000);
lcd.setCursor(0, 0);
lcd.print("RECEBIDO:");
lcd.setCursor(0, 1);
lcd.print("A3= ");
int A3 = buf[3];
itoa (A3, result, 10);
lcd.setCursor(3, 2);
lcd.print(result);
lcd.setCursor(0, 4);
lcd.print("Arduino Rocks!");
lcd.setCursor(0, 5);
lcd.write(' ');
lcd.write(0); // write the smiley
delay(2000);
lcd.setCursor(0, 0);
lcd.print("RECEBIDO:");
lcd.setCursor(0, 1);
lcd.print("A4= ");
int A4 = buf[4];
itoa (A4, result, 10);
lcd.setCursor(3, 2);
lcd.print(result);
lcd.setCursor(0, 4);
lcd.print("Arduino Rocks!");
lcd.setCursor(0, 5);
lcd.write(' ');
lcd.write(0); // write the smiley
delay(2000);
// Batt. test start
int A5 = buf[5];
if (A5 < 107)
{
// Serial.print("BATT. LOW (6,7V)");
//Serial.println();
}
// Batt. test end
//Serial.println();
}
}
// end main loop
Resultado: