Guia básico dos Módulos TX / RX – RF 433MHZ

Estes são os tópicos que iremos abordar neste Guia básico dos Módulos TX / RX – RF 433MHZ :

  • Introdução;
  • Pinagem dos Módulos TX / RX de 433 MHz;
  • Especificações dos Módulos TX / RX de 433 MHz;
  • Sobre as Antenas dos Módulos TX e RX;
  • Transmitir dados entre dois Arduinos.

Introdução

Este conjunto de módulos de transmissão(TX) e receção(RX) de RF de 433 MHz serve para o envio de dados digitais entre dois Arduinos (ou outro tipo de microcontrolador). A comunicação é unidirecional , isto é, os dados são enviados pelo transmissor e recebidos pelo recetor.

O tipo de modulação da portadora de radio-frequência é o ASK (amplitude shift keying) – modulação por chaveamento de amplitude. Isto é, quando existe o Bit 1  a portadora transmite o sinal de 433 MHz. Quando o Bit é zero, nenhum sinal é transmitido.

Estas são algumas aplicações para estes módulos RF de 433 MHz :

  • Transmissão de dados à curta distância;
  • Controle remoto;
  • Automação residencial;
  • Sistema de segurança – Alarme;
  • Registro remoto de dados (Log).

Pinagem dos Módulos TX / RX de 433 MHz :

Módulo transmissor 433 MHz e Módulo Recetor 433 MHz

Modulo Transmissor – pinagem:

  1. Data – pino de transmissão de dados;
  2. VCC – pino de alimentação: 3 a 12 V;
  3. GND – terra.

Módulo Recetor – pinagem:

  1. VCC – pino de alimentação: 5V;
  2. Data – pino de recepção de dados;
  3. Data – idem – conectado ao pino 2;
  4. GND – terra.

Especificações dos Módulos TX / RX de 433 MHz :

Módulo Transmissor 433 MHz (FS1000A) :

  • Tensão de operação:  3 a 12 V;
  • Frequência de operação: 433,92 MHz;
  • Corrente de operação: 20 a 28 mA;
  • Potencia de saída:  10mW;
  • Taxa de transferência < 4Kbps;
  • Alcance da transmissão < 100 m (com antena, sem obstáculos);
  • Antena externa: fio com 17,3 cm.

Circuito do Transmissor 433 MHz

Módulo Recetor 433 MHz (XY-MK-5V) :

  • Tensão de operação:  5 V (somente);
  • Frequência de operação: 433,92 MHz;
  • Corrente de operação: 4 mA;
  • Sensibilidade de receção: -105DB;
  • Antena externa: fio com 17,3 cm.

Circuito do Recetor 433 MHz

Sobre as Antenas dos Módulos TX e RX :

Para um perfeito funcionamento dos módulos de RF 433 MHz, é necessário a instalação das antenas tanto no transmissor quanto no recetor.  Sabendo-se que a frequência da portadora é de 433,92 MHz e a velocidade da onda electromagnética no espaço é de 3 x 108 m/s , o comprimento de onda é :

λ = v/f = 300.000.000 / 433.920.000 = 0,69 metros

Usa-se uma antena com 1/4 do comprimento de onda :

D = 0,69 m / 4  = 17,28 cm

Portanto solde fios rígidos de aproximadamente 17,3 cm nos locais indicados na foto dos módulos. Uma antena para o transmissor e outra para o recetor, ambas com o mesmo tamanho.

Transmitir dados entre dois Arduinos :

Os primeiros tutoriais que descobrimos na Internet sobre o uso destes módulos TX / RX RF 433 MHz , usavam a biblioteca VirtualWire. Mas no site do criador dessa Biblioteca, ele indica outra biblioteca mais recente – a RadioHead, que permite o uso de vários tipos de módulos de comunicação.  Apesar dela ser antiga também, a ADAFRUIT inseriu-a no GITHUB.

Biblioteca RadioHead / Adafruit

Para instalar a Biblioteca RadioHead:

  • Baixe o arquivo ZIP;
  • Na Arduino IDE, clique em    Sketch > Adicionar Biblioteca > Incluir Biblioteca.zip;
  • Adicione o arquivo zipado da biblioteca;
  • Feche e abra novamente a Arduino IDE, para ativar a biblioteca.

Bem interessante esta biblioteca, e funcionou perfeitamente nos nossos testes. Ela pode ser adaptada para a sua aplicação, para enviar dados entre dois Arduinos. Usando estes módulos com antenas, o alcance poderá ser expressivo. Lembrando que quanto maior a tensão de alimentação do módulo transmissor, maior será a potencia de RF a ser transmitida e portanto maior alcance (limite: 12V).

