Estimar a vazão de reservatórios de fluídos (água, por exemplo) nem sempre é uma tarefa simples e barata. O uso de sensores de fluxo (comumente utilizados para esta tarefa) pode ser uma alternativa cara, uma vez que por interagir direto com o fluído em questão, exige o uso de materiais especiais, manutenção constante e, além disso, podem causar efeitos de perda de carga.
Como alternativa a este tipo de sensor, este artigo mostrará como estimar a vazão de um reservatório, utilizando para isso um simples sensor ultra-sônico de distância. Lembrando que esta ideia é extremamente barata e pode ser aplicada em alguns casos, a fim de atender quem deseja estimar a vazão de um reservatório (servindo como alternativa relevante a métodos e medições mais caros). O método aqui apresentado pode, claro, ser melhorado, servindo portanto como ponto e partida para algo mais preciso e complexo.
Sensor ultra-sônico de distância
Como funciona?
O sensor ultra-sônico de distância consiste em um sensor contendo um transmissor e um receptor ultra-sônico. Este é capaz de ser usado para mensurar distâncias com base na velocidade do som no ar e na diferença de tempo entre emissão e recepção de um sinal ultra-sônico. Observe a figura 1.
Em resumo, seu funcionamento pode ser descrito da seguinte maneira: ao ser dado o “gatilho” / trigger, o transmissor ultra-sônico emite um determinado sinal sonoro, em frequência ultra-sônica (acima da audível por seres humanos). Ao atingir um objeto, este sinal sonoro é refletido novamente para o sensor, onde é captado pelo receptor ultra-sônico. No momento da recepção, é gerado um sinal de eco / echo, indicando que um sinal ultra-sônico foi captado com sucesso. Em conhecimento da diferença de tempo entre o trigger e o echo e considerando a velocidade de propagação do som no ar (340m/s), é possível determinar a distância entre o sensor ultra-sônico e o objeto.
Em termos matemáticos:
OBSERVAÇÕES:
1) O motivo do fator 1/2 no cálculo da distância do objeto é que o tempo mensurado considera a ida e volta do sinal ultra-sônico ao sensor. Portanto, somente metade deste tempo foi necessário para o sinal ultra-sônico ser emitido pelo transmissor e atingir o objeto.
2) O sinal ultra-sônico é refletido tanto no caso de atingir objetos sólidos ou líquidos. Portanto, este tipo de técnica pode ser utilizada para mensurar a distância entre sensor e linha d´água, por exemplo.
Hardware utilizado
Para este artigo, foi utilizado o sensor ultra-sônico HC-SR04. Este sensor é muito comum no mundo maker e, além disso, tem um custo baixo no mercado. Ele pode ser usado para mensurar distâncias de até 4m, portanto este é o limite operacional do mesmo.
Este sensor opera com alimentação de 5V.
Como mensurar a vazão de um reservatório com este tipo de sensor?
Para compreender como mensurar a vazão de um reservatório com um sensor ultra-sônico, considere a seguinte situação:
Neste caso, tem-se um reservatório cilíndrico, de área superior circular de raio R. Sendo assim, a área superior seria dada por:
Considere agora que, ao longo do tempo, o nível do líquido no reservatório vai descendo. Para medir este desnível, de tempos em tempos / em intervalos pré-definidos de tempo são feitas duas medidas de distância entre sensor e linha d’água. Ou seja, neste intervalo de tempo descrito, o nível desce d metros.
Logo, em termos matemáticos, o volume que é decrescido ao longo do tempo será de:
Como a vazão é definida como volume (ou variação de volume) por tempo (ou intervalo de tempo), no caso deste exemplo a vazão é o Volume descrescido no período de tempo da medição das distâncias do sensor à linha d’água (representado aqui por d). Portanto, se o período de tempo entre as medições for de um segundo e a unidade métrica foi metros, temos a seguinte vazão:
Em suma, para calcular a vazão em um reservatório, o procedimento resumido é:
- Determinar a área superior do seu reservatório (seja o formato que for);
- Medir, em um intervalo de tempo conveniente, o quanto o nível decresceu;
- Calcular o volume decrescido neste período de tempo;
- A vazão é igual à razão do volume calculado pelo intervalo de tempo.
Observações:
– Este mesmo procedimento vale para reservatórios enchendo (resultando em uma vazão negativa nos cálculos);
– Não há restrição de forma da área superior do reservatório. Portanto, este pode ser um reservatório com área superior igual a um retângulo, círculo. O que variará é a forma de calcular a área superior de acordo com a sua forma;
– É extremamente recomendável algum tipo de filtragem na leitura das distâncias, já que a leitura pode variar um pouco (sobretudo se o líquido estiver agitado e gerando ondas em sua superfície).
Exemplo – aplicação
Hardware
Para exemplificar este post, será feito um simples projeto, utilizando os seguintes materiais:
- Arduino Uno;
- Jumpers macho-fêmea;
- Protoboard;
- Sensor ultra-sônico HC-SR04;
- Cabo USB (para alimentar o Arduino e comunicá-lo com o computador).
O circuito esquemático do projeto pode ser visto na figura 3.
Software
Segue abaixo um software de exemplo (feito para o Arduino Uno) da medição de vazão aqui explicada. No software abordado não foi usado um filtro complexo para amenizar a variação da leitura da distância entre linha d’água e sensor ultra-sônico, foi usada uma média simples, ficando aqui livre para a substituição de uma filtragem mais robusta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
/* * Medição de vazão com sensor ultrassonico * Autor: Pedro Bertoleti * Data: Janeiro/2016 * * IMPORTANTE: este projeto utiliza a biblioteca Ultrasonic * (para uso do sensor ultrasonico HC-SR04). Para baixar esta * biblioteca, utilize o seguinte link: * http://www.satellasoft.com/download/index.php?fileName=758f8ab8c3222019edd16611bf48f724 */ #include <Ultrasonic.h> //defines do projeto #define TRIGGER_PIN 12 #define ECHO_PIN 13 #define PI_APROXIMADO 3.1415927 #define NUM_MEDIDAS_DISTANCIA 100 //defines de debug //#define MOSTRA_DADOS_RAW_SENSOR #define NUM_PULA_LINHAS_SERIAL_DEGUB 80 //defines da área do reservatório: //descomentar somente o tipo de área do seu reservatório //#define RETANGULO #define CIRCULO //Se for um retangulo: #define RETANGULO_BASE 1 //[m] #define RETANGULO_ALTURA 1 //[m] //se for um circulo: #define CIRCULO_RAIO 0.05 //[m] //variaveis e objetos globais Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN); float AreaPerfilReservatorio; float VolumeTotalRetirado; //prototypes float CalculaAreaPerfilReservatorio(void); float MedeDistanciaEmMetros(void); float MediaDistancias(void); /* * Implementações */ /* * Função: cálculo da área do perfil do reservatório * Parâmetros: nenhum * Retorno: área calculada */ float CalculaAreaPerfilReservatorio(void) { float AreaCalc; #ifdef RETANGULO AreaCalc = RETANGULO_BASE * RETANGULO_ALTURA; #endif #ifdef CIRCULO AreaCalc = PI_APROXIMADO * CIRCULO_RAIO * CIRCULO_RAIO; #endif return AreaCalc; } /* * Função: Média de medidas de distância * Parâmetros: nenhum * Retorno: média das medidas de distância */ float MediaDistancias(void) { int i; float SomaMedidas; float Media; SomaMedidas = 0.0; for(i=0; i<NUM_MEDIDAS_DISTANCIA; i++) SomaMedidas = SomaMedidas + MedeDistanciaEmMetros(); Media = (SomaMedidas / NUM_MEDIDAS_DISTANCIA); return Media; } /* * Função: mede distancia em metros * Parametros: nenhum * Retorno: distancia (m) */ float MedeDistanciaEmMetros(void) { float cmMsec, DistMetros; long microsec = ultrasonic.timing(); cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); #ifdef MOSTRA_DADOS_RAW_SENSOR Serial.println("[DADOS DO SENSOR]"); Serial.print("Tempo(ms): "); Serial.print(microsec); Serial.print(", Distancia(cm): "); Serial.print(cmMsec); #endif DistMetros = (cmMsec / 100.0); return DistMetros; } void setup() { Serial.begin(9600); //calcula área do perfil (com base em parametros fornecidos nos defines) AreaPerfilReservatorio = CalculaAreaPerfilReservatorio(); VolumeTotalRetirado = 0.0; } void loop() { float DistanciaT2; float DistanciaT1; float VariacaoVazao; float VariacaoDistancia; float VolumeEmLitros; char i; //faz as medições DistanciaT1 = MediaDistancias(); delay(1000); DistanciaT2 = MediaDistancias(); VariacaoDistancia = ((DistanciaT2 - DistanciaT1) / 100); //[m] VariacaoVazao = (AreaPerfilReservatorio * VariacaoDistancia); //[m³/s] VolumeTotalRetirado = VolumeTotalRetirado + VariacaoVazao; //[m³] VolumeEmLitros = (VolumeTotalRetirado*1000.0); for (i=0; i<NUM_PULA_LINHAS_SERIAL_DEGUB; i++) Serial.println(""); Serial.println("[DADOS DA MEDIÇÃO]"); Serial.print("Variacao de vazao: "); Serial.print(VariacaoVazao); Serial.print(" m^3/s"); Serial.println(""); Serial.print("Variacao de distancia: "); Serial.print(VariacaoDistancia*100); Serial.print(" cm"); Serial.println(""); Serial.print("Volume total retirado: "); Serial.print(VolumeEmLitros); Serial.print(" l"); Serial.println(""); } |
Referências
- Artigo do site Arduino e Cia.: Medidor de distância com o sensor ultrassônico HC-SR04
- Artigo do site SatellaSoft: Arduino com sensor ultrasônico HC-SRO4
boas, preciso fazer um sistema de medida de vazão de agua (hidrometro) para avaliar a vazão mensal(consumo) de agua de um condominio e instalar o sistema em cada linha que chega em cada unidade, medindo os valores a serem enviados para um note book de modo a se fazer o levantamento de consumo por cada unidade, e devido a complexidade da localização da tubulação, teria que montar e medir a distancia; vc tem alguma coisa acerca?
ja foi feito algum teste em tanque de combustivel?
bom dia, ja foi feito algum teste em tanque de combustivel?
como faço pra alterar só pra mostra quantidade em litros estou tentando automatizar a caixa d’água
como faço pra alterar só pra mostra quantidade em litros
pra um cenario onde se tem ou a entrada, ou apenas a saida do fluido, é possivel medir o fluxo, agora por exemplo numa caixa de agua padrao de casa, onde tem o fluxo de entrada e saida ao mesmo tempo, é possivel calcular a vazao de saida?
Boa noite!
baixei tudo certinho, fiz a montagem para o teste e quando salvei no arduino e abri o monitor serial, mostra caracteres desconhecidos, o que será que fiz errado, sendo que seguí a risca as ligações e baixei o skect e a biblioteca.
Verifica a velocidade da serial que está no código e a que está no seu monitor serial. tem que ser a mesma
Boa tarde …. estou em um projoto no qual uso como supervisório o Elipse Scada, porém estou com muita dificuldade em concretizar a comunicação com o sensor.Onde posso conseguir a exata configuração deste sensor para comunicação com o elipse scada? Tens como apoiar em mais esta .
Acompanho os posts … muita aprendizagem envolvida. Parabéns
Ola Pedro muito interessante o artigo, tenho a seguinte duvida talvez muito especifica. Este sensor ele faria a medição sobre o jateamento de líquidos? Pois tenho um projeto que uma peça recebe por uma quantidade não fixa de tempo uma ducha (de baixa pressão). A ducha funcionaria o quanto tempo a peça esteja na área de ação do sensor uma vez que saia desejo que a ducha pare imediatamente, mas me pergunto se o cone de água da ducha aferiria alguma medida no sensor de distancia inviabilizando o desligamento.
gostaria de saber como imprimir no display:
Marcos, boa tarde.
Tente fazer uma “união” do código do artigo com o do link abaixo:
https://www.filipeflop.com/blog/controlando-um-lcd-16×2-com-arduino/
Atenciosamente,
Pedro Bertoleti