Usando o Sensor de Fluxo de Água




Introdução

Em indústrias, reservatórios de água, tanques e caldeiras costumam ser controlados automaticamente por sensores de nível com o auxílio de válvulas. Entretanto, em algumas aplicações mais sofisticadas, é necessário manter um controle de fluxo de entrada constante e determinado, que é identificado por meio de sensor de fluxo. De modo geral, todos os sensores de fluxo possuem um funcionamento similar, portanto é simples aprender seu conceito e estudar possibilidades de aplicação.

Neste tutorial você vai aprender a realizar a leitura de fluxo de líquidos, e a desenvolver um simples projeto de controle de volume de reservatórios.

Lista de Materiais

Conceitos Teóricos

Funcionamento do Sensor de Fluxo

O sensor de fluxo possui em seu interior um sensor de efeito Hall preso à carcaça e um ímã em seu eixo. O ímã é posicionado de modo a ter o seu pólo sul e o seu pólo norte em pé, para que a cada volta o sensor de efeito Hall identifique a mudança do pólo sul para o pólo norte, e o retorno para o pólo sul. Essa rotação e variação de pólos é o que gera os pulsos na saída de sinal deste sensor.

construction
Exemplo de Construção de Sensor de Fluxo
Fonte: Engineers Garage

Projeto Leitura de Fluxo e Volume

Nesse primeiro projeto vamos fazer uma leitura simples do sensor, além de exibir o volume total de líquido que passou por ele.

Circuito

Para começar os estudos sobre o funcionamento deste sensor, monte o circuito abaixo.

circuito-1
Circuito Elétrico

Código

Para que possamos obter as primeiras leituras do sensor, copie e carregue o código a seguir para sua placa.

Entendendo o Código

Inicialmente declaramos o pino de interrupção (INTERRUPCAO_SENSOR) e o pino em que o sensor está conectado (PINO_SENSOR). Ambas as variáveis estão atreladas ao pino digital 2, porém para a conexão de interrupção, temos que declarar o seu valor como "0" para que a biblioteca da Arduino IDE associe corretamente a interrupção ao pino digital 2.

Logo após essa definição de pinos, declaramos a variável contador, responsável por armazenar a contagem de pulsos do sensor. Em seguida definimos a variável que armazena o fator de calibração do sensor (FATOR_CALIBRACAO) sendo constante e igual a 4,5. Esta variável é utilizada para a conversão entre o fluxo (em "L/min") e a frequência da leitura (em "Hz"), e pode ser alterada para maior precisão, ou caso haja alguma divergência na leitura obtida. Fazemos o mesmo para as variáveis que receberão o valor de fluxo convertido (fluxo), e o valor de volume calculado (volume e volume_total). Por fim, a variável tempo_antes nos auxiliará a realizar a conversão de unidades e a realizar a leitura do sensor com intervalos de 1 segundo.

Na configuração do código, abrimos o monitor serial com a velocidade de 9600 bps e configuramos o pino em que o sensor está conectado como uma entrada com o resistor de pull-up interno ativado, através do comando INPUT_PULLUP. Deste modo, podemos realizar as leituras digitais dos pulsos do sensor de efeito Hall, porém sem a necessidade de um resistor de pull-up externo.

Pulando brevemente o looping do código, temos ao fim a função contador_pulso(), que é responsável somente por incrementar em uma unidade a variável contador, e que será mencionada posteriormente neste tutorial.

No looping do código, iniciamos sua execução com a condição if((millis() - tempo_antes) > 1000), que garante que todos os comandos que estão dependendo dela só sejam executados com o intervalo de 1 segundo. Dentro desta condição, desabilitamos brevemente a interrupção do pino digital 2, através do comando detachInterrupt(INTERRUPCAO_SENSOR), para não interferir no cálculo das variáveis.

O cálculo do fluxo é feito através da fórmula a seguir.

formula-conversao

O numerador da equação faz uma conversão de tempo em milissegundos para tempo em segundos para dividir a quantidade de pulsos contados. Esse produto é então dividido pelo fator de calibração, para chegar em valor em "L/min".

Após determinar a vazão, calculamos, através deste dado em "L/min", o volume total passado pelo sensor, apenas dividindo o valor de fluxo obtido por 60 segundos. Por se tratar de um fluxo em litros por minuto, ao dividirmos esse valor por um minuto (60 segundos), obtemos um fluxo em litros por segundo ("L/s"). Deste modo, podemos saber o volume total passado pelo sensor no intervalo de 1 segundo entre as leituras. A variável volume, que é utilizada, em função do fluxo, para saber o volume de líquido passado na última medição (volume = fluxo / 60), é somada à variável volume_total através do comando volume_total += volume, armazenando, deste modo, o volume total passado pelo sensor.

