LED que liga se tiver vazão por muito tempo - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-28T23:20:43Zhttps://labdegaragem.com/forum/topics/led-que-liga-se-tiver-vaz-o-por-muito-tempo?commentId=6223006%3AComment%3A793803&xg_source=activity&feed=yes&xn_auth=noOlá Elcids.
Eu já adicionei…tag:labdegaragem.com,2020-11-22:6223006:Comment:7943242020-11-22T20:36:09.519ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Olá Elcids.</p>
<p></p>
<p> Eu já adicionei ao protótipo a parte referente a sinalização e ela esta funcionando perfeitamente. Uma coisa que eu mudei foi a logica referente a contagem da vazão instantânea, eu andei pesquisando e achei o DataSheet do sensor que estou utilizando e fiz as mudanças de acordo com ele. Vou deixar o arquivo PDF do DataSheet anexado pra você dar uma olhada.…</p>
<p></p>
<p></p>
<p>Olá Elcids.</p>
<p></p>
<p> Eu já adicionei ao protótipo a parte referente a sinalização e ela esta funcionando perfeitamente. Uma coisa que eu mudei foi a logica referente a contagem da vazão instantânea, eu andei pesquisando e achei o DataSheet do sensor que estou utilizando e fiz as mudanças de acordo com ele. Vou deixar o arquivo PDF do DataSheet anexado pra você dar uma olhada.</p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/8205096053?profile=original" target="_blank" rel="noopener">g3_4_water_flow_sensor_-_wiki.pdf</a></p>
<p></p>
<p>E também algumas fotos do protótipo, por enquanto coloquei os 2 LED'S e o botão de reset em uma protoboard mas só para teste<a href="https://storage.ning.com/topology/rest/1.0/file/get/8205087088?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8205087088?profile=RESIZE_710x" class="align-full"/></a><a href="https://storage.ning.com/topology/rest/1.0/file/get/8205087875?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8205087875?profile=RESIZE_710x" class="align-full"/></a></p> olá J. Leonardo.
Nenhu…tag:labdegaragem.com,2020-11-21:6223006:Comment:7938032020-11-21T12:24:37.716ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Nenhum agradecimento é necessário. Apenas espero que os pontos descritos no meu primeiro post neste tópico, tenham sido alcançados. Espero que as informações aqui postadas ajudem a quem precisar de orientação, e se esse alguém aprender mais com o conteúdo aqui colocado, e for além, então melhor ainda.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Se possível, nos atualize…</span></p>
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Nenhum agradecimento é necessário. Apenas espero que os pontos descritos no meu primeiro post neste tópico, tenham sido alcançados. Espero que as informações aqui postadas ajudem a quem precisar de orientação, e se esse alguém aprender mais com o conteúdo aqui colocado, e for além, então melhor ainda.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Se possível, nos atualize aqui conforme seus testes evoluem. Isto também é importante para outras pessoas também se orientarem.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Eu publicarei aqui neste tópico uma versão com uma pequena melhoria em relação à precisão da medição da Vazão instantânea, onde irei mostrar o que mudou no código para se obter essa melhoria, e como ela pode ser mensurável (ou seja, qual o real efeito da mesma). Mas antes dessa publicação, seria preferível ter algum retorno de como o Sistema evoluiu com vc em termos de funcionamento (ou seja se vc alcançou os resultados que esperava).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Abrçs</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Olá Ecilds.
Fico até sem je…tag:labdegaragem.com,2020-11-20:6223006:Comment:7932562020-11-20T17:13:25.646ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Olá Ecilds.</p>
<p> Fico até sem jeito pra agradecer por essa verdadeira aula que você deu, queria agradecer por toda a atenção e tempo que você se dispôs a me ajudar no projeto e também pela forma altamente detalhada e técnica com que você explicou cada processo que você implementou, você tem realmente uma didática incrível.</p>
<p> Eu li toda a publicação e consegui entender bem cada passo do projeto, você alem do projeto trouxe informações bastante interessantes que planejo pesquisar…</p>
<p>Olá Ecilds.</p>
<p> Fico até sem jeito pra agradecer por essa verdadeira aula que você deu, queria agradecer por toda a atenção e tempo que você se dispôs a me ajudar no projeto e também pela forma altamente detalhada e técnica com que você explicou cada processo que você implementou, você tem realmente uma didática incrível.</p>
<p> Eu li toda a publicação e consegui entender bem cada passo do projeto, você alem do projeto trouxe informações bastante interessantes que planejo pesquisar mais sobre futuramente. Com sua explicação consegui abrir a mente pra novas coisas que posso estar fazendo para melhorar o projeto ainda mais.</p>
<p> Agradeço a dica referente ao Bluetooth e vou pesquisar mais sobre o SoftSerial que você falou. Consegui desenvolver um APP bem básico com o que eu já tinha, ele apenas mostrava os valores que apareciam no monitor serial, agora com essa implementação vou melhorar ele e deixar bem mais informativo.</p>
<p> Novamente agradeço a sua ajuda e vou pesquisar ainda mais para conseguir aprimorar meus conhecimentos na área. Como falei futuramente planejo comprar os módulos de cartão SD e o RTC, para poder armazenar esses dados e atribuir uma marcação de tempo a cada medida, para que assim consiga fazer gráficos mais detalhados sobre o consumo de água. E quando fizer isso postarei aqui no fórum o resultado final.</p>
<p>Abrçs,</p>
<p>J. Leonardo</p> Nota: esta é a continuação d…tag:labdegaragem.com,2020-11-20:6223006:Comment:7928762020-11-20T04:27:37.722ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p></p>
<p><span style="font-size: 14pt;"><span style="text-decoration: underline;"><em><strong>Nota</strong></em></span>: esta é a continuação do post ( <a href="http://labdegaragem.com/xn/detail/6223006:Comment:793111" rel="nofollow" target="_self">"<em><strong>link</strong></em>"</a> ):</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Para o controle dos dados a serem exibidos no <em><strong>Display</strong></em>, o J. Leonardo usou originalmente uma seleção tipo "Menu", e…</span></p>
<p></p>
<p><span style="font-size: 14pt;"><span style="text-decoration: underline;"><em><strong>Nota</strong></em></span>: esta é a continuação do post ( <a rel="nofollow" href="http://labdegaragem.com/xn/detail/6223006:Comment:793111" target="_self">"<em><strong>link</strong></em>"</a> ):</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Para o controle dos dados a serem exibidos no <em><strong>Display</strong></em>, o J. Leonardo usou originalmente uma seleção tipo "Menu", e conforme se aciona os <em><strong>Botões</strong></em> "<em><strong>Up</strong></em>" ou "<em><strong>Down</strong></em>", se seleciona quais dados são atualmente mostrados. Originalmente, eram exibidos 4 opções (<em><strong>Vazão instantânea</strong></em> em Litros/minuto, <em><strong>Fluxo acumulado</strong></em> em Litros, <em><strong>consumo total</strong></em> em metros cúbicos, e o <em><strong>valor da conta de água</strong></em> em R$), mas com a inclusão do cálculo da <em><strong>Vazão Média</strong></em>, esta informação também foi incluída para ser exibida, e dessa forma a seleção no Display tem agora 5 opções. Eu mantive a denominação original das opções, que eram chamadas de "<em><strong>Menu 1</strong></em>", "<em><strong>Menu 2</strong></em>", etc. Mas reformulei a forma como isso é implementado, para facilitar a alteração das opções (seja deletar alguma, seja acrescentar alguma outra). A definição das opções para exibir no Display, podem ser vistas 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><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196931885?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196931885?profile=RESIZE_710x" class="align-center" width="558" height="283"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Trata-se de uma <em><strong>Lista Enumerada</strong></em> (via <em>statement</em> "<em><strong>enum</strong></em>"), com a opções de exibição. A ordem de exibição é exatamente a que se encontra na Lista. Assim se for colocado "<em><strong>Menu_3</strong></em>" antes de "<em><strong>Menu_2</strong></em>", será esta a ordem de exibição. Notar que é preciso definir qual o <em><strong>primeiro item </strong><strong>exibido</strong></em> e qual o <em><strong>último item exibido</strong></em> (neste caso o "<em><strong>Menu_1</strong></em>" e o "<em><strong>Menu_5</strong></em>"). Como explicado nos comentários no código mostrado na figura anterior, o primeiro item da Lista deve ser o valor "<strong><em>nenhum_item</em></strong>", embora este item nunca seja usado (o motivo disto é simples mas muito técnico, e por isso não entrarei em detalhes, mas caso alguém queira saber, basta perguntar).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Caso em algum momento se deseje saber no código qual o <em><strong>item atualmente selecionado</strong></em> para ser exibido no Display, basta consultar a <em>variável</em> "<em><strong>item_menu</strong></em>". Esta <em>variável</em> é definida conforme mostrado 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><span style="font-size: 12pt;"> <a href="https://storage.ning.com/topology/rest/1.0/file/get/8196935880?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196935880?profile=RESIZE_710x" class="align-center" width="552" height="167"/></a></span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Na definição, também é especificado qual o valor inicial que esta variável assume quando o Sistema é iniciado (após ser ligado ou após um RESET), e claro, é o valor que foi definido para "<em><strong>primeiro_item_Menu</strong></em>".</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Como dito anteriormente, também é exibido no Display, <em><strong>mensagens de alerta</strong></em> para a <em><strong>Vazão Limite</strong></em> (se houver um alerta). Esta mensagem é exibida a intervalos regulares definidos, e essa exibição dura um tempo também definido. Após terminado esse tempo de exibição, então o Sistema volta a exibir no Display o item atualmente selecionado que estava sendo exibido normalmente. O mecanismo é cíclico, sendo assim repetido no intervalo definido. A figura a seguir mostra a definição do intervalo de tempo entre exibições da mensagem de alerta e quanto tempo dura tais exibições:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196941265?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196941265?profile=RESIZE_710x" class="align-center" width="541" height="194"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Os dois períodos de tempo estão especificados em segundos. Na definição mostrada na figura anterior, se houver um alerta, a cada 15 segundos será exibida no Display uma mensagem de alerta e cada exibição será de 3 segundos.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Para otimizar a exibição no Display, o Sistema só atualiza o mesmo quando é realmente necessário. Isto é particularmente importante se a <em><strong>Interface</strong></em> com o <em><strong>Display</strong></em> for via <em><strong>I2C</strong></em>, que é muito mais lenta que a <em><strong>Interface Paralela</strong></em> (pode ser de 10 a 40 vezes mais lenta). Para tal, <em>apenas</em> <em>quando novos dados estão disponíveis</em>, o Sistema <em><strong>requisita</strong></em> que o Display seja atualizado. Como os dados são atualizados a segundo (devido à taxa de amostragem da Vazão instantânea), então temos uma atualização do Display por segundo. A requisição é feita através de uma <em><strong>Flag booleana</strong></em>, que quando setada em "<em><strong>true</strong></em>" indica que o Display deve ser atualizado. Então quando a função que atualiza o Display detecta que tal Flag foi setada, ela faz a atualização conforme a informação atualmente sendo exibida (claro, após fazer essa detecção, esta função reseta a Flag para "false"). É esta mesma função que também verifica que uma mensagem de alerta deve ser exibida (e neste caso isso depende apenas de que o alerta esteja vigente e que seja o momento de exibir a mensagem de alerta).</span></p>
<p><span style="font-size: 12pt;"> A definição da <em><strong>Flag booleana</strong></em> de <em><strong>requisição de atualização do Display</strong></em> é mostrada 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><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196945089?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196945089?profile=RESIZE_710x" class="align-center" width="509" height="129"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> O valor inicial da Flag é setado em "true", o que força uma atualização imediata do Display mesmo que uma amostragem da Vazão ainda não tenha sido obtida (embora uma atualização explícita também seja feita no "<em><strong>setup</strong></em>" do <em><strong>Arduino</strong></em>).</span></p>
<p><span style="font-size: 12pt;"> Como utilizar esta Flag? Quando vc expandir o código, use a mesma técnica, setando a Flag e atualizando o Display apenas quando necessário.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> No código que eu publiquei no tópico anterior do J. Leonardo, para a medição da Vazão e cálculo dos parâmetros relacionados, eu implementei algo que lembrava uma <em><strong>Máquina de Estados</strong></em> para fazer estas operações. Mas a rigor eu não posso assim classificar porque nem todos os elementos de uma <em><strong>Máquina de Estados</strong></em> estavam definidos naquele código.</span></p>
<p><span style="font-size: 12pt;"> Nesta nova implementação, usei de fato uma <em><strong>Máquina de Estados</strong></em> para controlar aquelas mesmas operações. Isto torna o processo mais simples e permite que quaisquer mudanças no funcionamento sejam facilmente implementadas. Para isto, apenas <em><strong>dois estados</strong></em> seriam necessários: um para esperar e obter uma amostra da Vazão, e outro estado para calcular a Vazão e os demais parâmetros relacionados. Mas acrescentei um estado a mais, apenas para fazer uma inicialização sistemática do funcionamento do processo (ou seja, este estado é executado apenas uma única vez logo que a Máquina inicia, e depois não é mais executado).</span></p>
<p><span style="font-size: 12pt;"> A figura a seguir mostra a definição destes estados:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196945493?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196945493?profile=RESIZE_710x" class="align-center" width="512" height="181"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> O controle do processo de medição da Vazão e cálculo dos parâmetros relacionados, ou seja, a <em><strong>execução</strong></em> da <em><strong>Máquina de Estados</strong></em>, pode ser vista 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><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196951887?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196951887?profile=RESIZE_710x" class="align-center" width="512" height="599"/></a> </span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> A função que executa a <em><strong>Máquina de Estados</strong></em> é a "<span style="font-size: 10pt;"><strong><em>executa_MAQ_Monitorar_Vazao</em></strong></span>", e sua chamada é feita no "<em><strong>loop</strong></em>" do <em><strong>Arduino</strong></em>. Para quem não está familiarizado com o funcionamento de <em><strong>Máquinas de Estados</strong></em>, é interessante comparar esta função com o processo do tópico "anterior" do J. Leonardo e que foi implementado no "<em><strong>loop</strong></em>" do <em><strong>Arduino</strong></em>, pois certamente isso agregará um bom know-how. Como dito, o funcionamento é muito simples, mas extremamente técnico e rigoroso, e por isso mesmo muito eficiente e confiável (ou seja, livre de "bugs").</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> No "<em><strong>setup</strong></em>" do <em><strong>Arduino</strong></em>, não há nenhuma novidade. Mas é importante observar a sequência em que as coisas vão sendo inicializadas para preparar o Sistema para o pleno funcionamento. Também deve-se notar a "limpeza" do processo executado no "setup", evitando-se deixar ali, linhas e linhas de código detalhado (ou talvez melhor dizer "espalhado"). Para conseguir isto, as inicializações são feitas em funções específicas para cada elemento que precisa ser inicializado, deixando claro no "<em><strong>setup</strong></em>" o que está sendo feito e a sequência em que isto é feito. Isto também facilita futuras alterações no funcionamento do Sistema, devido à melhor organização. O "<em><strong>setup</strong></em>" pode ser visto 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><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196952867?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196952867?profile=RESIZE_710x" width="516" height="396" class="align-center"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Finalmente, no "<em><strong>loop</strong></em>" do <em><strong>Arduino</strong></em>, graças a toda a metodologia que foi usada na implementação do restante do código, podemos ver facilmente todos os processos que são <em><strong>continuamente executados</strong></em> e que o mantém o Sistema funcionando de forma simples e robusta. Isto pode ser visto na figura a seguir, que mostra 5 processos sendo executados no "<em><strong>loop</strong></em>" do <em><strong>Arduino</strong></em>:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196953287?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196953287?profile=RESIZE_710x" class="align-center" width="544" height="197"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> É interessante notar que mesmo que se altere a sequência de execução dos processos no "<em><strong>loop</strong></em>" do <em><strong>Arduino</strong></em>, ainda assim o Sistema funcionará corretamente. Isto é devido à toda a técnica usada na implementação (como uso de <em><strong>Flags de sinalização</strong></em>, <em><strong>Flags de requisição</strong></em>, Processos "fechados", etc, além da própria <em><strong>Máquina de Estados</strong></em>). Mas obviamente, há uma sequência lógica que pode ser percebida, e o bom senso nos diz que é melhor deixar a execução seguir conforme esta sequência lógica, pois isto irá facilitar o entendimento do funcionamento do Sistema, o que facilitará muito o nosso trabalho.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Algumas considerações finais:</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><strong><em>1)</em></strong></span> nesta implementação, observar que apenas no "<em><strong>setup</strong></em>" do <em><strong>Arduino</strong> </em>e eventualmente em alguma função de inicialização (chamada no próprio "<em><strong>setup</strong></em>"), é que se utiliza a função "<em><strong>delay</strong></em>" do <em><strong>Arduino</strong></em>. Então <em>não utilize</em> o "<em><strong>delay</strong></em>" fora destas áreas. E cuidado com a enorme quantidade disponível na Internet, de Bibliotecas que fazem uso deliberado do "delay", provocando "travamento" da execução de todo o Sistema (infelizmente o "pessoal" parece que escreve as Bibliotecas esquecendo que o restante do Sistema precisa continuar executando).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><strong><em>2)</em></strong></span> sobre a simulação no <em><strong>Proteus</strong></em>, sempre é bom lembrar que dependendo do Computador, o <em><strong>I2C</strong></em> do <em><strong>PCF8574 </strong></em> pode "travar" com mais frequência. Pelas minhas investigações, o problema se restringe realmente ao <em><strong>PCF8574</strong></em>, pois com outros dispositivos I2C isto não ocorre. A performance da simulação no Proteus também cai sensivelmente quando se acessa o PCF8574, e isto afeta a simulação de outros circuitos que não tem relação alguma com o I2C. Assim a simulação do LCD via I2C no Proteus pode exigir uma certa dose de paciência.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><strong><em>3)</em></strong></span> sobre acrescentar o módulo <em><strong>Bluetooth HC-05</strong></em>, isto é tranquilo de fazer. Na foto que vc publicou, parece que vc conectou na <em><strong>Serial de Hardware</strong></em> do <em><strong>UNO</strong></em> (pinos "0' e "1" do UNO), a qual é "compartilhada" com a <em><strong>Interface USB</strong></em>. Isto não está errado, mas deveria ser evitado, pois causa alguns transtornos de desenvolvimento, como o fato de vc ter que desconectar o <em><strong>sinal TX</strong></em> do <em><strong>módulo</strong> <strong>HC-05</strong></em> sempre que precisa gravar um código no UNO, além de que causa conflitos quando vc "printa" na Serial para ver no <em><strong>Terminal do Arduino</strong></em> no PC. Assim eu aconselho usar uma "<em><strong>SoftSerial</strong></em>" para evitar os problemas que mencionei. <em>Veja</em>: muita gente critica a "<em><strong>SoftSerial</strong></em>", mas é preciso saber usar adequadamente a mesma. Eu uso o <em><strong>HC-05</strong></em> com <em><strong>SoftSerial</strong> </em>e funciona perfeitamente via <em><strong>APP</strong></em> no <em><strong>Android</strong></em>, além de não afetar o funcionamento dos demais processos no código executando no <em><strong>Arduino</strong></em> (seja UNO, seja qualquer outro). Como há diversos detalhes sobre como fazer isso de forma adequada (tanto no código no Arduino como no APP no Android), não irei me estender sobre isso aqui, mas saiba que é perfeitamente factível usar no Arduino a "<em><strong>SoftSerial</strong></em>" com o <em><strong>HC-05</strong></em>.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> O código para o <em><strong>Arduino</strong></em>, incluindo os arquivos para executar a simulação no <em><strong>Proteus</strong></em>, estão aqui: <a href="https://storage.ning.com/topology/rest/1.0/file/get/8196953871?profile=original" target="_blank" rel="noopener">"<em><strong>vazao_LCD_I2C_LED_02.zip</strong></em>"</a></span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> A <em><strong>Biblioteca LCD I2C</strong></em> que o J. Leonardo usou, é esta: <a href="https://storage.ning.com/topology/rest/1.0/file/get/8196954680?profile=original" target="_blank" rel="noopener">"<em><strong>LiquidCrystal_I2C.zip</strong></em>"</a></span></p>
<p><span style="font-size: 12pt;"> Mas é simples alterar o código que postei, a fim de se usar outra <em><strong>LIB LCD I2C</strong></em> (por exemplo para usar a <em><strong>LIB I2C</strong></em> "<em><strong>padrão</strong></em>", no máximo duas linhas precisariam ser alteradas no código de Medição de Vazão).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero ter ajudado. Caso tenha alguma dúvida, não deixe de perguntar.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> olá J. Leonardo.
Descu…tag:labdegaragem.com,2020-11-20:6223006:Comment:7931112020-11-20T04:09:17.835ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Desculpe a demora em responder. Há dias concluí o design que me propus a implementar, mas a publicação é geralmente mais demorada.</span></p>
<p><span style="font-size: 12pt;"> Esse design poderá ser utilizado como referência para seu Sistema atual e suas futuras implementações. E depois de publicado este, irei fazer uma pequena melhoria em termos de desempenho na precisão do…</span></p>
<p><span style="font-size: 12pt;">olá J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Desculpe a demora em responder. Há dias concluí o design que me propus a implementar, mas a publicação é geralmente mais demorada.</span></p>
<p><span style="font-size: 12pt;"> Esse design poderá ser utilizado como referência para seu Sistema atual e suas futuras implementações. E depois de publicado este, irei fazer uma pequena melhoria em termos de desempenho na precisão do processo de medir o Fluxo (ou a <em>RPM</em> de algo em um Sistema), e publicarei aqui também.</span></p>
<p><span style="font-size: 12pt;"> Não deixe de ler todo o texto, pois há considerações importantes nele.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Lembrando que este tópico é praticamente uma continuação de outro do J. Leonardo, onde publiquei uma implementação inicial, e que está neste link: <a href="http://labdegaragem.com/forum/topics/sensor-de-vaz-o-com-display-i2c-em-conflito" target="_blank" rel="noopener">"<em><strong>Medição Vazão 1</strong></em>"</a></span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Mas antes, comentando sobre as fotos do seu Sistema, ficou bem legal, e tem até uma personalização identificando o equipamento ("<em><strong>Hidrômetro Digital</strong></em>"). Vi também que o módulo <em><strong>Bluetooth HC-05</strong></em> já está conectado no Sistema, e sobre isto, comento no final do post.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Como de costume, quando possível implemento também uma <strong><em>simulação</em></strong>, o que permite que aqueles que não tem o Hardware em mãos, possam testar, fazer experimentações, e aprender com isso.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Para a simulação, aproveitei o Sistema que eu já tinha publicado antes naquele seu outro tópico. Apenas tive que acrescentar no Hardware, a parte dos <em><strong>dois Botões de Controle</strong></em> e dos <em><strong>dois LEDs de sinalização de alertas</strong></em>. Também fiz um pequeno ajuste no circuito que "emula" o <em><strong>Sensor de Fluxo</strong></em>, a fim de que ele tivesse uma faixa de ajuste da "Vazão" mais de acordo com a faixa que vc está usando. O arquivo para simulação no <em><strong>Proteus</strong> </em>está anexado no final do post.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Então começando pela simulação, o circuito pode ser visto 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><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196874655?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196874655?profile=RESIZE_710x" class="align-center" width="824" height="690"/></a> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Na figura a seguir, pode-se ver o resultado após quase 14 segundos de simulação (este tempo é "virtual").</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196882264?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196882264?profile=RESIZE_710x" width="1330" height="748" class="align-center"/></a> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> No <em><strong>Display LCD</strong></em> é exibida a informação conforme selecionada via <em><strong>Botões</strong></em> de controle "<em><strong>Up</strong></em>" e "<em><strong>Down</strong></em>", e no <em><strong>Terminal do Arduino</strong></em> são "printados" dados a cada segundo (ou seja, a cada vez que é obtida uma nova amostragem da Vazão).</span></p>
<p><span style="font-size: 12pt;"> Nota-se que além da <em><strong>Vazão</strong></em> "<em><strong>instantânea</strong></em>", também é "printado" no Terminal do Arduino, a <em><strong>Vazão Média</strong></em> (sobre a qual falo mais adiante), a qual vai aumentando até praticamente se igualar ao valor instantâneo (como esperado).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Mas após isso, eu aumentei em "<em><strong>TP10</strong></em>" (o Trimpot para ajuste do Fluxo), para que a Vazão ficasse acima do Limite (que é <em><strong>1 L/minuto</strong></em>).</span></p>
<p><span style="font-size: 12pt;"> O tempo necessário para detectar a <em><strong>Vazão Limite</strong></em> é de <em><strong>5 minutos</strong></em> conforme o J. Leonardo especificou, ou seja, a Vazão tem que ficar acima do Limite por 5 minutos para que seja emitido um alerta. Porém, <span style="text-decoration: underline;"><em>apenas</em></span> na simulação eu diminui este tempo para <em><strong>1 minuto</strong></em>, para não ter que esperar muito para ver o resultado.</span></p>
<p><span style="font-size: 12pt;"> E este resultado pode ser visto na figura a seguir, que mostra ligado o <em><strong>LED vermelho</strong></em> "<em><strong>Alerta Vazão</strong></em>":</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196884058?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196884058?profile=RESIZE_710x" class="align-full" width="1381" height="777"/></a> </span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Nota-se também que pelo tempo decorrido, que novamente o valor da <em><strong>Vazão Média</strong></em> praticamente já igualou a <em><strong>Vazão instantânea</strong></em>.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> <em><strong>Agora falando sobre o código</strong></em>, cujo link para download está no final do post.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Um ponto importante a salientar, é que o Sistema calcula <em>continuamente</em> a <em><strong>Vazão Média</strong></em>, e usa esse valor como referência para determinar se a <em><strong>Vazão Limite</strong></em> (no caso, <em><strong>1 L/minuto</strong></em>) foi excedida (claro, após se manter assim por tempo determinado). Isso é necessário porque a <em><strong>Vazão</strong></em> "<em><strong>instantânea</strong></em>" terá variações, o que poderá impedir o Sistema de detectar o limite e emitir um alerta. <span style="text-decoration: underline;"><em>Exemplo</em></span>: a <em><strong>Vazão Limite</strong></em> é de <em><strong>2 L/minuto</strong></em> e a <em><strong>Vazão instantânea</strong></em> está em <em><strong>2,1 L/min</strong></em> a algum tempo, mas cai por <em><strong>3 segundos</strong></em> para <em><strong>1,9 L/min</strong></em>, e em seguida volta a subir indo para <em><strong>2,3 L/min</strong></em>. Neste caso, quando a Vazão caiu momentaneamente para <em><strong>1,9 L/min</strong></em>, isto interromperia a contagem de tempo para emissão de um alerta, o que seria um problema caso essas quedas ficassem ocorrendo e impedindo o alerta de ser emitido. Usando a <em><strong>Vazão Média</strong></em>, diminui-se a possibilidade desse problema, uma vez que variações momentâneas na Vazão, terão efeito <span>menor</span> no valor da <em><strong>Vazão Média</strong></em>.</span></p>
<p><span style="font-size: 12pt;"> No código, você pode determinar quantas amostras irão compor a <em><strong>Vazão Média</strong></em>, conforme mostro mais adiante.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Além de usar a <em><strong>Vazão Média</strong></em> para o alerta, o código também tem uma <em><strong>tolerância</strong></em> para o valor da <em><strong>Vazão Limite</strong></em>, sendo esta tolerância sempre "para baixo" (já que não teria sentido ser também "para cima"). Exemplo: se a <em><strong>Vazão Limite</strong></em> é de <em><strong>2 L/min</strong></em>, e a <em><strong>tolerância</strong></em> é definida para <em><strong>10%</strong></em>, então o Sistema considera como valor limite efetivo, os <em><strong>2 L/min</strong></em> <span style="text-decoration: underline;"><em>menos</em></span> <em><strong>10%</strong></em> de <em><strong>2 L/min</strong></em>. Ou seja, <em><strong>2 - 0.1 x 2 = 1,8 L/minuto</strong></em>. A tolerância pode ser facilmente alterada no código (como mostro adiante), e caso não se deseje utilizá-la basta então especificar uma tolerância de 0%.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> A verificação para <em><strong>alerta</strong></em> de <em><strong>Vazão Limite</strong></em>, é temporizada, ou seja, é feita em intervalos de tempo. No código, este intervalo de tempo está especificado em segundos (como mostro logo adiante). Como resultado, esta temporização também ajuda a minimizar alertas errôneos, uma vez que pequenas variações podem até ser ignoradas pelo Sistema. Exemplo: a <em><strong>Vazão Média</strong></em> está próxima ao limite mas abaixo dele, e fica acima desse limite por 5 segundos, voltando a ficar abaixo em seguida, e como isso ocorre entre dois intervalos de verificação, a variação acaba não sendo detectada (mas seria, se fosse efetiva e ficasse mais tempo acima do limite).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Outros detalhes de definições no código, são descritos a seguir na ordem que eles aparecem no próprio código. Lembrando que logo no início do código, estão definidos os parâmetros mais significativos e que são normalmente os mais alterados em implementações diversas. A quantidade de parâmetros é um pouco extensa, e além das definições de parâmetros constantes, há também algumas <em><strong>variáveis/flags</strong></em> importantes para o funcionamento do Sistema. No texto a seguir, descrevo os tais parâmetros mais significativos e aponto algumas funções mais relevantes para o Sistema.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> A figura a seguir, mostra a definição dos fatores para cálculo da Vazão "instantânea" e da conta de água.</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196886073?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196886073?profile=RESIZE_710x" class="align-center" width="582" height="163"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> O "<strong><em>fator_Vazão</em></strong>" permite o cálculo da <em><strong>Vazão</strong></em> "<em><strong>instantânea</strong></em>" em <strong><em>mili-Litros por segundo</em></strong>. Assim no código, para se obter a Vazão em <strong><em>Litros por minuto</em></strong>, basta multiplicar a <em><strong>Vazão instantânea</strong></em> por <em><strong>60</strong></em> (já que 60 segundos= 1 minuto) e dividir por <em><strong>1000</strong></em> (já que 1000 mili-Litros = 1 Litro).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Na figura a seguir, são mostrados os parâmetros usados para determinar se o Sistema deve emitir um <em><strong>alerta de Vazão</strong></em> acima de um limite definido. A figura é auto-explicativa, uma vez que os comentários no código descrevem cada parâmetro e explicam como são usados.</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196886494?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196886494?profile=RESIZE_710x" class="align-center" width="569" height="436"/></a> </span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> O Sistema emite também um alerta quando o consumo total (o <em><strong>fluxo total acumulado</strong></em>), ultrapassa um limite estabelecido. A figura a seguir, mostra a definição deste limite, em <em><strong>metros cúbicos</strong></em>:</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196887474?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196887474?profile=RESIZE_710x" class="align-center" width="597" height="156"/></a></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Observar que como o <em><strong>fluxo é sempre cumulativo</strong></em>, não é necessário tratamento especial (como calcular um valor médio) para se detectar um limiar e consequentemente emitir um alerta.</span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Além de mensagem no <em><strong>Display LCD</strong></em>, dois <em><strong>LEDs</strong></em> são usados para sinalizar o <em><strong>alerta de Vazão Limite</strong></em> e <em><strong>alerta de fluxo total acumulado</strong></em>. A figura a seguir mostra as definições para uso destes <em><strong>LEDs</strong></em> no Sistema:</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span><span style="font-size: 12pt;"><br/><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196888474?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196888474?profile=RESIZE_710x" class="align-center" width="627" height="189"/></a></span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Sinalizar através de <strong>LED</strong> é uma forma eficiente de emitir um alerta (alertas auditivos geralmente são mais eficientes, mas nem sempre são os mais adequados devido ao "barulho" resultante). Mas é preciso considerar a <em><strong>cor</strong></em> usada para o <em><strong>alerta visual</strong></em>, neste caso a cor da luz que os LEDs emitem. Eu projetei <em><strong>Equipamentos Eletro-Médicos</strong></em> por 25 anos, e conheço bem as normas relacionadas a alertas naqueles equipamentos (normas compulsórias neste caso), onde alertas visuais devem se restringir a cores como "<em><strong>amarelo</strong></em>", "<em><strong>laranja</strong></em>", "<em><strong>vermelho</strong></em>", e tons semelhantes. Ou seja, não tem sentido sinalizar um alerta com uma cor como "<em>verde</em>" ou "<em>azul</em>" (ou mesmo "<em>branco</em>"). Aqui neste tópico não estamos tratando de <em>equipamentos médicos</em>, mas observem que o bom senso do uso das cores também se aplica de forma muito natural para sinalizarmos alertas.</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Para selecionar a informação exibida no Display, são usados dois <em><strong>Botões</strong></em> chamados de "<em><strong>Up</strong></em>" e "<em><strong>Down</strong></em>". Acredito que apenas um Botão seria suficiente para esta função, mas o J. Leonardo optou por dois. Mas além disso, um Botão a mais permite mais opções de uso, e isso certamente será necessário se as funcionalidades do código forem expandidas por quem assim desejar (é bem provável que um terceiro e um quarto Botão sejam bem vindos). Os dois Botões são definidos conforme mostra a figura a seguir:</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196890495?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196890495?profile=RESIZE_710x" class="align-center" width="625" height="218"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Como o Sistema é originalmente para o <em><strong>Arduino UNO</strong></em> (ou seja, com <em><strong>Processador</strong></em> "<em><strong>AVR</strong></em>"), o código automaticamente ligará o <em><strong>Resistor</strong></em> de <em><strong>Pullup</strong> <strong>interno</strong> </em>no pino dos Botões, caso o <em><strong>Nível Lógico</strong></em> de acionamento (com nome "<strong><em>logica_Botao_ON</em></strong>" na figura anterior) seja "<em><strong>LOW</strong></em>", assim dispensando um Pullup externo. Lembrando que o <em><strong>Pullup interno</strong></em> do <em><strong>AVR</strong></em> tem um valor com alta-tolerância, podendo ir de <em><strong>20 kΩ</strong></em> a <em><strong>50 kΩ</strong></em> (depende da tensão de alimentação, sendo que tensões mais altas neste caso implicam em impedâncias mais baixas, pois são usados MOSFETs para "construir" os Resistores de pullup). Caso o código seja usado em Sistemas com outros Processadores que permitam também "<em><strong>Pulldown</strong></em>" (como <em><strong>ESP32</strong></em>, <em><strong>STM32</strong></em>, <em><strong>Arduino Due</strong></em>, etc), então pode-se usar a mesma técnica para ligar automaticamente ou o "Pullup" ou o "PullDown" (ou mesmo nenhum deles, caso se especifique que um Resistor externo esteja sendo usado).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Para eliminar o "<em><strong>bouncing</strong></em>" (ou trepidação mecânica) resultante do acionamento de um Botão, e assim impedir acionamentos errôneos consecutivos, o Sistema implementa um "<em><strong>tempo de debouncing</strong></em>". Assim quando um Botão é acionado, o Sistema ignora qualquer outro acionamento no mesmo botão, pelo "<em><strong>tempo de debouncing</strong></em>", e isso faz com que a <em><strong>trepidação mecânica</strong></em> não tenha efeito. Como existem Botões de todo tipo no mercado e com maior ou menor <em>trepidação mecânica</em>, é preciso definir qual o tempo de "<em><strong>debouncing</strong></em>" a ser utilizado no Sistema, e isto pode ser visto na figura a seguir:</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196891475?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196891475?profile=RESIZE_710x" class="align-center" width="544" height="171"/></a> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Por razões óbvias, este tempo está especificado em unidades de <em><strong>mili-segundos</strong></em>. O tempo de <em><strong>100 [ms]</strong></em> definido na figura anterior, é geralmente mais que suficiente mesmo para os "piores" Botões, mas pode-se diminuir ou aumentar o mesmo caso seja desejado. Este tempo não tem efeito na detecção imediata do Botão, ou seja, quando um Botão é acionado ele será imediatamente detectado. Claro, se o tempo for especificado como "0" (zero), então o "<em><strong>tempo de debouncing</strong></em>" não terá efeito (ou seja, as trepidações mecânicas no acionamento provocarão diversos acionamentos).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Como já dito, o Sistema emite dois alertas: um de <em><strong>Vazão Limite</strong></em> e um alerta de <em><strong>Fluxo acumulado</strong></em> (um "<em>alerta de consumo</em>" total). Para ambos, há LEDs específicos para emissão de alerta visual. O alerta de Vazão Limite também é exibido <em>periodicamente</em> no Display (conforme descrito mais adiante). Caso seja desejado emitir outras formas de alerta, pode-se testar as <em><strong>Flags</strong></em> específicas para cada um dos dois alertas. Estas Flags são variáveis do tipo "<em><strong>bool</strong></em>" (ou "boolean"), e assumem o valor "<em><strong>true</strong></em>" ou o valor "<em><strong>false</strong></em>". Quando um alerta é emitido, a <em><strong>Flag</strong></em> respectiva vai ao valor "<em><strong>true</strong></em>". As variáveis correspondentes a estas Flags, são definidas conforme mostrado na figura a seguir:</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196894255?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196894255?profile=RESIZE_710x" class="align-center" width="593" height="133"/></a></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Logo, estas Flags podem ser testadas a qualquer momento e em qualquer ponto do código, para se saber se o alerta correspondente foi emitido. Lembrando que o <em><strong>consumo acumulado</strong></em> só aumenta, e portanto quando fica além do limite definido para alerta, este alerta passa a ser constante, ou seja, o LED de alerta fica permanentemente ligado e a Flag de alerta passa a ficar em "<em><strong>true</strong></em>" (e não volta mais para "false").</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> Também como dito antes, o Sistema calcula continuamente a <em><strong>Vazão Média</strong></em> em <em><strong>Litros por minuto</strong></em>, e para isso ele mantém um <em><strong>registro</strong></em> das <em><strong>últimas "N" amostras da Vazão instantânea</strong></em>. Esta quantidade "<em><strong>N</strong></em>" é definida conforme mostrado na figura a seguir:</span></p>
<p style="text-align: center;"><span><strong><em> (clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/8196894096?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8196894096?profile=RESIZE_710x" class="align-center" width="633" height="189"/></a> </span></p>
<p><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"> </span></p>
<p><span style="font-size: 12pt;"> A <em><strong>Vazão Média</strong></em> será então o resultado do <em><strong>somatório das últimas "N" amostras</strong></em>, <em><strong>dividido pelo valor</strong></em> "<em><strong>N</strong></em>". No código este total de registros está definido como sendo <em><strong>10</strong></em> (dez), mas pode ser alterado conforme desejado (lembrando que quanto maior a quantidade de registros, mais memória RAM é usada para manter estes registros, e mais tempo o Sistema gasta para fazer os cálculos da <em>Vazão Média</em>).</span></p>
<p><span style="font-size: 12pt;"> </span></p>
<p></p>
<p><span style="font-size: 12pt;"> <span style="font-size: 14pt;"><span style="text-decoration: underline;"><em><strong>Nota</strong></em></span>: <em>a página do post não comporta o restante do texto, então estou continuando logo a seguir</em>:</span></span></p>
<p></p> olá RV.
Sua contribuiç…tag:labdegaragem.com,2020-11-20:6223006:Comment:7930072020-11-20T02:14:45.904ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá RV.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sua contribuição aqui é inestimável. E mesmo seus mais de 6 mil posts, não refletem sua colaboração, que é equivalente a 10 vezes isso.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero que em breve possamos fazer uma parceria de colaboração aqui.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p>
<p><span style="font-size: 12pt;">olá RV.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sua contribuição aqui é inestimável. E mesmo seus mais de 6 mil posts, não refletem sua colaboração, que é equivalente a 10 vezes isso.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero que em breve possamos fazer uma parceria de colaboração aqui.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Boa noite JL,
como você está…tag:labdegaragem.com,2020-11-08:6223006:Comment:7841172020-11-08T21:52:17.545Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Boa noite JL,</p>
<p>como você está muito bem assessorado pelo EC, não tenho tido necessidade de dar meus palpites.</p>
<p>Agradeço muito ao EC, quando cita meu nome referenciando ao fato da minha colaboração aqui no LdG.</p>
<p>Eu considero que tudo que aprendi foi de alguma forma com a ajuda de alguém.</p>
<p>Sejam meus professores, sejam artigos de revistas técnicas escrito por alguém,, sejam papos com amigos do</p>
<p>trabalho ou pessoais,</p>
<p>Enfim não é nada pra que eu leve embora…</p>
<p>Boa noite JL,</p>
<p>como você está muito bem assessorado pelo EC, não tenho tido necessidade de dar meus palpites.</p>
<p>Agradeço muito ao EC, quando cita meu nome referenciando ao fato da minha colaboração aqui no LdG.</p>
<p>Eu considero que tudo que aprendi foi de alguma forma com a ajuda de alguém.</p>
<p>Sejam meus professores, sejam artigos de revistas técnicas escrito por alguém,, sejam papos com amigos do</p>
<p>trabalho ou pessoais,</p>
<p>Enfim não é nada pra que eu leve embora para o além.</p>
<p>Se eu conseguir transferir para outros amigos meu conhecimento e experiências, irei feliz.</p>
<p>RV</p> Ola novamente Elcids.
Eu r…tag:labdegaragem.com,2020-11-08:6223006:Comment:7837552020-11-08T15:32:53.089ZJosé Leonardohttps://labdegaragem.com/profile/JoseLeonardo
<p>Ola novamente Elcids.</p>
<p></p>
<p> Eu realmente sou muito grato a ajuda que tanto você quanto o RV me deram no projeto, com isso consegui aprender bastante coisa sobre Arduíno e programação, eu li atentamente suas explicações e a programação no outro post e isso me fez aprender muita coisa legal que usei pra tentar implementar o projeto.</p>
<p> Inicialmente eu iria fazer algo bem simples mesmo, mas com a ajuda de vcs pude pensar um pouco alem. Andei dando uma pesquisada em como poderia…</p>
<p>Ola novamente Elcids.</p>
<p></p>
<p> Eu realmente sou muito grato a ajuda que tanto você quanto o RV me deram no projeto, com isso consegui aprender bastante coisa sobre Arduíno e programação, eu li atentamente suas explicações e a programação no outro post e isso me fez aprender muita coisa legal que usei pra tentar implementar o projeto.</p>
<p> Inicialmente eu iria fazer algo bem simples mesmo, mas com a ajuda de vcs pude pensar um pouco alem. Andei dando uma pesquisada em como poderia fazer pra armazenar esses dados e vou futuramente colocar um modulo de cartão SD e também um de data e hora (RTC DS3231), com isso vou poder deixar o projeto bem completinho.</p>
<p> A questão do modulo Bluetooth que coloquei foi um teste que estava fazendo com um app bem simples que estava tentando desenvolver no site Kodular. O app serviria apenas para poder mostrar os dados que aparecem no monitor serial, mas futuramente planejo colocar alguns dados mais precisos, como gráficos de consumo de água e etc. mas ainda estou pesquisando a respeito.</p>
<p> Novamente agradeço a sua atenção e sua ajuda, que foi muito importante pra minha evolução nessa área.Vou deixar agora algumas fotos do protótipo ( ainda falta colocar algumas coisas que ja estão na simulação como os leds e o botão de reset)<a href="https://storage.ning.com/topology/rest/1.0/file/get/8136790460?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8136790460?profile=RESIZE_710x" class="align-full"/></a> <a href="https://storage.ning.com/topology/rest/1.0/file/get/8136788458?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/8136788458?profile=RESIZE_710x" class="align-full"/></a></p>
<p>Abrçs,</p>
<p>J. Leonardo</p> olá novamente J. Leonardo.
…tag:labdegaragem.com,2020-11-08:6223006:Comment:7833862020-11-08T09:02:12.240ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá novamente J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Antes de tudo, gostaria de parabenizá-lo por ter avançado em seu Sistema. Isto também mostra que o objetivo que visamos quando colaboramos aqui, tem resultado. Eu digo isto também por experiência própria, pois quando comecei <span>nesta área a mais de 37 anos atrás, eu procurei seguir os exemplos realmente significativos (com critério e procurando ter bom…</span></span></p>
<p><span style="font-size: 12pt;">olá novamente J. Leonardo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Antes de tudo, gostaria de parabenizá-lo por ter avançado em seu Sistema. Isto também mostra que o objetivo que visamos quando colaboramos aqui, tem resultado. Eu digo isto também por experiência própria, pois quando comecei <span>nesta área a mais de 37 anos atrás, eu procurei seguir os exemplos realmente significativos (com critério e procurando ter bom senso).</span></span></p>
<p><span style="font-size: 12pt;"><span> E tenho certeza que todos que colaboram aqui ficam contentes quando estes resultados aparecem (em especial, não posso deixar de mencionar o <em><strong>RV</strong></em> (o "<em><strong>Minerin</strong></em>"), que tem colaborado aqui de forma inigualável).</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"><span> E como seu Sistema foi baseado no código que sugeri no seu tópico anterior, irei postar uma "nova" implementação, partindo deste seu código atual. Mas para um "upgrade" realmente significativo, farei uma implementação "elegante" e muito técnica, que possa permitir vc ir ainda mais além, expandindo-a conforme vc evolui com o Sistema, e assim progredindo com seus conhecimentos na área. Isto também permitirá vc perceber como técnicas simples e clássicas tem resultados impressionantes quando usadas adequadamente.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"><span> Já olhei seu código, e já visualizei as técnicas a serem usadas. A única coisa que não ficou claro, é a figura que vc postou, pois ali tem um <em><strong>módulo Bluetooth HC-05</strong></em>, e no seu código não há nada relacionado.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"><span> Assim que eu tiver elaborado a implementação, postarei aqui, com todas as informações necessárias que permitam evoluir o Sistema.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"><span> Abrçs,</span></span></p>
<p><span style="font-size: 12pt;"><span> Elcids</span></span></p>