Quer adicionar recursos sem fio ao seu próximo projeto Arduino, por menos do que o preço de uma xícara de café? Bem, então os Módulos Transmissor e Receptor de RF 433MHz são apenas para você! Eles podem ser obtidos online por menos de dois dólares por um par, tornando-os uma das opções mais baratas de comunicação de dados que você pode obter. E o melhor de tudo, estes módulos são super pequenos, permitindo-lhe incorporar uma interface sem fio em quase qualquer projeto.

Visão Geral do Hardware

Vejamos mais de perto os Módulos Transmissor e Receptor de RF 433MHz.

Este pequeno módulo é um transmissor entre dois. É realmente simples como ele parece. O coração do módulo é o ressonador SAW que está sintonizado para operação em 433,xx MHz. Há um transistor de comutação e alguns componentes passivos, é isso.

Quando uma lógica ALTA é aplicada à entrada DATA, o oscilador funciona produzindo uma onda portadora de saída RF constante a 433,xx MHz e quando a entrada DATA é levada à lógica BAIXA, o oscilador pára. Esta técnica é conhecida como Amplitude Shift Keying, que discutiremos em detalhe brevemente.

Este é um módulo receptor. Embora pareça complexo, é tão simples como o módulo transmissor. Ele consiste de um circuito sintonizado por RF e um par de amplificadores OP para amplificar a onda portadora recebida do transmissor. O sinal amplificado é ainda alimentado a um PLL (Phase Lock Loop) que permite ao decodificador “travar” em um fluxo de bits digitais que dá melhor saída decodificada e imunidade a ruídos.

ASK – Amplitude Shift Keying

Como discutido acima, para enviar os dados digitais via rádio, estes módulos usam uma técnica chamada Amplitude Shift Keying ou ASK. No Amplitude Shift Keying a amplitude (ou seja, o nível) da onda portadora (no nosso caso é um sinal de 433MHz) é alterada em resposta ao sinal de entrada de dados.

Esta é muito semelhante à técnica analógica de modulação de amplitude com a qual você pode estar familiarizado se estiver familiarizado com rádio AM. É às vezes chamado de teclado binário de mudança de amplitude porque existem apenas dois níveis com os quais estamos preocupados. Você pode pensar nisso como uma chave ON/OFF.

  • Para Digital 1 – Isto conduz a portadora com força total.
  • Para Digital 0 – Isto corta a portadora completamente.

Esta é a aparência da modulação de Amplitude:

A tecla de Amplitude Shift tem a vantagem de ser muito simples de implementar. É bastante simples de desenhar o circuito descodificador. Também o ASK precisa de menos largura de banda do que outras técnicas de modulação como o FSK (Frequency Shift Keying). Esta é uma das razões para ser barata.

A desvantagem, entretanto, é que o ASK é suscetível a interferência de outros dispositivos de rádio e ruído de fundo. Mas desde que você mantenha sua transmissão de dados a uma velocidade relativamente lenta ela pode funcionar de forma confiável na maioria dos ambientes.

433MHz RF Transmitter & Pinout do Receptor

Deixamos uma olhada no pinout de 433MHz RF Transmitter and Receiver Modules.

Pino DATA aceita dados digitais a serem transmitidos.

VCC fornece energia para o transmissor. Esta pode ser qualquer tensão DC positiva entre 3.5V a 12V. Note que a saída de RF é proporcional à tensão de alimentação, ou seja, quanto maior a tensão, maior será o alcance.

GND é um pino de terra.

Antena é um pino para antena externa. Como discutido anteriormente, você vai querer soldar uma peça de fio sólido de 17,3 cm a este pino para o alcance melhorado.

VCC fornece energia para o receptor. Ao contrário do transmissor, a tensão de alimentação do receptor precisa ser de 5V.

DATA pinos de saída dos dados digitais recebidos. Os dois pinos centrais são amarrados internamente, assim você pode usar qualquer um para saída de dados.

GND é um pino de terra.

Antena é um pino para antena externa que muitas vezes não é marcada. É a almofada na parte inferior esquerda do módulo, mesmo ao lado da pequena bobina. Novamente, você vai querer soldar uma peça de fio sólido de 17,3 cm a este pino para o alcance melhorado.

Fiação – Conectando Transmissor e Receptor RF 433MHz ao Arduino UNO

Antena é um pino para antena externa que é frequentemente sem marca!

Como vamos enviar dados entre duas placas Arduino, é claro que vamos precisar de duas placas Arduino, duas placas de pão e um par de fios de jumper.

A cablagem para o transmissor é bastante simples. Tem apenas três ligações. Ligue o pino VCC ao pino de 5V e o GND à terra no Arduino. O pino Data-In deve ser conectado ao pino digital #12 do Arduino. Você deve tentar usar o pino 12 como por defeito a biblioteca que vamos usar no nosso esboço usa este pino para entrada de dados.