Após essa conversão e a exibição do volume total no monitor serial, zeramos a variável contador através do comando contador = 0, para que a leitura seja refeita. Em seguida atualizamos a contagem de tempo da variável tempo_antes através do comando tempo_antes = millis(). Esta variável é utilizada tanto para a condição de intervalo de 1 segundo, quanto para a conversão de valores em um valor de fluxo.

Entretanto, nada disso seria possível se não fosse pela última função do looping. attachInterrupt(INTERRUPCAO_SENSOR, contador_pulso, FALLING) habilita a função de interrupção do microcontrolador no pino INTERRUPCAO_SENSOR, que configuramos para ser o pino digital 2. Então, a interrupção chamará a função contador_pulso() para cada borda de descida, configurada através de FALLING, obtida com os pulsos do sensor.

O Que Deve Acontecer

Ao executar o código e manter a passagem de líquidos (ou se você assoprar o bocal do sensor por alguns instantes), você verá a contagem de fluxo em "L/min" e o volume total que passou pelo sensor, como na imagem a seguir.

resultado-1
Resultado Final

Projeto Controle de Volume

Neste projeto iremos adicionar uma lógica ao código anterior para que possamos acionar uma válvula solenóide quando o nível estiver abaixo do desejado, e então desligá-la após um determinado volume.

Circuito

Para este projeto, monte o circuito a seguir.

circuito-2
Circuito Elétrico

Atenção: tome muito cuidado ao realizar ligações elétricas com corrente alternada. Caso você não tenha conhecimento adequado para mexer na rede elétrica, peça auxílio a um profissional. A RoboCore não se responsabiliza por danos à rede elétrica e/ou à integridade física do praticante do experimento.

Note que conectamos a válvula solenóide diretamente à rede elétrica por meio do relé, porém é recomendado que você utilize algum método de proteção neste circuito para evitar picos de energia e prolongar a vida útil de seu relé. Existem diversos métodos de proteção para acionamento de cargas indutivas, por exemplo um filtro snubber, lembrando que ele deve ser devidamente dimensionado para sua melhor eficácia.

Código

Com o circuito montado corretamente, copie e carregue o código a seguir para a sua placa.

Entendendo o Código

De modo geral, o código para leitura do fluxo de líquidos é o mesmo, porém, inicialmente, adicionamos as variáveis PINO_RELE e PINO_BOTAO, que armazenam o pino em que o relé e o botão estão conectados, respectivamente. Na etapa de configuração do código, nós configuramos esses pinos de acordo com a necessidade do projeto, ou seja, o pino em que o relé está conectado é configurado como uma saída em nível lógico baixo, e o pino do botão é configurado como uma entrada.

Já entrando no looping do código, dentro da condição de intervalo de 1 segundo, adicionamos a condição if(volume_total < 10), para acionar a válvula caso o volume total passado pelo sensor seja inferior a 10 L. Caso o volume passado supere 10 L, a válvula é fechada.

Além disso, para reiniciar a contagem de volume da sistema, utilizamos outra condição (if(digitalRead(PINO_BOTAO) == HIGH)), com um debounce, para, quando o botão for pressionado, zerar a variável volume_total e reiniciar o sistema.

O Que Deve Acontecer

Ao iniciar a execução de código, o relé irá se manter acionado, já que o sensor não mediu nenhum volume passado. Então, ao identificar a passagem de um volume de 10 L, o relé será desativado, impedindo a passagem de líquidos pela válvula.

Resultado Final

Atenção: a condição de controle do acionamento do relé foi alterada para que o GIF tivesse um tamanho reduzido. Além disso, utilizamos um ventilador para que fosse mais vísivel o desacionamento do relé. Entretanto, caso você tenha seguido os passos deste tutorial cuidadosamente, a válvula solenoide irá ser fechada após 10 L passados pelo sensor.

Indo Além

Neste tutorial, para fins educacionais, utilizamos um botão para zerar o valor de volume lido, mas você pode implementar esse sistema e utilizar um Sensor de Nível de Água, que possui um funcionamento similar a um pushbutton, para zerar o volume de um tanque lido pelo sensor.

Além disso, com esse sensor, você pode fazer um monitoramento via aplicativo do consumo de água de sua residência, para que você não precise se deslocar até o relógio para isso.

Avatar