Fala Makers nesse tutorial vamos fazer um controle a distância utilizando os módulos RF 433Mhz, vamos simplesmente controlar 4 LED's, que mais a frente podem ser substituídos por outros dispositivos mais interessantes. Porém o mais importante é entender como o mesmo funciona de forma prática e descomplicada.
Figura 1- Módulos RF 433Mhz |
No circuito os dois módulos foram usados antenas, para grandes distâncias (até 200 metros em local aberto), a instalação da antena é essencial. Outro detalhe é que o módulo transmissor aceita tensões na faixa de 3,5 a 12v, o que também faz uma grande diferença no alcance da transmissão. São componentes básicos para comunicação via rádio frequência, presente em sistemas de alarmes, controle remoto, aquisição de dados e robótica em geral. Seu funcionamento é bem simples o transmissor envia uma série de dados para o receptor fazendo um método de transmissão simplex. Porém é necessário que você utilize um encoder (codificador) e um decoder (decodificador) para facilitar o processo de transmissão entre seus módulos, Nesse caso vamos utilizar 2 arduinos para essa comunicação.
Biblioteca VirtualWire.h
Montagem do transmissor RF
Mais simples que seu funcionamento com essa biblioteca é a sua montagem, você pode usar fios retirados de um cabo de rede Ethernet como jumpers e o melhor cortar do tamanho necessário ao seu projeto. Veja as figuras abaixo como foram feitas as montagens:
Figura 2- Montagem do transmissor RF |
Montagem do receptor RF
Figura 3-Montagem do receptor RF |
Sketch Módulo transmissor RF
/* MSmaker RF Example developed by MSmaker date: July 7, 2015 universomakers@gmail.com */ #include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h char *dado ; //Cria a variável que ira armazenar a informação pré definida enviadas pelos botões void setup() { //Configura o Arduino para trabalhar como transmissor vw_set_ptt_inverted(true); vw_setup(2000); vw_set_tx_pin(3);//Configura o pino 3 como tx //=================================================== Serial.begin(9600); //Configura o estado das portas digitais pinMode(3, OUTPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); } void loop() { if (digitalRead(4) == 0) // Verifica se D4 está pressionado { dado = "A"; //Armazena o dado pré determinado vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado vw_wait_tx(); //Aguarda o fim de transmissão delay(100); //Aguarda um tempo para a próxima leitura Serial.println(dado);//Para garantir que os seus botões estão funcionando, você pode verificar no monitor serial } if (digitalRead(5) == 0) // se estiver pressionado { dado = "B"; //Armazena o dado pré determinado vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado vw_wait_tx(); //Aguarda o fim de transmissão delay(100); //Aguarda um tempo para a próxima leitura Serial.println(dado); } if (digitalRead(6) == 0) // se estiver pressionado { dado = "C"; //Armazena o dado pré determinado vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado vw_wait_tx(); //Aguarda o fim de transmissão delay(100); //Aguarda um tempo para a próxima leitura Serial.println(dado); } if (digitalRead(7) == 0) // se estiver pressionado { dado = "D"; //Armazena o dado pré determinado vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado vw_wait_tx(); //Aguarda o fim de transmissão delay(100); //Aguarda um tempo para a próxima leitura Serial.println(dado); } }
Sketch Módulo receptor RF
/* MSmaker RF Example developed by MSmaker date: July 7, 2015 universomakers@gmail.com */ #include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h void setup() { int i; //Configura o Arduino para trabalhar como receptor vw_set_ptt_inverted(true); vw_setup(2000); vw_set_rx_pin(3);//Configura o pino 3 como rx vw_rx_start(); //================================================= pinMode(3, INPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); Serial.begin(9600); } void loop() { char cod;//Cria uma variavel para armazenar o dado recebido. uint8_t buf[VW_MAX_MESSAGE_LEN]; //Recebe os dados e armazena na variável buf uint8_t buflen = VW_MAX_MESSAGE_LEN; //Armazena na variável buflen o tamanho do dado recebido if (vw_get_message(buf, &buflen)) //Pega a mensagem que foi recebida { cod = buf[0]; //Converte a variável em Char Serial.println(cod); //Para verificar valores recebidos e corrigir possiveis erros if (cod == 'A') // Compara a informação recebida { Serial.println(cod); //Para garantir que está recebendo dados, você pode verificar no monitor serial digitalWrite(4, !digitalRead(4)); // Inverte o estado da saída D4 } if (cod == 'B') { Serial.println(cod); digitalWrite(5, !digitalRead(5)); } if (cod == 'C') { Serial.println(cod); digitalWrite(6, !digitalRead(6)); } if (cod == 'D') { Serial.println(cod); digitalWrite(7, !digitalRead(7)); } } }