[RESOLVIDO] Interferência entre sensor ultrassônico e biblioteca VirtualWire

Olá senhores garagistas,

Estou com esse problema, não achei nenhum material que me ajudasse a resolver então decidi recorrer à vocês. 

Também já tentei de várias formas entender e corrigir isso, mas, sem sucesso.

Resumo do funcionamento do projeto: 

O arduino secundário é responsável pela medição do fluxo de água que passa em um cano e por meio da biblioteca VirtualWire, ele se comunica com aduino primário que realiza a medida do volume de uma caixa d'água com o sensor ultrassônico e imprime os valores das medições na serial para o usuário. 

Esquema de ligações: 

O problema é o seguinte:

  • Quando eu carrego esse código no arduino primário ele funciona corretamente (fazendo apenas a medição com o S.U.)

  • Mas quando eu carrego esse outro código, também no arduino primário, o sensor ultrassônico para de realizar a medição, mas, a comunicação com o outro arduino funciona  

Fazendo uns testes com esse código eu percebi que, aparentemente, o problema no S.U. é decorrente do que está escrito na linha 22 (ver imagem acima). O código dessa linha informa a velocidade da transmissão de dados entre os arduinos.

Quando eu subo o código com essa linha comentada, a medição do S.U. volta a funcionar perfeitamente, mas, como é de se esperar, a comunicação entre os arduinos não acontece.

Outra forma de obter esse mesmo resultado, e se eu fizer a velocidade de transmissão igual a 0 bits por segundo (vw_setup(0);)

Também tentei tirar essa linha de dentro do void setup() e colocar dentro da função void fluxo(), mas o que acontece é que só a primeira medição do S.U. funciona e depois apenas a comunicação entre os arduinos fica funcionando. 

Com esse resultado, pensei em deixar o código assim e no final do void fluxo() fazer (vw_setup(0);) pra tentar fazer a próxima medição funcionar, mas o resultado dessa mudança foi o mesmo da imagem acima. 

Alguém sabe o que pode está gerando esse conflito? Eu imagino que possar ter algo a ver com o Timmer do microcontrolador, mas, se for esse o caso eu não faço a mínima ideia de como resolver. 

Código do arduino secundário: 

ARDUINO_SECUDARIO_FINAL.ino

Exibições: 1276

Responder esta

Respostas a este tópico

Oi LM, boa tarde,

post o código do Arduino primário.

E o link da biblioteca VirtualWire.h

Rui

Olá Rui, boa noite, obrigado por responder 

os coloquei os links no texto, onde tem "esse código" e "esse outro código ". agora eu destaquei melhor para ficar mais fácil para os próximos leitores! 

também coloquei os mesmos arquivos aqui em anexo:

Primeiro código mencionado está no arquivo de nome: 

medicao_com_senso_ultrassonico_sem_libs.ino

Segundo código mencionado está no arquivo de nome:

medicao_com_senso_ultrassonico_sem_libs_e_virtual_wire.ino

O arquivo referente à biblioteca é o de nome: 

VirtualWire.rar

Anexos

Oi LM,

Não encontrei o link dos outros códigos.

só encontrei o link do vídeo sobre o HS-SR04.

Rui

Olá Rui,

Essa sketch do arduino quem tem o link para o vídeo, eu usei só para testar o sensor ultrassônico... 

A sketch que tem o nome medicao_com_senso_ultrassonico_sem_libs_e_virtual_wire é a que eu quero implementar no arduino principal, mas está apresentando o problema com a medição do sensor ultrassônico por causa da biblioteca VirtualWire. 

Posso estar falando besteira... mas eu acho que o problema, está no timer do microcontrolador que essa biblioteca usa. Eu até tentei entender o código fonte dela, mas é muito avançado pra mim kkkk

A biblioteca e esse código que eu falei, estão em anexo na minha resposta anterior à essa.  

Olá Lyang,

Sou programador, e não conheço muito a eletrônica do Arduino. Então esta contribuição é mais uma dúvida do que uma ajuda. Seguem algumas considerações:

1) Parece que a lib VirtualWire está "deprecated" e não vai mais ser atualizada. Foi substituída por outra. Veja o Link: http://www.airspayce.com/mikem/arduino/VirtualWire/

2) Dúvida de iniciante: Pelo seu esquema, você está comunicando os 2 Arduinos através de um meio físico, um cabo ligando os pinos em cada Arduino. Então porque você precisa da VirtualWire, já que não é wireless, não está usando RF nem nada?

3) O pino no Arduino vai receber um sinal normal, como se tivesse um sensor ligado nele, não é isso?



Oi LM, bom dia.

Como disse bem o JAC, esta biblioteca é obsoleta, mas , analisei o seu code:

                    medicao_com_senso_ultrassonico_sem_libs_e_virtual_wire

e realmente ele media 0cm.

Ao bloquear a linha  " vw_setup(2000); // Bits per sec"  ele mede normalmente.

Então fui verificar com o  osciloscópio o que ocorria.

O pino de trigger (9), disparava normalmente, mas o pino echo(10), estava sempre em  LOW  

(com uma pequena variação a cada retorno do echo).

Resolvi modificar o seu code e o invés do pino 10, usei como echo o pino 8, e funcionou normalmente.

Testei tb com o pino 6 e tb funcionou.

Não analisei esta biblioteca, mas ela usa para comunicação os pinos 12 e 11, que  fazem parte da interface

SPI, acredito que o autor usou recursos desta interface para comunicação, e como o pino 10 também faz parte

desta interface, (SS), ele deve está atrapalhando o US..

Caso isto resolva sua dificuldade, de um retorno aqui, para que outros amigos também possam

usufruir desta solução.  

Att:

Rui

Olá Rui, boa noite.

Sim, troquei o pino do echo do 10 para o 8 e funcionou. Muito obrigado a todos que responderam.

E respondendo à pergunta do Jose Augusto Cintra, eu estou usando o fio para fazer a comunicação entre os arduinos, por que por enquanto eu estou trabalhando só o código, e usando o fio eu por ter certeza que, caso haja algum mau funcionamento, não será causado por falha dos módulos R.F., que serão implantados, junto com as antenas, quando o código estiver funcionado.

Eu estava ciente que essa biblioteca VirtualWire que estou usando está ultrapassada, ela foi substituída por uma chamada RadioHead, mas como eu estou atrasado com esse projeto e alem de eu  já ter certa familiaridade com ela, a VirtualWire tem mais material disponível na net do que a sua sucessora, por isso resolvi usá-la. 

Tópico oficialmente resolvido.

Mais uma vez, obrigado e até a próxima.  :-D 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço