Os módulos transmissor e receptor RF 433 MHz servem para projetos de comunicação sem fio com Arduino. Neste post, é mostrado como.
Eu já publiquei um post sobre como usar estes módulos, utilizando os circuitos integrados HT-12E e HT12D.
Veículo de controle remotoClique aqui
Os módulos RF 433MHz
Transmissor FS1000A
Transmite ondas eletromagnéticas na frequência de 433 MHz e utiliza modulação ASK (chaveamento por mudança de amplitude).


- DATA: entrada de dados.
- VCC: alimentação, que pode ser entre 3 e 12 V.
- GND: o terra.
- Terminal para instalar uma antena, para aumentar o alcance. Sem uma antena, o alcance será de apenas alguns metros.
Abaixo é o circuito do transmissor, que consiste em um oscilador ou um ressonador SAW (onda acústica de superfície); o transistor VT2 faz o chaveamento (ligar e desligar o oscilador) ao receber sinais na sua base.

Projeto da antena
A antena é apenas um fio condutor o mais reto possível. Como a frequência é de 433 MHz.
\lambda =\frac{c}{f}=\frac{3\cdot 10^{8}}{4,33\cdot 10^{8}}=0,69m
Onde \lambda é o comprimento de onda e c é a velocidade da luz, que é de 3\cdot 10^{8}m/s (metros por segundo). O tipo de antena é um fio cujo comprimento D é um 1/4 do comprimento de onda, portanto:
D=\frac{\lambda }{4}=\frac{0,69}{4}=17,28cm
Receptor XY-MK-5V
Este é mais complexo, recebe o sinal do transmissor pela antena, que precisa ser amplificado. Em seguida, demodula o sinal que vai para os pinos de saída.

- VCC: alimentação, deve receber apenas 5 V.
- Data: saída de dados.
- Idem.
- GND: terra.
- Terminal para soldar a antena.

Além da antena, o alcance também depende da alimentação no transmissor. Com uma boa antena, sem obstáculos e sem interferência, o alcance pode chegar até 300 metros. Porém, o alcance cai consideravelmente em um ambiente urbano ou interno. A taxa de transmissão pode chegar até 10 kbps (kilobits por segundo).
Testando os módulos RF 433 MHz
Antes de realizar o teste, é necessário instalar a biblioteca RadioHead.h, cujo link está aqui; baixei a versão mais recente.
Montando os circuitos

Código para testar o módulo.
#include <SPI.h> //biblioteca SPI
#include <RH_ASK.h> //biblioteca ASK da Radiohead
RH_ASK driver; //Um objeto para controlar um módulo transmissor
void setup() {
Serial.begin(9600);//Inicializa a tela Serial.
driver.init(); //Inicializa a comunicação.
/*if (!driver.init()){ //Outra forma de iniciar a comunicação.
Serial.println("init failed");
}*/
}
void loop() {
const char *msg = "Hello receiver!"; //Define a mensagem.
driver.send((uint8_t *)msg, strlen(msg));/*Envia a mensagem para o receptor.*/
driver.waitPacketSent();//Aguarda o envio da informação.
delay(400);
}
O esquemático e o código para testar o receptor, respectivamente.

#include <SPI.h> //biblioteca SPI
#include <RH_ASK.h> //biblioteca ASK da Radiohead
RH_ASK driver; //Um objeto para controlar o módulo RF.
void setup() {
Serial.begin(9600);
driver.init(); //Inicializa a comunicação.
}
void loop() {
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];//Recebe a mensagem do transmissor.
uint8_t buflen=sizeof(buf);//Determina o comprimento da mensagem recebida.
if(driver.recv(buf, &buflen)){//Indica se recebeu a mensagem.
Serial.print("Message received: ");
Serial.println((char*)buf);
}
}
Na tela serial do receptor, deve aparecer a mensagem: “Message received: Hello receiver!”

Controlando motores CC
Este é um projeto para controlar 2 motores CC no lado receptor, enviando comandos do lado transmissor com 3 botões.
Lista de componentes:
- Fios.
- Placa de circuito, usei uma já com furos.

- Suporte para 4 pilhas AA.
- 4 pilhas AA.
- Chave push button de 2 polos ou simples com 3 terminais.
- FS1000A.
- Placa Arduino Uno.
- 3 resistores de 3,3 kΩ.
- 3 botões push button.

O código abaixo.
#include <SPI.h> //biblioteca SPI
#include <RH_ASK.h> //biblioteca ASK da Radiohead
RH_ASK driver; //Um objeto para controlar um módulo transmissor
const int button1 = 7;
const int button2 = 5;
const int button3 = 6;
void setup() {
Serial.begin(9600);//Inicializa a tela Serial.
driver.init(); //Inicializa a comunicação.
/*if (!driver.init()){ //Outra forma de iniciar a comunicação.
Serial.println("init failed");
}*/
pinMode(button1,INPUT);
pinMode(button2,INPUT);
pinMode(button3,INPUT);
}
void loop() {
if(digitalRead(button3)==HIGH){
const char *msg = "MOTOR RIGHT FORWARD";//Define a mensagem.
driver.send((uint8_t *)msg, strlen(msg));//Envia a mensagem para o receptor.
driver.waitPacketSent();//Aguarda o envio da informação.
Serial.println("MOTOR RIGHT FORWARD");
}else{
const char *msg = "MOTOR RIGHT OFF";
driver.send((uint8_t *)msg, strlen(msg));/*Envia a mensagem para o receptor.*/
driver.waitPacketSent();//Aguarda o envio da informação.
Serial.println("MOTOR RIGHT OFF");
}
if(digitalRead(button2)==HIGH){
const char *msg = "MOTORS BACKWARD";
driver.send((uint8_t *)msg, strlen(msg));/*Envia a mensagem para o receptor.*/
driver.waitPacketSent();//Aguarda o envio da informação.
Serial.println("MOTORS BACKWARD");
}else{
const char *msg = "NO BACKWARD";
driver.send((uint8_t *)msg, strlen(msg));/*Envia a mensagem para o receptor.*/
driver.waitPacketSent();//Aguarda o envio da informação.
Serial.println("NO BACKWARD");
}
if(digitalRead(button1)==HIGH){
const char *msg = "MOTOR LEFT FORWARD";
driver.send((uint8_t *)msg, strlen(msg));/*Envia a mensagem para o receptor.*/
driver.waitPacketSent();//Aguarda o envio da informação.
Serial.println("MOTOR LEFT FORWARD");
}else{
const char *msg = "MOTOR LEFT OFF";
driver.send((uint8_t *)msg, strlen(msg));/*Envia a mensagem para o receptor.*/
driver.waitPacketSent();//Aguarda o envio da informação.
Serial.println("MOTOR LEFT OFF");
}
}
A lista completa dos componentes do receptor:
- Fios.
- Arduino Nano.
- Protoboard pequeno para colocar o Arduino e as conexões.
- 2 baterias de Li-ion com 2600 mAh e suporte para elas.
- Chave simples de 3 terminais.

- XY-MK-5V.
- Mini ponte H L298N.

- 2 motores CC.
O esquemático e o código do receptor, respectivamente.

#include <SPI.h> //biblioteca SPI
#include <RH_ASK.h> //biblioteca ASK da Radiohead
RH_ASK driver; //Um objeto para controlar um módulo RF.
int IN1=2;
int IN2=3;
int IN3=4;
int IN4=5;
void setup() {
Serial.begin(9600);
driver.init(); //Inicializa a comunicação.
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}
void loop() {
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];/*Recebe e determina o tamanho da mensagem do transmissor.*/
uint8_t buflen=sizeof(buf);//Determina o comprimento da mensagem recebida.
if(driver.recv(buf, &buflen)){
buf[buflen]='\0';/*Limpa a messagem, removendo caracteres desnecessários na messagem.*/
String command=String((char*)buf);//Converte a mensagem em string.
driver.printBuffer("Message received: ",buf,buflen);/*buf mostra a menssagem em números hexadecimais e buflen mostra o tamanho da mensagem.*/
Serial.println("\n");
Serial.print("Message received: ");
Serial.println(buflen);
Serial.println((char*)buf);
if(command=="MOTOR LEFT FORWARD"){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
}else if (command=="MOTOR LEFT OFF"){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
}
if(command=="MOTORS BACKWARD"){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}else if (command=="NO BACKWARD"){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
if(command=="MOTOR RIGHT FORWARD"){
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}else if (command=="MOTOR RIGHT OFF"){
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
}
}
O vídeo abaixo mostra o projeto neste post para controlar um modelo de navio por controle remoto.