A ilustração seguinte mostra a cablagem.

Após ter o transmissor ligado você pode passar para o receptor. A fiação para o receptor é tão fácil quanto a do transmissor.

Apenas três conexões a serem feitas. Ligue o pino VCC ao pino de 5V e o GND à terra no Arduino. Qualquer dos dois pinos centrais de Data-Out deve ser conectado ao pino digital #11 no Arduino.

Esta é a aparência da fiação para o receptor.

Agora que tanto o transmissor como o receptor estejam conectados, precisaremos escrever algum código e enviá-lo para as respectivas placas do Arduino. Como você provavelmente só tem um PC, vamos começar com o transmissor. Uma vez que o código tenha sido carregado lá, nós passaremos para o receptor. O Arduino ao qual o transmissor está ligado pode então ser alimentado usando uma fonte de alimentação ou bateria.

RadioHead Library – a Swiss Army Knife for wireless modules

Antes de começarmos a codificar, existe uma biblioteca chamada RadioHead que vamos precisar de instalar na nossa IDE Arduino que vai tornar a escrita do código muito mais simples.

RadioHead é uma biblioteca que permite a simples transferência de dados entre as placas Arduino. É tão versátil que pode ser usada para conduzir todo o tipo de dispositivos de comunicação via rádio, incluindo os nossos módulos 433MHz.

O que a biblioteca RadioHead faz é pegar nos nossos dados, encapsulá-los num pacote de dados que inclui um CRC (Cyclic Redundancy Check) e depois enviá-los com o preâmbulo e o cabeçalho necessários para outro Arduino. Se os dados forem recebidos corretamente, o Arduino receptor é informado que há dados disponíveis e procede à decodificação e ação dos mesmos.

O Pacote RadioHead é composto da seguinte forma: Um fluxo de 36 bits de pares de bits “1” e “0”, chamado “Preâmbulo de Treinamento”, é enviado no início de cada transmissão. Estes bits são necessários para que o receptor ajuste o seu ganho antes de obter os dados reais. Em seguida, um “Start Symbol” de 12 bits e então os dados reais (carga útil) são adicionados.

A Frame Check Sequence ou CRC é adicionado no final do pacote que é recalculado pelo RadioHead no final do receptor e se a verificação CRC estiver correta, o dispositivo receptor é alertado. Se a verificação CRC falhar, o pacote é descartado.

O pacote inteiro se parece com isto:

Você pode baixar a biblioteca, visitando o airspayce.com ou, basta clicar neste botão para baixar o zip:

Para instalá-lo, abra o Arduino IDE, vá para Sketch > Incluir biblioteca > Adicionar biblioteca .ZIP, e então selecione o arquivo RadioHead que você acabou de baixar. Se você precisar de mais detalhes sobre como instalar uma biblioteca, visite este tutorial Instalando uma Biblioteca Arduino.

Arduino Code – Para Transmissor RF 433MHz

Em nosso experimento, nós apenas enviaremos uma simples mensagem de texto do transmissor para o receptor. Será útil para entender como usar os módulos e pode servir como base para experimentos e projetos mais práticos.

Aqui está o esboço que estaremos usando para o nosso transmissor:

// Include RadioHead Amplitude Shift Keying Library#include <RH_ASK.h>// Include dependant SPI Library #include <SPI.h> // Create Amplitude Shift Keying ObjectRH_ASK rf_driver; void setup(){ // Initialize ASK Object rf_driver.init();} void loop(){ const char *msg = "Hello World"; rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); delay(1000);}

É um esboço bem curto, mas é tudo que você precisa para ter um sinal transmitido.

O esboço começa com a inclusão da biblioteca RadioHead ASK. Também precisamos incluir a biblioteca Arduino SPI, pois a biblioteca RadioHead depende dela.

#include <RH_ASK.h>#include <SPI.h>

Próximo, precisamos criar um objeto ASK para acessar funções especiais relacionadas à biblioteca RadioHead ASK.

// Create Amplitude Shift Keying ObjectRH_ASK rf_driver;

Na função de configuração, precisamos inicializar o objeto ASK.

// Initialize ASK Objectrf_driver.init();

>Na função de loop, começamos preparando uma mensagem. É uma simples string de texto e armazenada em um ponteiro de caracteres chamado msg. Tenha em mente que, sua mensagem pode ser qualquer coisa, mas não deve exceder 27 caracteres para um melhor desempenho. E não se esqueça de contar o número de caracteres nela, pois você precisará dessa contagem no código do receptor. No nosso caso, temos 11 caracteres.

// Preparing a messageconst char *msg = "Hello World";

