Medindo vazão utilizando um sensor ultra-sônico de distância

sensor ultra-sônico

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.

Caminho do sinal ultra-sônico
Figura 1 – Caminho do sinal ultra-sônico

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:

formuladeltatempo
formulavsom
formuladistobj

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.

Sensor ultra-sônico HC-SR04
Figura 2 – Sensor ultra-sônico HC-SR04

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:

Reservatório com um sensor ultra-sônico

Neste caso, tem-se um reservatório cilíndrico, de área superior circular de raio R. Sendo assim, a área superior seria dada por:

areasuperficialcilindro

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:

formulavolumereservatorio

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:

formulavazao

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.

Circuito esquemático
Figura 3 – Circuito esquemático

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.

/*
* 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:
* https://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

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
26 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
soren richarddt kall
soren richarddt kall
08/05/2020 22:45

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?

leonardo
leonardo
18/11/2019 11:22

ja foi feito algum teste em tanque de combustivel?

leonardo
leonardo
18/11/2019 11:21

bom dia, ja foi feito algum teste em tanque de combustivel?

Divanilson Lopes
Divanilson Lopes
09/07/2019 18:07

como faço pra alterar só pra mostra quantidade em litros estou tentando automatizar a caixa d’água

Divanilson Lopes
Divanilson Lopes
09/07/2019 18:07

como faço pra alterar só pra mostra quantidade em litros

Andre
Andre
03/12/2018 19:06

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?

Tony
Tony
18/09/2018 22:27

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.

Samuel Checozzi
Samuel Checozzi
Reply to  Tony
16/02/2019 09:25

Verifica a velocidade da serial que está no código e a que está no seu monitor serial. tem que ser a mesma

Maicon Lara
Maicon Lara
28/08/2018 17:11

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

Arduiniciante
Arduiniciante
25/07/2018 22:22

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.

marcos Antonio oliveira da silva
marcos Antonio oliveira da silva
24/04/2018 18:38

gostaria de saber como imprimir no display:

Home » Maker » Medindo vazão utilizando um sensor ultra-sônico de distância

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: