O módulo RF consiste de um transmissor e receptor de RF de 433 MHz. Estes são módulos do tipo ASK (Amplitude shift keying) ou OOK (Of Hook Keying) de RF. Enquanto transmite o zero lógico, o transmissor suprime totalmente a freqüência portadora e, portanto, consome apenas pouca energia na operação da bateria. Quando a lógica um é transmitida o transmissor está ligado, e a freqüência portadora está cheia e, portanto, haverá uma fonte de alimentação alta que está na faixa de cerca de 4,5mA com uma fonte de alimentação de 3V.
O transmissor e o receptor são necessários para fazer a interface com microcontroladores para a transferência de dados. Os dados são enviados em série do transmissor e são recebidos por um receptor sintonizado. O transmissor de RF recebe dados em série de um microcontrolador e os transmite ao receptor através de uma antena conectada ao 4º pino do transmissor. O receptor recebe os dados através de uma antena e dá os dados ao microcontrolador conectado a ele.
Estes módulos de RF operam a uma freqüência específica de 433MHz. Os sinais de RF podem viajar entre o transmissor e o receptor, mesmo quando há uma obstrução. Estes módulos são usados para comunicação de curto alcance, baixo orçamento, com base no simplex. O baixo consumo de energia torna-os ideais para implementações baseadas em baterias. É utilizado em várias áreas, como controles de iluminação remota, RFID de longo alcance, sistemas de alarme e segurança sem fio, etc. A comunicação RF é usada em comunicação móvel e pode ter comunicação de raiva longa e isso é o que as torna adequadas para a construção de aplicações baseadas em tecnologia de comunicação sem fio. Então aqui estamos começando com um artigo introdutório sobre módulos de RF e como os módulos de RF podem ser usados com o Arduino para enviar e receber dados.
433 MHz RF Transmitter Module
Este pequeno módulo é o transmissor de RF. É muito simples. O ressonador SAW que está sintonizado para operação em 433,xx MHz é o coração do módulo. Há um transistor de comutação e alguns componentes passivos sobre ele.
Quando uma lógica ALTA é dada como entrada DATA, o oscilador está ligado e produz uma onda portadora de saída RF constante a 433,xx MHz e quando a entrada DATA é lógica BAIXA, o oscilador está desligado, portanto nenhuma portadora é produzida. Esta técnica é chamada Chave de Mudança de Amplitude (ASK).
Especificações
- Tensão de trabalho: 3V – 12V
- Corrente de trabalho: max Menos de 40mA, e min 9mA
- Modo de Ressonância: (SAW)
- Modo de modulação: ASK
- Frequência de trabalho: 433.92MHz
- Potência de transmissão: 25mW
- Erro de frequência: +150kHz (máx)
- Velocidade: menos de 10Kbps
- Gama de transmissão: 90m (em espaço aberto)
>
Módulo Receptor de RF de 433 MHz
>
>
Este é o módulo receptor de RF. Apesar de parecer complexo, é tão simples quanto o módulo transmissor. Ele consiste de um circuito sintonizador de RF, Amperes OP e um PLL. Um par de OP-Amps são usados para amplificar a onda portadora recebida do transmissor. O sinal amplificado é então alimentado a uma PLL (Phase Lock Loop) que permite ao decodificador “travar” em um fluxo de bits digitais que dá melhor saída codificada e imunidade a ruídos.
Especificações
- Tensão de trabalho: 5.0VDC +0.5V
- Corrente de trabalho:≤5.5mA max
- Modo de modulação: OOK/ASK
- Frequência de trabalho: 433.92MHz
- Largura de banda: 2MHz
- Sensibilidade: excede -100dBm (50Ω)
>
Componentes requeridos
- Arduino Nano (2)
- RF 433MHz Módulo transmissor
- RF 433MHz Módulo receptor
- Potenciômetro
- LED (5)
- Fios de conexão
Diagrama de Circuit
O diagrama de circuito do transmissor de RF usando Arduino Nano é dado abaixo. Aqui um potenciômetro é conectado para variar os valores a serem enviados ao receptor usando o transmissor de RF.
Below are the Pin connections details between RF transmitter and Arduino
- D12 pin of Arduino – DATA pin of RF transmitter
- VCC of Arduino – VCC of RF transmitter
- GND of Arduino – GND of RF transmitter
- GND do Arduino – primeiro pino do potenciómetro
- A2 pino do Arduino – segundo pino do potenciómetro
- VCC do Arduino – terceiro pino do potenciómetro
O diagrama do circuito do receptor de RF usando o Arduino Nano é mostrado abaixo. Aqui temos uma série de LEDs. Os LEDs são deslocados com base nos valores potenciométricos recebidos pelo receptor.
Below são os detalhes das ligações dos pinos entre o receptor de RF e o Arduino
- D11 pino do Arduino – Pino DATA do receptor de RF.
- VCC do Arduino – VCC do receptor de RF.
- GND do Arduino – GND do receptor de RF.
- Conexão dos LEDs positivos aos pinos digitais D2, D3, D4, D5, e D6
- Conexão dos LEDs negativos à terra.
Explicação da codificação
Código Arduino completo tanto para o lado do transmissor como para o lado do receptor de RF são dados no final deste tutorial, aqui estamos explicando o programa completo para entender o funcionamento do projeto. Mas antes de começar com o código primeiro temos que instalar uma biblioteca no Arduino IDE.
Aqui estamos usando a biblioteca virtual de fios. Baixe a biblioteca virtual wire no link abaixo
https://www.resistorpark.com/content/Arduino_Libraries/Arduino_Wireless_Communication_Libraries/VirtualWire.zip
VirtualWire é uma biblioteca Arduino que fornece as funcionalidades para enviar mensagens curtas, sem endereçamento, reconhecimento ou retransmissão. As mensagens são enviadas como um pouco como UDP sobre wireless usando ASK (amplitude shift keying). Esta biblioteca suporta um número de transmissores e receptores de rádio baratos.
Para adicionar a biblioteca no Arduino IDE vá para Sketch>>Include library>>Adicionar biblioteca .ZIP e depois carregue a biblioteca que descarregou a partir do link acima.
Após carregar o programa abra o monitor serial em ambos os lados e você verá as saídas como mostrado abaixo.
Saída na seção do transmissor de RF mostra os valores do potenciômetro.
E a saída no receptor mostra o valor do sensor recebido. Os LEDs são deslocados de acordo com o intervalo dos valores do sensor. Aqui nós demos um intervalo de 200 para cada LED.
Então é assim que o Arduino pode ser usado na comunicação baseada em RF, verifique mais projetos de Ioduza baseados em Arduino aqui.
Código para a seção Transmissor RF
#incluir <VirtualWire.h>
const int SensorPin = A2; // pino potenciômetro
int SensorData;
char SensorCharMsg;
configuraçãovoid()
{
pinMode(SensorPin,INPUT);
// para depuração
Serial.begin(9600);
// VirtualWire setup
vw_setup(2000); // Bits per sec
}
void loop()
{
// Ler e armazenar dados do Sensor 1
SensorData = analogRead(SensorPin);
// Converter dados inteiros para Char array diretamente
itoa(SensorData,SensorCharMsg,10);
// DEBUG
Serial.print(“Sensor Integer: “);
Série.print(SensorData); // imprimir os dados do sensor
Serial.print(” Sensor CharMsg: “);
Serial.print(SensorCharMsg); // imprimir a matriz de caracteres
Serial.println(” “);
delay(100);
/ END DEBUG
vw_send((uint8_t *)SensorCharMsg, strlen(SensorCharMsg)); // envie a mensagem
vw_wait_tx(); // espere até que toda a mensagem desapareça
delay(200);
} // Laço vazio FIM
Código para seção Receptor RF
#incluir <VirtualWire.h>
int SensorData; // Sensores
char SensorCharMsg; // Recipiente de transmissão de RF
const int led1 = 2;
const int led2 = 3;
const int led3 = 4;
const int led4 = 5;
const int led5 = 6;
configuração de ovalização()
{
Série.begin(9600);
pinMode(led1, INPUT);
pinMode(led2, INPUT);
pinMode(led3, INPUT);
pinMode(led4, INPUT);
pinMode(led5, INPUT);
// VirtualWire
// Inicializar o IO e ISR
// Necessário para DR3100
vw_set_ptt_inverted(true);
// Bits por segundo
vw_setup(2000);
// Iniciar o receptor PLL em execução
vw_rx_start();
} // Configuração do FIM vazio
loopvoid()
{
uint8_t buf;
uint8_t buflen = VW_MAX_MESSAGE_LEN;
/ Non-blocking
if (vw_get_message(buf, &buflen))
{
int i;
// Mensagem com um bom checksum recebido, despeje-o.
for (i = 0; i < buflen; i++)
{
// Preencher SensorCharMsg Charsg com a matriz correspondente
// chars do buffer.
SensorCharMsg = char(buf);
>}
// Nulo terminar a matriz de caracteres
// Isto precisa ser feito, caso contrário ocorrerão problemas
// quando as mensagens recebidas tiverem menos dígitos que os
// um antes.
SensorCharMsg = ‘\0’;
// Converter a matriz de caracteres Sensor1CharMsg para inteiro
SensorData = atoi(SensorCharMsg);
// DEBUG
Serial.print(“Sensor “);
Serial.println(SensorData);
// END DEBUG
if (SensorData <= 200)
{
digitalWrite(led1, HIGH);
else
digitalWrite(led1, LOW);
if ( SensorData > 200 && SensorData <= 400)
{
digitalWrite(led2, HIGH);
else
digitalWrite(led2, LOW);
if ( SensorData > 400 && SensorData <= 600)
{
digitalWrite(led3, HIGH);
else
digitalWrite(led3, LOW);
if ( SensorData > 600 && SensorData <= 800)
{
digitalWrite(led4, HIGH);
>
else
digitalWrite(led4, LOW);
if ( SensorData > 800 && SensorData <= 1023)
{
digitalWrite(led5, HIGH);
>else
digitalWrite(led5, LOW);