A mensagem é então transmitida usando uma função send(). Ela tem dois parâmetros: o primeiro é o array de dados e o segundo é o número de bytes (comprimento dos dados) a serem enviados. A função send() é normalmente seguida pela função waitPacketSent() que espera até que qualquer pacote de transmissão anterior seja terminado de ser transmitido. Depois disso o sketch espera por um segundo para dar ao nosso receptor tempo para receber tudo.

rf_driver.send((uint8_t *)msg, strlen(msg));rf_driver.waitPacketSent();delay(1000);

Código do Arduino – Para receptor RF 433MHz

Conecte o receptor Arduino ao computador e carregue o seguinte código:

// Include RadioHead Amplitude Shift Keying Library#include <RH_ASK.h>// Include dependant SPI Library #include <SPI.h> // Create Amplitude Shift Keying ObjectRH_ASK rf_driver; void setup(){ // Initialize ASK Object rf_driver.init(); // Setup Serial Monitor Serial.begin(9600);} void loop(){ // Set buffer to size of expected message uint8_t buf; uint8_t buflen = sizeof(buf); // Check if received packet is correct size if (rf_driver.recv(buf, &buflen)) { // Message received with valid checksum Serial.print("Message Received: "); Serial.println((char*)buf); }}

Apenas como o cade do transmissor, o código do receptor começa carregando ambas as bibliotecas RadioHead e SPI e criando um objeto ASK.

#include <RH_ASK.h>#include <SPI.h> RH_ASK rf_driver;

Na função de configuração: inicializamos o objeto ASK e também configuramos o monitor serial, pois é assim que vamos visualizar a mensagem recebida.

rf_driver.init();Serial.begin(9600);

Na função de loop: criamos um buffer de tamanho igual ao da mensagem transmitida. No nosso caso, é o 11, lembra-se? Você precisará ajustar isso para combinar com o tamanho da sua mensagem. Certifique-se de incluir quaisquer espaços e pontuação, pois todos eles contam como caracteres.

uint8_t buf;uint8_t buflen = sizeof(buf);

Próximo, nós chamamos uma função recv(). Isto liga o receptor se ainda não estiver ligado. Se houver uma mensagem válida disponível, ele copia a mensagem para o seu primeiro buffer de parâmetros e retorna verdadeiro ou retorna falso. Se a função retorna true, o sketch entra no comando if e imprime a mensagem recebida no monitor serial.

if (rf_driver.recv(buf, &buflen)){ Serial.print("Message Received: "); Serial.println((char*)buf); }

Então voltamos ao início do laço e fazemos tudo de novo.

Depois de carregar o sketch abra seu monitor serial. Se tudo estiver OK você deve ver sua mensagem.

433MHz Saída do Módulo RF sem fio no Monitor Serial – Receptor

Melhorando o alcance dos módulos RF de 433MHz

A antena que você usa tanto para o transmissor como para o receptor pode realmente afetar o alcance que você será capaz de obter com estes módulos RF. Na verdade, sem uma antena você teria sorte de se comunicar a uma distância superior a um metro.

Com um projeto de antena adequado, você será capaz de se comunicar a uma distância de 50 metros. Claro que isso é ao ar livre em um espaço aberto. Seu alcance dentro de casa, especialmente através de paredes, será ligeiramente enfraquecido.

A antena não precisa ser complicada. Uma simples peça de fio de um só núcleo pode fazer uma excelente antena tanto para o transmissor como para o receptor. O diâmetro da antena quase não tem qualquer importância, desde que o comprimento da antena seja mantido.

A antena mais eficaz tem o mesmo comprimento que o comprimento da onda para a qual é utilizada. Para fins práticos, a metade ou um quarto desse comprimento será suficiente.

O comprimento de onda de uma frequência é calculado como:

Comprimento de onda da frequência = Velocidade da transmissão (v)
> Frequência de transmissão (f)

No ar, a velocidade de transmissão é igual à velocidade da luz, que é de 299.792.458 m/s para ser preciso. Assim, para a banda de 433 MHz o comprimento de onda é:

Comprimento de onda da frequência = 299.792.458 m/s
433.000.000 Hz
> == 0.6924 metros
= 69,24 cm

Como a antena de onda cheia 69,24 cm é uma antena bastante longa, não é muito prática de usar. É por isso que vamos optar por uma antena de um quarto de onda que funciona até cerca de 17,3 cm ou 6,8 polegadas.

Apenas no caso de, se você estiver experimentando com outros transmissores de rádio que usam freqüências diferentes, você pode usar a mesma fórmula para calcular o comprimento da antena necessária. Muito fácil, Certo?

Even uma antena de 17,3 cm pode parecer inconveniente no seu minúsculo projeto Arduino. Mas NÃO se sinta tentado a enrolar a antena para torná-la mais compacta, pois isso terá um sério impacto no alcance. Uma antena reta é sempre melhor!

Deixe uma resposta

O seu endereço de email não será publicado.