Hoje decidimos ver de uma forma mais completa e útil ver como enviar dados ou informações de um lado para o outro.
Esses módulos são pequenos, baratos e relativamente fáceis de usar, e é isso que veremos neste artigo, enviando sinais de um Arduino para outro. O módulo transmissor funciona com alimentação entre 3,5 e 12V, o que influi na potência e alcance do sinal, que pode chegar à 200 metros quando utilizamos também antenas adequadas.
Material necessário:
- 2 placas Arduino Uno (ou similares)
- 1 Módulo RF 433 MHz Transmissor
- 1 Módulo RF 433 MHz Receptor
- 1 Push button
- 1 Led
- 1 resistência de 220 ohms (resistência pull-up do push-button)
- 1 resistência de 470 ohms (para o led)
Pinagem:
No circuito transmissor o pino DATA do módulo RF será conetado ao pino digital 4 do Arduino. O push-button vai no pino analógico A0, e a alimentação do circuito é de 5V.
Mas para relembrar vamos mostrar de novo esquema de ligações para o Transmissor:
Antes de carregar o programa, faça o download da biblioteca VirtualWire, neste link e instale a livraria no Arduino IDE.
Carregue o programa abaixo no Arduino que será o TRANSMISSOR. Em caso de problemas com a recepção, tente alterar a velocidade de comunicação alterando a linha vw_setup(5000) colocando um valor menor, lembrando que o valor deve ser o mesmo tanto programa do transmissor como do receptor.
O programa verifica se o botão foi pressionado, e nesse caso inverte o valor da variável estado (0 ou 1) para string, enviando esse valor para o módulo transmissor RF.
E o respetivo código:
#include <VirtualWire.h> //Define pinos Led e Botao const int ledPin = 13; const int pino_botao = A0; int valor_botao; char Valor_CharMsg[4]; //Armazena estado led = ligar/desligar int estado = 0; void setup() { Serial.begin(9600); pinMode(ledPin,OUTPUT); pinMode(pino_botao,INPUT); //Pino ligado ao pino DATA do transmissor RF vw_set_tx_pin(4); //Velocidade de comunicacao (bits por segundo) vw_setup(5000); Serial.println("Trasmissao modulo RF - Acione o botao..."); } void loop() { //Verifica o estado do push-button valor_botao = digitalRead(pino_botao); //itoa(valor_botao,Valor_CharMsg,10); //Caso o botao seja pressionado, envia dados if (valor_botao == 0) { //Altera o estado do led estado = !estado; //Converte valor para envio itoa(estado,Valor_CharMsg,10); //Liga o led da porta 13 para indicar envio dos dados digitalWrite(13, true); //Envio dos dados vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg)); //Aguarda envio dos dados vw_wait_tx(); //Desliga o led da porta 13 ao final da transmissao digitalWrite(13, false); Serial.print("Valor enviado: "); Serial.println(Valor_CharMsg); delay(500); } }
Podemos ver o funcionamento do circuito abrindo o serial monitor e confirmar o estado do botão se está a alterar:
Agora vamos ver como realizar a ligação do receptor:
O ideal é alimentar o Arduino com o módulo receptor utilizando uma bateria ou fonte externa, para testar o alcance do módulo.
O programa do receptor recebe do transmissor o valor 0 ou 1 em formato string, converte esse valor para int (inteiro) e aciona a porta 5, ligando ou desligando o led.
Código fonte para o recetor:
#include <VirtualWire.h> //Define pino led int ledPin = 5; int valor_recebido_RF; char recebido_RF_char[4]; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); //Pino ligado ao pino DATA do receptor RF vw_set_rx_pin(7); //Velocidade de comunicacao (bits por segundo) vw_setup(5000); //Inicia a recepcao vw_rx_start(); Serial.println("Recepcao modulo RF - Aguardando..."); } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { int i; for (i = 0; i < buflen; i++) { //Armazena os caracteres recebidos recebido_RF_char[i] = char(buf[i]); } recebido_RF_char[buflen] = '\0' //Converte o valor recebido para integer valor_recebido_RF = atoi(recebido_RF_char); //Mostra no serial monitor o valor recebido Serial.print("Recebido: "); Serial.print(valor_recebido_RF); //Altera o estado do led conforme o numero recebido if (valor_recebido_RF == 1) { digitalWrite(ledPin, HIGH); Serial.println(" - Led aceso !"); } if (valor_recebido_RF == 0) { digitalWrite(ledPin, LOW); Serial.println(" - Led apagado !"); } } }
Para confirmar que o projeto ficou a funcionar podemos ver o resultado no terminal do Arduino IDE:
Com este código, demonstramos que também é possível enviar uma mensagem, trama de dados, valores de leituras de sensores, etc.
Trazendo um maior potencial a estes módulos para comunicação sem fios.
—————
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica ElectroFun.
Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.
Não se esqueçam de fazer like na nossa Página no Facebook.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nossoGrupo no acebook Arduino Portugal – Qual o teu projeto?