- Descrição: O sensor indutivo tem características que o fazem…
Como usar com Arduino – Transmissor e Receptor RF (315MHz / 433MHz)
– Descrição:
O Módulo Wireless RF (Transmissor e Receptor) é utilizado para comunicações através de radiofrequência. É amplamente utilizado em sistema de alarmes, controle remoto, projetos de robótica e em projetos que envolva a troca de dados sem fio.
OBS: para esta prática foi utilizado o par de Transmissor e Receptor RF 433MHz, contudo, os passos mencionados aqui são válidos para os módulos de 315MHz. Além disso, para ampliar o sinal de comunicação dos módulos, você pode soldar uma antena (315MHz ou 433MHz) em cada um deles.
– Especificações e características (Transmissor):
– Modelo do transmissor: MX-FS-03V
– Tensão de operação: 3,5 a 12VDC
– Potência do sinal de transmissão: 10mW
– Modo de operação: AM (modulação em amplitude)
– Taxa de transferência: 4Kb/s
– Especificações e características (Receptor):
– Modelo do receptor: MX-05V
– Tensão de operação: 5VDC
– Corrente de operação: 4mA
– Frequência de operação: 433MHz
– Sensibilidade: -105dB
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário utilizar comunicação sem fio de baixo custo.
– Proposta da prática:
Em um Arduino conectar o Transmissor RF e conectar também um botão. Ao pressionar o botão, um comando será enviado para o Receptor RF que vai estar conectado em um outro Arduino que também vai estar conectado a um LED. Ao receber o comando, o LED irá acender ou apagar.
– Lista dos itens necessários:
02 – Arduino com Cabo USB
01 – Módulo RF (Transmissor e Receptor) – 315MHz ou 433MHz
01 – LED Difuso 5mm Vermelho
01 – Chave Táctil / Push Button
01 – Resistor de 150Ω
02 – Protoboard
10 – Cabos Jumper macho-macho
01 – Fonte DC 9V 1A Bivolt Chaveada (para um dos Arduinos)
OBS: você também pode alimentar os dois Arduinos pelo PC através de dois cabos USB.
– Biblioteca:
– Importando bibliotecas para o ambiente de programação do Arduino:
Arduino – Importando bibliotecas para a IDE
– Esquema de ligação da prática (Transmissor):
– Código (Transmissor):
OBS: conecte o cabo USB ao Arduino e ao computador e faça o carregamento do código na placa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <RH_ASK.h> //INCLUSÃO DE BIBLIOTECA #include <SPI.h> //INCLUSÃO DE BIBLIOTECA RH_ASK driver; //CRIA O DRIVER PARA COMUNICAÇÃO const int pinoBotao = 2; //PINO DIGITAL UTILIZADO PELO PUSH BUTTON void setup(){ driver.init(); //INICIALIZA A COMUNICAÇÃO RF DO DRIVER pinMode(pinoBotao, INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA / "_PULLUP" É PARA ATIVAR O RESISTOR INTERNO //DO ARDUINO PARA GARANTIR QUE NÃO EXISTA FLUTUAÇÃO ENTRE 0 (LOW) E 1 (HIGH) } void loop(){ const char *msg = "led"; //VARIÁVEL RECEBE O VALOR (led) if(digitalRead(pinoBotao) == LOW){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ driver.send((uint8_t *)msg, strlen(msg)); //ENVIA AS INFORMAÇÕES PARA O RECEPTOR (PALAVRA: led) driver.waitPacketSent(); //AGUARDA O ENVIO DAS INFORMAÇÕES delay(200); //INTERVALO DE 200 MILISSEGUNDOS } } |
– Esquema de ligação da prática (Receptor):
– Código (Receptor):
OBS: conecte o cabo USB ao Arduino e ao computador e faça o carregamento do código na placa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <RH_ASK.h> //INCLUSÃO DE BIBLIOTECA #include <SPI.h> //INCLUSÃO DE BIBLIOTECA RH_ASK driver; //CRIA O DRIVER PARA COMUNICAÇÃO const int pinoLed = 4; //PINO DIGITAL UTILIZADO PELO LED String str = ""; //VARIÁVEL DO TIPO STRING int statusLed = 0; //VARIÁVEL DO TIPO INT (CONTROLA O ESTADO ATUAL DO LED) void setup(){ driver.init(); //INICIALIZA A COMUNICAÇÃO RF DO DRIVER pinMode(pinoLed, OUTPUT); //DEFINE O PINO COMO SAÍDA digitalWrite(pinoLed, LOW); //LED INICIA DESLIGADO } void loop(){ uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; //LÊ A MENSAGEM RECEBIDA (PALAVRA: led) uint8_t buflen = sizeof(buf); //CRIA O COMPRIMENTO DO BUFFER PARA O TAMANHO DE buf if(driver.recv(buf, &buflen)){ //SE O DRIVER RECEBEU buf(INTEIRO) E buflen (COMPRIMENTO DE DADOS), FAZ str = ""; //VARIÁVEL RECEBE VAZIO int i; //VARIÁVEL LOCAL DO TIPO INTEIRO for(int i = 0; i < buflen; i++){ //PARA i IGUAL A 0, ENQUANTO i MENOR QUE buflen, INCREMENTA i str += (char)buf[i]; //VARIÁVEL RECEBE OS CARACTERES E FORMA A PALAVRA } if((str.equals("led")) && (statusLed == 0)){ //SE str FOR IGUAL A "led" E statusLed FOR IGUAL A 0, FAZ statusLed = 1; //VARIÁVEL RECEBE 1 digitalWrite(pinoLed, HIGH); //ACENDE O LED }else{ //SENÃO, FAZ if((str.equals("led")) && (statusLed == 1)){ //SE str FOR IGUAL A "led" E statusLed FOR IGUAL A 1, FAZ statusLed = 0; //VARIÁVEL RECEBE 0 digitalWrite(pinoLed, LOW); //APAGA O LED } } } } |
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Componentes Passivos – Capacitor
Próxima postagem: Como usar com Arduino – Sensor de Umidade e Temperatura DHT22 / AM2302
Bom dia, não entendi muito bem a parte do transmissor e receptor, a ligação dele esta feita nas portas 12 e 11, mas em nenhum momento no codigo foi definido alguma função a essas portas, pode explicar como funcina essa parte de receber e enviar ?
Olá Bruno.
Agradeço pelo comentário!
Na biblioteca RadioRead por padrão o pino digital 12 é usado pelo transmissor e o pino digital 11 é usado pelo receptor.
Boa tarde, realizei a montagem porem estou tendo problemas com o alcance , de forma a funcionar somente entre 60 cm no máximo de distancia . Alguma orientação para aumentar a distancia de comunicação ?
Olá Rafael.
Agradeço pelo comentário!
Leia essa postagem que trás mais detalhes a respeito da capacidade do receptor RF:
https://blogmasterwalkershop.com.br/arduino/utilizando-o-controle-remoto-rf-e-receptor-rf
No circuito receptor é possível incluir um botão pulsador? Ou seja, o Led pode ser ligado/desligado tanto peço sinal rádio frequencia, quanto pelo botão pulsador?
Quando ligo o emissor e o receptor a fontes diferentes não funciona mas quando ligo a mesma, funciona.
Alguém já teve este mesmo problema? Como posso resolver?
Olá PTAVM.
Agradeço pelo comentário.
Você está comutando os GNDs das fontes com o Arduino?
Eu poderia usar esses sistema com apenas 1 arduino? Digo, acionar o led sem a necessidade do outro arduino. Teria algum transmissor e receptor, capaz de fazer isso com apenas um microcontrolador?
Obrigado!
Ótimo post.
Imagine que vc tem dois pares de módulos trabalhando. Como eu posso impedir que o RXA não receba dados do TXB e vice-versa.
Olá Andre.
Agradeço pelo comentário!
Você pode usar um par de encoder / decoder HT12:
https://www.masterwalkershop.com.br/kit-ht12e-e-ht12d-encoder-e-decoder-para-rf
Showww….
Tem contato via WhatsApp
Olá Weldes.
Agradeço pelo comentário!
Seria para dúvidas relacionadas a projetos?
Qual seria a distancia máxima de funcionamento dos módulos um do outro, sem a instalação de um anteninha?
Olá Caio.
Agradeço pelo comentário!
Em ambiente fechado, considerando que o receptor esteja bem ajustado, é possível atingir até 15 metros. Em ambiente aberto até 100 metros.
Tem algum contato via ZAP queria uma ajuda com um projeto Aki pago se for um preço razoável é simples o projeto
Olá Weldes.
Agradeço pelo comentário!
Qualquer dúvida em relação sobre projetos deve ser tirada aqui pelo Blog, pois caso eu não consiga auxilar, outros usuários podem conseguir.
Muito obrigado pela resposta Euler..
Encontrei uma outra opção.. daria para usar um encoder HT12E ou HT6026( usado em controles de portão) junto ao sensor ?
O arduino com receptor RF conseguiria decodificar o sinal ou ainda precisaria de um decoder?
Sem o decoder correspondente não será possível interpretar com o Arduino o sinal codificado.
Ola Euler, tudo bem?
Estou fazendo um projeto para detectar chuva e fechar o teto.
Consigo fazer isso com cabos e agora estou tentando fazer por RadioFrequencia 433Mhz.
Não teria como fazer só com um arduino? Quero dizer, o sensor de chuva ligado diretamente no transmissor RF e o receptor ligado no arduino recebendo os dados do sensor para controlar o motor do teto?
No teu projeto em questão, não daria p ligar o botão direto no transmissor( como um controle de alarme) sem o arduino? Usando o arduino só na recepção e interpretação do sinal?
Obrigado
Olá Thiago.
Agradeço pelo comentário!
Usando somente um Arduino, melhor manter os cabos.
Para uso do RF, será necessário duas plataformas microcontroladas, sendo uma para transmissão e outra para recepção.
Ola
Euler, bom dia!
tenho um projeto e gostaria de saber, se poderíamos trocar o pushButton por um sensor e a led iria acender quando o sensor detectasse a medida x?
Olá William.
Agradeço pelo comentário!
Sim, é possível.
Ola
Euler, boa noite!
Fera gostaria de saber se tem como ligar dois ou mais transmissores para um receptor ?
Olá Washington.
Agradeço pelo comentário!
É possível sim, mas para isto, será necessário utilizar circuitos enconders (1 para cada transmissor) e 1 decoder (para o receptor). Desta forma, você poderá codificar cada transmissor e assim não haverá risco de um transmissor interferir no outro.
Exemplo de encoder e decoder:
https://www.masterwalkershop.com.br/kit-ht12e-e-ht12d-encoder-e-decoder-para-rf
O alcance vai depender do local. Geralmente frequências mais baixam tendem a alcançar mais. Contudo depende do local. Existem locais que o 433 não funciona por muita interferência, já outros funcionam bem.
Oi Maicon,
a solucao do Euler funcionou!
eu liguei o pino de alimentacao do transmissor direto a um pino digital do Arduino. Neste pino digital, posso controlar a fonte (desligar/ligar) do transmissor. Impedindo a interferencia do sinal ao redor.
Transistor iria funcionar tambem. Apesar de sua tremenda engenhoca revolucionadora, na engenharia electrica, em meu projeto adionaria mais volume.
Olá, gostaria de saber qual exatamente a diferença do de 315 MHz para o de 433 MHz.
Obrigado desde ja.
Olá Lucas.
A diferença é apenas a frequência de operação de cada um deles.
Mas isso poderia mudar alguma coisa quanto a distancia de operaçao deles?
Não.
A frequência de 315MHz é mais restrita e a de 433MHz é a mais utilizada atualmente.
Bom dia Euler,
Tenho um projeto de arduino similar, usando os mesmo hardwares (sem botão de switch), no entanto, com outra funcionalidades. Neste caso uso arduino, junto com o transmissor 433mhz, para abrir e fechar meu portão electronico. Mesmo que o sistema funcione como esperado, o transmissor que está conectado ao arudino, por DC (ao pino de 5v do arduino), gera interferência aos demais controles remotos (físicos existentes de casa) em “idle”. Ou seja, após uma vez que aciono o portão, ficando em modo de descanso, conetado a fonte 5v do arduino. Acredito, que isto se deve pelo transmissor estar em sistema “aberto”. Transmitindo frequência de 433mhz ao redor, impedindo o uso de outros controles (até os controles de carro-alarme), não funcionarem.
Você acha que devo usar um botão de switch, como vc usou em seu projeto?
Eu entendo que um relé (relay switch) iria resolver o problema. Porém não gostaria de usá-lo, sabendo de outras opções.
Tais como: isolar a fonte de alimentação do transmissor, para uma bateria. Funcionaria?
Adicionar um capacitor, que verifiquei os tipos na internet, e descobri um capacitor que funciona armazendo energia e funcionando como switch. ( nao lembro o nome deste tipo).
Como você surgere que devo procedir?
Obrigado, Igor
Olá Igor.
Agradeço pelo comentário!
Para contornar esta situação você pode usar um transistor para ligar a alimentação do transmissor só quando for transmitir o sinal RF.
Uma segunda alternativa é ligar o VCC do transmissor a um pino digital do Arduino para que o pino possa ser acionado só quando o módulo for transmitir. Como o nível lógico do Arduino é 5V você pode usar algum dos pinos digitais como alimentação do transmissor.
Bom dia, usando está configuração é possível usar múltiplos comandos( por exemplo 4 pushButtons e 4 Leds acionando ao mesmo tempo mas se alternado em momentos programados).
Olá Anderson.
Sim, é possível.
Olá Euler tudo bem?
Obrigado por compartilhar seus conhecimentos,tenho apredido muito no seu blog.
Parabéns pela iniciativa de dividir conhecimento.
Você poderia me ajudar com uma dúvida.
E possível um Arduino receber e enviar dados via tradição com o módulo RF 433.
Desde ja muito obrigado
Olá Alex.
Agradeço o reconhecimento!
Via tradição?
Não consegui compreender.