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:
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:
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por