back to top
sábado - 27 / dezembro / 2025

Controle de módulos RF 433 MHz com Arduino

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).

modulação ASK
Na modulação ASK, a ausência de sinal representa o bit ‘0’, enquanto o sinal de onda senoidal representa o bit ‘1’. Fonte: eletrogate.
transmissor RF 433 MHz
Os pinos do transmissor.
  1. DATA: entrada de dados.
  2. VCC: alimentação, que pode ser entre 3 e 12 V.
  3. GND: o terra.
  4. 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.

Fonte: Stack Exchange.

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.

Os pinos do receptor.
  1. VCC: alimentação, deve receber apenas 5 V.
  2. Data: saída de dados.
  3. Idem.
  4. GND: terra.
  5. Terminal para soldar a antena.
O circuito do receptor. Fonte: Eletrogate.

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

O esquemático para testar o transmissor FS1000A.

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.
RF 433 MHz Controle com 3 botões
O esquemático do controlador.

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.
Eu usei um suporte que já possui uma chave simples.
  • 2 motores CC.

O esquemático e o código do receptor, respectivamente.

RF 433 MHz Controle dos motores
#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.

Related Articles

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui

- Advertisement -

Últimos posts