Olá Garagistas! No tutorial de hoje mostraremos como você pode facilmente utilizar os módulos de transmissão RF Link (315MHz/434MHz) utilizando o Garagino. Como demonstração faremos acionamentos no módulo receptor, a partir de botões pressionador no módulo transmissor.
Material Utilizados:
1x Módulo Transmissor(315MHz)/Módulo Receptor(315MHz) ou Módulo Tra...
3x Resistor 330Ω (Acionamento do LEDs)
4x Resistor 10KΩ (Pull-down das chaves táteis)
3x LEDs (Verde, Amarelo e Vermelho)
Alguns Jumpers (Circuito e Antena)
1. RF Link (315MHz/434MHz)
Figura 1 - Pinout Módulos RF
Os Módulos RF Link são módulos para transmissão por Rádio Frequência. Normalmente quando se pensamos em comunicação sem fio para ser utilizado com Garagino ou Arduino, a primeira coisa que vem à mente são os famosos XBee, contudo nem todos tem a possibilidade de comprar um XBee, pois são relativamente caros se comparado com os módulos RF.
Esses módulos são bem simples, o transmissor enviar dados em série para o receptor fazendo um método de transmissão simplex, o transmissor envia e o receptor recebe, simples assim. Contudo, seria necessário você utilizar um encoder (codificador) e um decoder (decodificador) para facilitar o processo de transmissão entre seus módulos, daí a vantagem de você pode utilizar um Garagino ou Arduino, porque além de você utilizá-lo como encoder ou decoder, você irá consumir somente 1 pino de cada Garagino para a comunicação e terá todo os outros disponíveis para a leitura de sensores, acionamentos de carga e pode também tratar os dados que serão enviados e recebidos.
E qual a diferença entre as frequências de 315MHz e 434MHz? Como a diferença entre as frequências desses módulos é pequena, basicamente em aplicações práticas os resultados vão ser bem próximos, já na teoria a frequência de 433MHz deve se comportar melhor em ambientes fechados enquanto a de 315MHz terá o maior comprimento de onda, logo você terá maior alcance ao ar livre. Lembrando que no Brasil essas frequência são permitidas para uso livre pela Anatel.
Em nossa aplicação teremos então um Garagino (encoder) para o módulo transmissor e um Garagino (decoder) para o módulo receptor. Faremos a leitura dos botões conectados nos pinos digitais D6~D9 do módulo transmissor e faremos o acionamento desses respectivos pinos digitais no módulo receptor, onde estão conectados nesses pinos:
D6 - LED Verde
D7 - LED Amarelo
D8 - LED Vermelho
D9 - Módulo Relé (Lâmpada)
2. Biblioteca VirtualWire.h
Nessa demonstração utilizamos a biblioteca VirtualWire.h, ela facilita a aplicação e utilização desses módulos. É uma biblioteca bastante útil e simples de se utilizar e ela pode ser utilizada tanto para o módulo RF Link de 315MHz quanto para o módulo RF Link de 434MHz, para informações mais detalhadas sobre as biblioteca, consulte o material neste link. Neste tutorial foi utilizada a versão 1.20 desta biblioteca, e ela pode ser baixada, clicando aqui.
3. Sketch Módulo Receptor
- Transfira o sketch abaixo para o Garagino do módulo receptor:
#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h
void setup()
{
//++++++++++++++Inicializa o módulo receptor+++++++++++++++++++
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(2); //Configura o pino D2 para a leitura dos dados
vw_rx_start(); //Inicia a leitura de dados do módulo receptor
//==============================================================
//Configura os pinos de 6 a 9 como saída
for(int i=6;i<=9;i++)
{
pinMode(i, OUTPUT);
}
//======================================
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Variável para o armazenamento do buffer dos dados
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Variável para o armazenamento do tamanho do buffer
if(vw_get_message(buf, &buflen)) //Se no buffer tiver algum dado (O ou 1)
{
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Incrementa a posição para a leitura do buffer por i (0 a 4)
//Incrementa a posição dos pinos digitais por j (6 a 9)
int j=6;
for (int i = 0; i < buflen; i++,j++)
{
buf[i] = buf[i] - 48; //Pega o dado do buffer que é recebido em hexadecimal e subtrai 48
if(buf[i] == 1) //Se o dado na determinada posição do buffer for igual 1
{
digitalWrite(j,!digitalRead(j)); //Inverte o estado do respectivo pino digital
}
}
//========================================================================================
}
}
4. Sketch Módulo Transmissor
- Transfira o sketch abaixo para o Garagino do módulo transmissor:
#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h
char *nibble = "0000"; //Cria a variável nibble com o valor 0000
int le_pino; //Cria a variável para a leitura dos pinos digitais
void setup()
{
//++++++++++++++Inicializa o módulo transmissor+++++++++++++++++++
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(3); //Configura o pino D3 para a leitura dos dados
//================================================================
//Configura os pinos de 6 a 9 como entrada
for(int i=6; i<=9; i++)
{
pinMode(i, INPUT_PULLUP);
}
//======================================
}
void loop()
{
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Incrementa a posição para o armazenamento no nibble por i (0 a 4)
//Incrementa a posição dos pinos digitais por j (6 a 9)
int j=0;
for(int i=6;i<=9;i++,j++)
{
le_pino = digitalRead(i); //Lê o estado do botão
if(le_pino == 1) //Se o botão estiver pressionado
{
while(le_pino == 1) le_pino = digitalRead(i); //Aguarda o botão ser despressionado
nibble[j] = '1'; //Armazena na respectiva posição do no nible o caracter 1
}
else nibble[j] = '0'; //Senão armazena na respectiva posição do no nible o caracter 1
}
vw_send((uint8_t *)nibble, strlen(nibble)); //Envia a variável nibble
vw_wait_tx(); //Aguarda o fim de transmissão
//=======================================================================================
}
5. Circuito do Módulo Receptor
Faça as ligações do circuito do módulo receptor:
Figura 2 - Circuito do Módulo Receptor
6. Circuito do Módulo Transmissor
Faça as ligações do circuito do módulo transmissor:
Figura 3 - Circuito do Módulo Transmissor
Referências
http://www.airspayce.com/mikem/arduino/
http://lusorobotica.com/index.php?topic=772.0
Comentar
Problema resolvido.
Refiz as antenas com fio de cobre esmaltado, no transmissor reto, no receptor uma bobina.
Porém o tal delay que percebia foi uma tremenda de uma pescada durante a programação.
Estudei o código acima e quando voltei aos meu códigos (programar dois arduinos funde um pouco a cabeça) descobri dois delays perdidos que causavam o delay.
Fica a dica! Quando programar os dois arduinos, tenha em mente que um é cliente e outro é servidor, que um você vai gerar comandos e outro vai receber verificar e executar. Não é muito fácil não, mas com o tempo pega-se o jeito!
Bom dia.
No projeto de carrinho controle remoto (http://labdegaragem.com/photo/turbino?context=featured) que estou montando, utilizei um par rx/tx 433 mhz.
Estou utilizando um controle de PS2 para gerar comandos no arduino ligado ao transmissor (na versão final vou utilizar um garagino),
Vamos lá:
Percebi no seu vídeo que a resposta está bem rápida quando o botão é pressionado, no meu caso, estou tendo uma demora na resposta que as vezes ultrapassa os 3 segundos. O que é estranho, pois estou enviando apenas um byte (uma letra), que seriam 8 bits e sendo a taxa de transferência 2000 (acredito bit por segundo), o tempo de transferência não deveria influenciar.
Estou imaginando que o problema seja a antena, então, qual seria uma apropriada? Outro detalhe é que o módulo receptor tem um ajuste, que me parece ser um capacitor variável, qual seria o efeito de tentar mudar o ajuste deste componente?
Por último, de acordo com o data-sheet deste equipamento, existem dois pinouts para o módulo TX, um digital e um analógico, qual seria a diferença na forma de transmitir os dados?
Peço desculpas pelo enorme post, porém espero que as respostas possam contribuir com outros que venham a se aventurar na utilização destes módulos.
Eu gostaria de utilizar esse codigo para abrir uma fechadura eletronica via comando de voz, como eu poderia adaptar o codigo?
abraço
Para enviar a leitura de um sensor ou de uma entrada analógica, basta efetuar a leitura e enviar o código que desejar indicando o valor do sensor, neste tutorial foram enviados 0 e 1, indicando se tem botão pressionado ou não, nada impede de você enviar uma leitura de sensor.
Atenciosamente,
Equipe LdG.
alguem tem um codigo para enviar dados de leitura de um sensor
para transmitir o estado de uma entrada ou saida analogica como devo proceder?
ola! muito bom o tutorial! parabens!
cara projeto bem estruturado e fácil compreemção , parabéns
Parabéns, muito bom, eu estava justamente precisando de um tutorial do RF.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)