Sensor de Fluxo de Água – Como Programar com Raspberry PI 3

Neste tutorial, iremos trazer um conteúdo muito interessante e que pode ser inserido em uma grande variedade de projetos, os quais, vão desde  aplicações voltadas para jardinagem até grandes processos industriais. Aqui, iremos demonstrar os procedimentos necessários para que você possa realizar medições de vazão com o sensor de fluxo YF-S201 juntamente com uma placa Raspberry PI 3 Modelo B.

 


 

Sensores de fluxo YF-S201

 

Os sensores de fluxo de água YF-S201 são dispositivos indicados para projetos onde existe presença de líquidos, os quais, por meio de sua manipulação, possam impactar de maneira significativa nos resultados de um determinado processo.

 

sensor de fluxo YF-S201

 

Através dos sensores em questão, podemos verificar uma série de informações a partir da medição do fluxo de água em uma determinado tubulação, como por exemplo, o volume de água circulante e consequentemente, o consumo de água de um estabelecimento, entre outros.

Esse sensor possui um sistema de contagem de pulsos, o qual, é constituído de um pequeno imã em uma das pás da hélice contida dentro de sua estrutura, de modo que, quando a água passa pelo sensor, esta faz a hélice girar. Com a hélice em movimento, toda vez que o imã citado passa em por uma determinada posição, o sensor emite um sinal e em contrapartida, fora da mesma, ele não emite o sinal citado. Sendo assim, podemos chegar à conclusão de que cada giro corresponde a uma quantidade fixa de água.

 


 

Componentes utilizados no projeto

Para reproduzir este projeto você precisará dos seguintes componentes:

 

Montagem física do hardware

 

Veja na figura abaixo o hardware que será utilizado para que seja possível utilizar o sensor de fluxo YF-S201 para realizar medições de fluxo de água, através da placa Raspberry Pi 3 modelo B .

Hardware utilizado.

Para que fosse possível utilizarmos o sensor em questão em conjunto com a placa Raspberry pi 3 modelo B, foi necessário que elaborássemos um divisor de tensão, pois, os pulsos provenientes da movimentação da hélice são sinais de 5v. Desta maneira, fizemos um divisor de tensão utilizando resistores de 240Ω e 470Ω.

 


 

Desenvolvimento do código para o Raspberry Pi

 

Para desenvolver o código citado, iremos abrir o programa IDLE 3, no qual, iremos criar um novo documento e escrever o seguinte código em Python.

 

Acessando o software para desenvolvimento do código

Nesta seção iremos demonstrar o código responsável pela leitura vazão pelo sensor de fluxo YF-S201.

import RPi.GPIO as GPIO 
import time
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(16, GPIO.IN) 
pulsos_por_minuto = 0
tot_pulsos = 0
constante = 0.10
tempo_novo = 0.0

while (True):
    tempo_novo = time.time() + 60
    pulsos_por_minuto = 0
    while time.time() <= tempo_novo:
        if(GPIO.input(16) != 0):
             pulsos_por_minuto += 1
             tot_pulsos += 1
     print("Litros por minuto",round(pulsos_por_minuto * constante,2)) 
     print("Total de Litros",round(tot_pulsos * constante,2))
     

 

Após a finalização do código, basta pressionar F5 para executa-lo.

 

Terminal do IDLE3

 


 

Explicação do código 

 

Nesta seção iremos explicar o funcionamento de todas as linhas do código apresentado anteriormente

  • Importando as biblioteca para manipulação dos pinos de entrada/saída e do tempo real 

Primeiramente, utilizamos a sentença import para importar as biblioteca que serão utilizadas em nosso projeto.

import RPi.GPIO as GPIO
import time
  • Determinando o modo de referência aos pinos utilizados

Em seguida, através da sentença GPIO.setmode() determinamos a maneira como vamos nos referenciar aos pinos da placa Raspberry Pi. Ao utilizarmos GPIO.BOARD como parâmetro, devemos nos referenciar aos pinos, no código, pela ordem em que estão anexados na mesma, por exemplo, utilizando o número 12, para o pino 12 (caso tivessemos utilizado como parâmetro a sentença GPIO.BCM, nos referenciaríamos aos pinos da placa através do número que acompanha a sigla GPIO, no caso do pino 12, seria 18, devido ao fato de o pino 12 ser o GPIO 18).

 GPIO.setmode(GPIO.BOARD) 
  • Definindo o modo de operação dos pinos utilizados

Posteriormente, definimos o modo de operação dos pinos da placa Raspbarry Pi, de modo que, configuramos o pino 16 como um pino de entrada digital.

 
GPIO.setup(16, GPIO.IN)
  • Declaração das variáveis auxiliares

As variáveis criadas neste código servem para manipular a quantidade de pulsos que ocorrem por minuto e relacionar os mesmos com as medidas referentes à movimentação do líquido.

Primeiramente, temos uma variável chamada pulsos_por_minuto, a qual, como o próprio nome já diz, armazena os valores referentes à quantidade de pulsos que ocorreram em um minuto. Da mesma forma, a variável tot_pulsos realiza o armazenamento da quantidade total de pulsos ocorridos. Em seguida, temos a variável minutos, que por sua vez, apresenta o número de minutos nos quais o program está rodando. Ao lado desta, temos a variável tempo_novo, que será utilizada para determinarmos os ciclos de 1 minuto e por fim, a variável constante, que nada mais é do que uma constante de proporcionalidade, que deverá ser determinada empiricamente.


pulsos_por_minuto = 0 

tot_pulsos = 0 

constante = 0.10 

tempo_novo = 0.0

 

  • Realizando as leituras inerentes à movimentação do líquido

Por fim, criamos um loop infinito através da sentença while (True), de modo que, dentro deste, temos um conjunto de estruturas condicionais if e while. Em um primeiro momento, nos atualizamos a variável tempo_novo com um valor referente a um minuto após o tempo atual, ou seja, fazemos com que a variável em questão armazene uma informação de tempo sobre um instante futuro. Além disso, zeramos a variável pulsos_por_minuto para que, a cada ciclo, possamos ter um novo valor (repare que não ocorre um reset na variável tot_pulsos).

Posteriormente, utilizamos uma estrutura condicional while, de modo que seu conteúdo permanecerá em execução até que o tempo atual ultrapasse o tempo contido na variável tempo_novo (1 minuto à frente do instante de tempo em que o programa começou a ser executado). Durante este ciclo, utilizamos uma estrutura condicional if(), na qual, caso o valor no pino 16 seja diferente de zero, isto é, caso ocorra um pulso, devemos incrementar as variáveis pulsos_por_minuto e tot_pulsos em 1 unidade.

Caso a condição acima não seja satisfeita, quer dizer que o sensor de presença não está detectando nada e como consequência está disponibilizando nível lógico 0 no pino 12 e portanto, o relé deve ser desligado através da sentença GPIO.output(12,1), que por sua vez, coloca nível lógico alto no terminal do mesmo.

Por fim, imprimimos os valores encontrados em cada ciclo, ambos com duas casas decimais.

 
while (True): 
    tempo_novo = time.time() + 60 
    pulsos_por_minuto = 0 
    while time.time() &lt;= tempo_novo: 
        if(GPIO.input(16) != 0): 
           pulsos_por_minuto += 1 
           tot_pulsos += 1
    print("Litros por minuto",round(pulsos_por_minuto * constante,2)) 
    print("Total de Litros",round(tot_pulsos * constante,2))
    

 


 

Considerações finais

Este foi mais um conteúdo que preparamos com bastante cuidado para você. Esperamos que tenha gostado deste post e lembre-se de deixar suas dúvidas, críticas e sugestões nos comentários abaixo.

Categorias
Raspberry Pi

Engenheiro eletricista graduado com ênfase em Controle e Automação pela Universidade Federal do Espírito Santo - UFES e Técnico em Eletrotécnica pelo Instituto Federal do Espírito Santo - IFES. Parceiro do site UsinaInfo.
Sem Comentários

Enviar Resposta

*

*

Sobre nós

Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

Sugestões

Artigos Relacionados