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
boa tarde.
Fiz tudo conforme a matéria, mas não funciona.
O que pode ser ?
OI LUCAS, Obrigado. mas não achei o vídeo no face.
Pois é, Eduardo. Agora, posso te ajudar enviando esse link do meu projeto. Confira o vídeo :https://www.facebook.com/groups/arduinobra/permalink/804963472881381/
Valeu Lucas, vou buscar algo na inter, ´difícil fazer algo se não tem tutorial de quem já fez antes.
abraço
Eduardo, no meu projeto eu transmito dados em código binário (0 ou 1), na verdade, eu converto uma variável analógica em uma digital ou discreta (utilizando o Arduino). Creio eu, que com o APC220 vc tbm consiga transmitir dados em formato de código binário ou outro e dps esse código ser decodificado em forma de imagem ou vídeo, de maneira análoga a transmissão via rádio utilizadas pelas redes de TV. Pesquise mais sobre essa possibilidade. Quando tiver um tempinho posso te ajudar. Abraço.
Uma pergunta aos especialistas.
O que poderei transmitir sem fio por esse modelo APC220? ( Ou outro, peço sugestão ) preciso transmitir sequencia de fotos com audio, ou vídeo com áudio. obrigado
Bruno,
Verifiquei o módulo APC220 e é realmente interessante, tem protocolo de comunicação, ao que me pareceu já tem controle de comunicação por hardware e protocolo.
Porém a frequência é 433, não acredito que esta antena que vem junto no equipamento refresque alguma coisa pois no 433 o que manda é a antena de 17,5 cm de fio rígido, devido às características físicas da onda. Testei no meu projeto antenas de roteador e não funcionam.
Não sei maiores detalhes do seu projeto, mas, ao que tudo indica, penso que é mais vantajoso e garantido, utilizar um XBEE, como ele funciona em 2,4gHz, as antenas de roteador farão a diferença e vc vai conseguir comunicar à uma distância maior.
É salgado, mas é garantido, já vi fazerem umas coisas muito legais com ele.
Blz? Espero ter ajudado.
André, agradeço a atenção. Muito obrigado! Meu problema é que preciso de um par de módulo RF que trabalhe numa distância acima de 200, 300 m. Provavelmente terei que utilizar o único módulo que encontrei no mercado que promete essa distância (APC220, conhece?). Vou ter que retirar a antena omnidirecional e trocar por uma direcional para aumentar ainda mais essa distância, o que deve pesar um pouco no bolso. É o jeito. Mas, na verdade, estou com medo do dispositivo não prometer com o que se fala por ai na net ("consegui 500 m com o APC220!"), afirmando-se que com a própria antena omnidirecional se tem esse alcance. Vou ver o que consigo fazer, qualquer coisa, volto com minhas dúvidas. Obrigado, mais uma vez, André.
Lucas, bom dia.
Não sou nenhum especialista em eletrônica, mas tenho aprendido muito configurando e montando meu carrinho.
Pelos testes que fiz aqui, consegui ultrapassar os 15 metros, o que considero bem razoável dada a quantidade de interferências que este tipo de comunicação está sujeito.
Não acredito que a comunicação chegue aos 200 metros como já vi por aí falarem, para mim é um exagero extremo.
Há alguns cuidados que você deve tomar para conseguir bons resultados:
1 - muito cuidado com a antena, deve ser feita com, no mínimo, fio rígido de cobre acima de 1mm de diâmetro e deve possuir exatos 17,5 cm, ou seja, 1/4 do comprimento de onda. A antena deve estar na posição vertical, caso contrário perderá muito sinal.
2 - utilize capacitores como filtro na alimentação, tanto no tx, quanto no rx, caso contrário podem ocorrer harmônicos que detonam a comunicação.
3 - muito cuidado com a tensão, pois ela deve ser o mais próximo possível de 12 volts no transmissor e de 5 volts no receptor, lembre-se que o arduino, ou no meu caso o garagino, funcionam por volta dos 5 volts, então recomendo utilizar uma fonte de 12 volts e um regulador do tipo 7805 para obter ambas as voltagens necessárias.
4 - cuidado quando utilizar ligações de negativo (comum) para ligar motores dc, no circuito onde está o rx, pois o ruído gerado por eles simplesmente mata seu receptor.
5 - a biblioteca virtualwire utilizada neste exemplo funciona legal, mas achei que é muito lenta, estou utilizando uma chamada rcswitch que achei mais rápida e tem alguns recursos de correção de erros bem interessantes, ela também trabalha com códigos numéricos mais facilmente, não sendo necessário enviar strings char.
Isso foi tudo o que consegui juntar de experiências nas minhas pesquisas, todos os itens testei e garanto que funcionam.
Espero por ter contribuído assim como já obtive muitas respostas pesquisando o labdegaragem.
[]s
Olá, galera do LabdeGaragem. Poderiam me informar qual a distância máxima de comunicação entre os dois módulos, caso utilize um módulo como transmissor e outro como receptor?
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)