[RESOLVIDO]sensor de vazão com display I2C em conflito - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-29T06:55:47Zhttps://labdegaragem.com/forum/topics/sensor-de-vaz-o-com-display-i2c-em-conflito?commentId=6223006%3AComment%3A775790&xg_source=activity&feed=yes&xn_auth=noatualizando:
Este tópico…tag:labdegaragem.com,2020-11-20:6223006:Comment:7931452020-11-20T09:49:39.461ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">atualizando:</span></p>
<p><span style="font-size: 12pt;"> Este tópico teve uma extensão neste link do LDG: <span style="font-size: 10pt;"><a href="http://labdegaragem.com/forum/topics/led-que-liga-se-tiver-vaz-o-por-muito-tempo" rel="nofollow noopener" target="_blank">"<em><strong>Vazão com LCD e LEDs de Alerta</strong></em>"…</a></span></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;">atualizando:</span></p>
<p><span style="font-size: 12pt;"> Este tópico teve uma extensão neste link do LDG: <span style="font-size: 10pt;"><a rel="nofollow noopener" href="http://labdegaragem.com/forum/topics/led-que-liga-se-tiver-vaz-o-por-muito-tempo" target="_blank">"<em><strong>Vazão com LCD e LEDs de Alerta</strong></em>"</a></span></span></p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/8197599484?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8197599484?profile=RESIZE_710x" width="239" height="160" class="align-center"/></a></p>
<p></p> Muito obrigado pela explicaçã…tag:labdegaragem.com,2020-10-30:6223006:Comment:7757902020-10-30T18:33:52.845ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Muito obrigado pela explicação consegui ver bem onde estava errando na programação. Agradeço muito pela atenção.</p>
<p>Muito obrigado pela explicação consegui ver bem onde estava errando na programação. Agradeço muito pela atenção.</p> Bom dia Rodrigo,
então acredi…tag:labdegaragem.com,2020-10-30:6223006:Comment:7758322020-10-30T18:07:21.961ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Bom dia Rodrigo,</p>
<p>então acredito que o post do Elcids me ajudou muito pois eu não só copiei oq ele falou mas também li tudo e consegui ver os pontos onde estava errando. E também tive uma longa conversa com o RV no chat onde ele me explicou bastante coisa sobre o projeto. Mas agradeço pela preocupação e estou estudando mais sobre o Arduíno para poder melhorar.</p>
<p>Abrçs,</p>
<p>José </p>
<p>Bom dia Rodrigo,</p>
<p>então acredito que o post do Elcids me ajudou muito pois eu não só copiei oq ele falou mas também li tudo e consegui ver os pontos onde estava errando. E também tive uma longa conversa com o RV no chat onde ele me explicou bastante coisa sobre o projeto. Mas agradeço pela preocupação e estou estudando mais sobre o Arduíno para poder melhorar.</p>
<p>Abrçs,</p>
<p>José </p> Bom dia RV,
desculpa só vim v…tag:labdegaragem.com,2020-10-30:6223006:Comment:7757832020-10-30T17:59:36.433ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Bom dia RV,</p>
<p>desculpa só vim ver agora já fiz a correção, obrigado.</p>
<p>Bom dia RV,</p>
<p>desculpa só vim ver agora já fiz a correção, obrigado.</p> Agradeço muito pela atenção E…tag:labdegaragem.com,2020-10-30:6223006:Comment:7757812020-10-30T17:58:49.606ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Agradeço muito pela atenção Elcids, eu li toda sua postagem e realmente me ajudou bastante com o projeto, consegui ver os pontos onde estava errando e concertar tudo. Mais uma vez muito obrigado pela ótima explicação.</p>
<p>Agradeço muito pela atenção Elcids, eu li toda sua postagem e realmente me ajudou bastante com o projeto, consegui ver os pontos onde estava errando e concertar tudo. Mais uma vez muito obrigado pela ótima explicação.</p> Gostaria de saber uma coisa..…tag:labdegaragem.com,2020-10-29:6223006:Comment:7746692020-10-29T16:41:53.686ZRodrigo Corberahttps://labdegaragem.com/profile/RodrigoCorbera
<p>Gostaria de saber uma coisa... o Leo parece que tinha que fazer um TCC. Com a resposta excelente dada pelo colega Elcids, na prática, ele escreveu o TCC pro Leo.<br/><br/>Isso é bom? Ajudou de fato o Leo em seu futuro profissional?</p>
<p>Gostaria de saber uma coisa... o Leo parece que tinha que fazer um TCC. Com a resposta excelente dada pelo colega Elcids, na prática, ele escreveu o TCC pro Leo.<br/><br/>Isso é bom? Ajudou de fato o Leo em seu futuro profissional?</p> Bom dia JL,
por favor escreva…tag:labdegaragem.com,2020-10-29:6223006:Comment:7749262020-10-29T15:33:18.511Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Bom dia JL,</p>
<p>por favor escreva <span style="font-size: 12pt;"><strong>[ R E S O L V I D O ]</strong></span> antes do titulo do seu tópico,</p>
<p>pois sem isto os amigos ficam pensando que ainda está com problema e ficam gastando o tempo deles</p>
<p>tentando alguma solução para seu problema.</p>
<p>Obrigado pela compreensão.</p>
<p>RV</p>
<p>Bom dia JL,</p>
<p>por favor escreva <span style="font-size: 12pt;"><strong>[ R E S O L V I D O ]</strong></span> antes do titulo do seu tópico,</p>
<p>pois sem isto os amigos ficam pensando que ainda está com problema e ficam gastando o tempo deles</p>
<p>tentando alguma solução para seu problema.</p>
<p>Obrigado pela compreensão.</p>
<p>RV</p> olá J. Leonardo.
A alg…tag:labdegaragem.com,2020-10-29:6223006:Comment:7745892020-10-29T12:50:59.868ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> A algum tempo atrás, ajudei em um tópico muito parecido com este seu, porém aquele era pouca coisa mais "complexo". Assim, acredito que vc pode aprender algumas coisas lá. O link do referido tópico é este aqui: <a href="http://labdegaragem.com/forum/topics/programa-em-arduino-que-utiliza-dois-sensores-de-fluxo-de-gua-e" rel="nofollow noopener" target="_blank">"<em><strong>usando dois…</strong></em></a></span></p>
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> A algum tempo atrás, ajudei em um tópico muito parecido com este seu, porém aquele era pouca coisa mais "complexo". Assim, acredito que vc pode aprender algumas coisas lá. O link do referido tópico é este aqui: <a rel="nofollow noopener" href="http://labdegaragem.com/forum/topics/programa-em-arduino-que-utiliza-dois-sensores-de-fluxo-de-gua-e" target="_blank">"<em><strong>usando dois Sensores de Fluxo</strong></em>"</a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre seu código original, percebe-se que vc tem alguns problemas com <em><strong>conceitos de programação</strong></em>, e uma falta de intimidade com isso no <em><strong>Arduino</strong></em>. Por isso, aproveitei o código daquele tópico que mencionei, e adaptei o mesmo para estar de acordo com as funcionalidades do seu código original (o "<em><strong>TCC_S.ino</strong></em>"). Como a simplicidade se manteve, acredito que isto poderá ajudar para que vc vá muito além no desenvolvimento do seu código.</span></p>
<p><span style="font-size: 12pt;"> Para ver este código funcionando, você pode usá-lo diretamente no seu Sistema, sem modificação, pois eu usei as mesmas definições que vc usou no seu Hardware. No final deste post está disponível o arquivo.</span></p>
<p><span style="font-size: 12pt;"> Mais à frente, explico porque seu código original não funcionou como esperado.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas agora, falando um pouco mais sobre esta implementação que estou postando aqui.</span></p>
<p><span style="font-size: 12pt;"> Os <em><strong>fatores numéricos</strong></em> para os cálculos dos diversos parâmetros derivados do <em><strong>Fluxo de Água</strong></em>, vc pode alterar facilmente logo no início do código, conforme mostro na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><em><strong>(clique na figura para "zoom")</strong></em></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8091111465?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8091111465?profile=RESIZE_710x" class="align-center"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Para o teste, fiz a <em><strong>simulação</strong></em> no <em><strong>Proteus</strong></em>, onde emulei o <em><strong>Sensor de Fluxo</strong></em> via um <em><strong>circuito oscilador</strong></em>, o qual gera os <em><strong>Pulsos do Sensor</strong></em>. A frequência do oscilador pode ser ajustada durante a simulação, e consequentemente alterar a vazão "on the fly". <span>Com os valores que usei no circuito oscilador, a vazão pode ser ajustada entre cerca de <em><strong>5 L/min</strong></em> a <em><strong>50 L/min</strong></em>.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> O resultado da simulação, vc pode ver na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/8091113080?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8091113080?profile=RESIZE_710x" class="align-center"/></a></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Com pequenas alterações no código, é possível aumentar a precisão da medição do Fluxo de água. Essencialmente isto consiste em mover a "<em><strong>Janela de Amostragem</strong></em>" para dentro da <em><strong>ISR</strong></em> que é cadenciada pelos pulsos do <em><strong>Sensor de Fluxo</strong></em>, e gerar um evento sinalizando a amostragem e disponibilizando a Contagem dos Pulsos. Mas talvez para uma medição inicial do Fluxo, a precisão atual provavelmente será satisfatória (por isso não fiz esta implementação "mais precisa").</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Observe que utilizei a <span style="text-decoration: underline;"><em>mesma</em></span> <em><strong>LIB LCD I2C</strong></em> que vc disse estar usando. Isto justamente para facilitar as coisas. No entanto, eu aconselho que vc utilize uma outra LIB I2C mais comum no mundo <em><strong>Arduino</strong></em>. Claro, se isso for possível. Caso venha a fazer isso, apenas duas ou três linhas de código teriam que ser alteradas (no instanciamento do LCD I2C e usar o método "begin" ao invés do "init"). Mas isso não é necessário, se vc estiver satisfeito com a performance da LIB atual.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre seu código original não ter funcionado, veja o porquê: vc criou no "<em><strong>loop</strong></em>" uma "<em><strong>Janela de Amostragem</strong></em>" de <em><strong>1 segundo</strong></em>, usando o <span style="text-decoration: underline;"><em>habilitar</em></span> e <span style="text-decoration: underline;"><em>desabilitar</em></span> as <em><strong>IRQs</strong></em> (<em><strong>Interrupções</strong></em>). Isto não está errado, mas não é a técnica mais adequada, e não irá funcionar em todos os cenários. Quando vc desabilita as Interrupções, algumas funções que precisam delas, não irão funcionar adequadamente. É o caso do <em><strong>I2C</strong></em>: a LIB I2C do <em><strong>Arduino</strong></em> (a "<em><strong>Wire</strong></em>"), é cadenciada por Interrupções, e além disso os eventos que geram estas IRQs são temporizados e únicos, ou seja, se ocorreu e vc não tratou, já era: alguma parte no código vai ficar a "ver navios", e no caso do <em><strong>I2C</strong></em>, isso pode travar a execução. Então por este motivo, quando vc desabilita as IRQs e acessa o LCD I2C, certamente as funções da LIB não irão funcionar.</span></p>
<p><span style="font-size: 12pt;"> A <em><strong>Serial</strong> </em>também depende de IRQs habilitadas, mas devido à buferização dos dados e a não existência de um protocolo (o <em><strong>I2C</strong></em> tem um), permite que os dados sejam transmitidos logo que vc habilita as IRQs (o que ocorria assim que o "<em><strong>loop</strong></em>" era reiniciado no seu código original). Mas no caso de recepção via <em><strong>Serial</strong></em>, isto já não se aplica, porque se a Interrupção correspondente não for executada dentro de um certo tempo, dados recebidos via Serial serão perdidos.</span></p>
<p><span style="font-size: 12pt;"> Então como vc vê, o <em><strong>controle</strong></em> de <em><strong>habilitar/desabilitar</strong></em> <em><strong>Interrupções</strong></em> é algo que só deve ser feito se vc tiver o <em>know-how</em> de como fazê-lo. Do contrário, as coisas vão dar bem errado (ou no mínimo algum efeito colateral irá ocorrer, ainda que "imperceptível").</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> O código implementado é este aqui: <em><strong><a href="https://storage.ning.com/topology/rest/1.0/file/get/8091108276?profile=original" target="_blank" rel="noopener">"vazao_LCD_I2C_02.zip"</a></strong></em></span></p>
<p></p>
<p><span style="font-size: 12pt;"> No arquivo zipado, vc encontrará também os arquivos para <em><strong>simulação</strong></em> no <em><strong>Proteus</strong></em>, caso deseje fazer alguns experimentos. Obs.: dependendo do seu computador, o <em><strong>modelo I2C</strong></em> do <em><strong>Arduino</strong> </em>no <em><strong>Proteus</strong></em>, pode <span>eventualmente </span>travar, e isto é um problema conhecido por quem usa o <em><strong>Proteus</strong></em>.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja: o código é bem simples e te permitirá ir em frente. E não deixe que a documentação e a organização te passem outra impressão. Mas a <em><strong>organização</strong></em> e a <em><strong>documentação</strong></em> são imprescindíveis em termos de excelência profissional, e só agregam vantagens e facilidades. Então use isso a seu favor.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero ter ajudado.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Olá,
Por favor descreva as co…tag:labdegaragem.com,2020-10-29:6223006:Comment:7740902020-10-29T00:10:26.294ZRodrigo Corberahttps://labdegaragem.com/profile/RodrigoCorbera
<p>Olá,</p>
<p>Por favor descreva as conexões da sua placa (qual é mesmo? É um UNO?) com o LCD.</p>
<p>Se puder tirar uma foto do do circuito também será útil.</p>
<p></p>
<p>Sobre a inicialização do LCD:</p>
<p>void setup () {</p>
<p> lcd.init(); // inicializa o lcd -- não precisa do begin() - somente se faz isso uma vez!<br></br> lcd.backlight(); // liga o backlight<br></br> Serial.begin(9600); // inicializa a porta serial em 9600 bps</p>
<p> // codigo abaixo...</p>
<p> …</p>
<p>Olá,</p>
<p>Por favor descreva as conexões da sua placa (qual é mesmo? É um UNO?) com o LCD.</p>
<p>Se puder tirar uma foto do do circuito também será útil.</p>
<p></p>
<p>Sobre a inicialização do LCD:</p>
<p>void setup () {</p>
<p> lcd.init(); // inicializa o lcd -- não precisa do begin() - somente se faz isso uma vez!<br/> lcd.backlight(); // liga o backlight<br/> Serial.begin(9600); // inicializa a porta serial em 9600 bps</p>
<p> // codigo abaixo...</p>
<p> pinMode(2,INPUT);<br/> attachInterrupt(0,Vazao,RISING); // Se vai usar interrupções... não deve usar noInterrupts()</p>
<p>}</p>
<p></p>
<p>void loop() {<br/> contador = 0;<br/> //interrupts(); // NAO vejo pra que desabilitar ou habilitar interrupções<br/> delay(1000);</p>
<p></p>
<p> // desabilitar as interrupções impede seu sketch de funcionar corretamente...<br/> //noInterrupts(); // NAO vejo pra que desabilitar ou habilitar interrupções<br/> <br/> <br/> calculoVazao= (contador * 2.25);<br/> fluxoAcumulado = fluxoAcumulado + (calculoVazao / 1000);<br/> metroCubico = fluxoAcumulado / 1000;<br/> ContaAgua = metroCubico * 3,59;<br/> calculoVazao = calculoVazao * 60;<br/> calculoVazao = calculoVazao / 1000;</p>
<p></p>
<p><br/> Serial.println("Litros por minuto : "); // Serial depende das interrupções estarem habilitadas!<br/> Serial.println(calculoVazao);<br/> Serial.println("Gasto total L :");<br/> Serial.println(fluxoAcumulado);<br/> Serial.println("Metros cubicos totais : ");<br/> Serial.println(metroCubico);<br/> Serial.println("R$ : ");<br/> Serial.println(ContaAgua);</p>
<p> //lcd.init(); // NAO se faz isso no loop()<br/> //lcd.backlight(); // NAO se faz isso no loop()<br/> </p>
<p> lcd.clear();<br/> lcd.setCursor(0,0);<br/> lcd.print("Litros p/m");<br/> lcd.print(calculoVazao);</p>
<p><br/>}</p>
<p></p>
<p></p>
<p>void Vazao() {<br/> contador ++;</p>
<p>}</p> 1.o problema é que o seguinte…tag:labdegaragem.com,2020-10-28:6223006:Comment:7738922020-10-28T19:55:37.971ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>1.o problema é que o seguinte quando eu coloco a parte da programação referente ao display no Arduíno nem o sensor mostra os dados no monitor serial e nem o display passa informação</p>
<p></p>
<p>2.o link da biblioteca que usei foi esse aqui <a href="https://drive.google.com/file/d/1bSa5tyCN3MOfJj4zkT1RD-bnLCxr6tFv/view" target="_blank">https://drive.google.com/file/d/1bSa5tyCN3MOfJj4zkT1RD-bnLCxr6tFv/view</a></p>
<p></p>
<p>3. fiz a modificação mas continuo com o msm…</p>
<p>1.o problema é que o seguinte quando eu coloco a parte da programação referente ao display no Arduíno nem o sensor mostra os dados no monitor serial e nem o display passa informação</p>
<p></p>
<p>2.o link da biblioteca que usei foi esse aqui <a href="https://drive.google.com/file/d/1bSa5tyCN3MOfJj4zkT1RD-bnLCxr6tFv/view" target="_blank">https://drive.google.com/file/d/1bSa5tyCN3MOfJj4zkT1RD-bnLCxr6tFv/view</a></p>
<p></p>
<p>3. fiz a modificação mas continuo com o msm problema </p>
<p></p>
<p></p>