Como visto nas especificações do módulo TX, a taxa de transmissão de dados é relativamente baixa (< 4000 bps). Mas para aplicações como o envio de dados de um sensor, por exemplo, esta biblioteca poderá ser usada.

Montagem do Módulo Transmissor RF 433 MHz:

Módulo Transmissor RF 433 MHz

Obs : O Módulo Transmissor pode ser montado com um Arduino Uno ou Mega. A alimentação do módulo Transmissor poderá ser de até 12V, para um maior alcance. Conecte o pino D12 do Arduino no pino DATA do Módulo Transmissor.

Este é o Sketch que deve ser gravado no Arduino conectado ao Módulo Transmissor. Uma mensagem de teste será enviada a cada meio segundo.

/* Programa para envio de Mensagem
 Blog Electrofun http://www.electrofun.pt/blog/guia-basico-dos-modulos-tx-rx-rf-433mhz
 Arduino UNO - IDE 1.8.5 - Modulo TX RF 433 MHz
*/

#include <RHReliableDatagram.h>                   // biblioteca Radiohead reliableDatagram
#include <RH_ASK.h>                               // biblioteca Radiohead ASK
#include <SPI.h>                                  // biblioteca SPI

#define TX_ADDRESS 1                              // endereço do transmissor
#define RX_ADDRESS 2                              // endereço do recetor

RH_ASK driver;                                    // instância RH ASK
RHReliableDatagram gerente(driver, TX_ADDRESS);   // configura o gestor
uint8_t count = 1;                                // contador
uint8_t data[] = "Mensagem de teste";             // mensagem a ser enviada
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];              // buffer da mensagem

void setup() {
 Serial.begin(9600);                              // inicia a consola serial 9600 bps
 if (!gerente.init()) {                           // se não iniciar o gestor
   Serial.println("Falha ao iniciar");            // print na consola serial
 }
}

void loop() {
 Serial.print("Transmitindo mensagem n. ");                 // print na consola serial
 Serial.println(count);                                     // print do contador 
 if (!gerente.sendtoWait(data, sizeof(data), RX_ADDRESS)) { // se o gestor enviar mensagem
   count++;                                                 // desenvolve o contador 
 }
 delay(500);                                                // atraso 0,5 segundo
}

Montagem do Módulo Recetor RF 433 MHz:

Módulo Recetor 433 MHz

Obs : O Módulo Recetor pode ser montado com um Arduino Uno ou Mega. Conecte o pino D11 do Arduino no pino DATA do Módulo Recetor.

Este é o Sketch que deve ser gravado no Arduino conectado ao Módulo Recetor. Uma mensagem de teste será recebida a cada meio segundo. Durante os testes iniciais, coloque o transmissor perto do Recetor. Depois faça o teste distante um do outro. Obstáculos como paredes maciças ou portões metálicos poderão prejudicar a receção. Uma transmissão ao ar livre poderá ter um alcance bem maior.

/* Programa para receção de Mensagem
 Blog Electrofun http://www.electrofun.pt/blog/guia-basico-dos-modulos-tx-rx-rf-433mhz
 Arduino UNO - IDE 1.8.5 - Modulo RX RF 433 MHz
*/

#include <RHReliableDatagram.h>                  // biblioteca Radiohead reliableDatagram
#include <RH_ASK.h>                              // biblioteca Radiohead ASK
#include <SPI.h>                                 // biblioteca SPI

#define TX_ADDRESS 1                             // endereço do transmissor
#define RX_ADDRESS 2                             // endereço do recetor 

uint8_t count = 0;                               // contador
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];             // buffer da mensagem
uint8_t tamanho;                                 // tamanho da mensagem
uint8_t from;                                    // endereço de quem transmite

RH_ASK driver;                                   // instância RH ASK
RHReliableDatagram gerente(driver, RX_ADDRESS);  // configurar o gestor

void setup() {
 Serial.begin(9600);                             // inicia a consola serial 9600 bps
 if (!gerente.init()) {                          // se não iniciar o gestor
   Serial.println("Falha na inicialização");     // print na consola serial
 }
}

void loop() {
 if (gerente.available()) {                         // se o gestor estiver ligado
   tamanho = sizeof(buf);                           // determina o tamanho do buffer
   if (gerente.recvfromAck(buf, &tamanho, &from)) { // se o gestor receber mensagem
     Serial.print("Recebido de: 0x"); // print na consola serial
     Serial.print(from, HEX);    // print do endereço do transmissor em Hexadecimal
     Serial.print(": ");         // print na consola serial
     Serial.println((char*)buf); // print da mensagem recebida
   }
 }
}

Esta é a tela da Consola Serial da IDE do Arduino Recetor (9600 bps), com as mensagens recebidas: