Neste Projeto Raspberry Pi 3 com Sensor de Fluxo de Água 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.
Sensor 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.
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 o Projeto Raspberry Pi 3 com Sensor de Fluxo de Água 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 .
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Ω para o Projeto Raspberry Pi 3 com Sensor de Fluxo de Água.
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.
Nesta seção iremos demonstrar o código responsável pela leitura vazão pelo sensor de fluxo YF-S201.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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.
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 Raspberry Pi 3 com Sensor de Fluxo de Água.
1 2 |
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).
1 |
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.
1 |
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.
1 2 3 4 5 6 7 |
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.
1 2 3 4 5 6 7 8 9 |
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)) |
Considerações Finais
Este Projeto Raspberry Pi 3 com Sensor de Fluxo de Água 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.
Conheça toda Linha Arduino e Acessórios do Site da UsinaInfo.
Ola
Como faço para ligar 6 sensores deste ao mesmo tempo?
Att.
Sérgio
Olá Sergio !
Para ligar 6 sensores diferentes em um mesmo Raspberry, basta utilizar uma porta GPIO para cada sensor e adicionar as variáveis suficientes para cada uma das unidades.
Como faço para colocar o código dentro da placa Raspberry pi 3 modelo B?
Olá Thiago! Maiores informações sobre os primeiros passos com Raspberry você encontra através do seguinte artigo: https://www.usinainfo.com.br/blog/raspbian-para-raspberry-pi-3-como-instalar-e-primeiros-passos/
Em todo projeto devemos examinar todas as possibilidades,à exaustão. Considere que em determinado momento o fluxo de fluido cesse e o imã pare e, frente do sensor (um contato reed,creio) por um determinado.tempo. Esta situação não causariga uma contagem errônea ?
Bom dia Marcos!
Basicamente o funcionamento é este, porém o projeto é desenvolvido de maneira que identifica os pulsos gerados pelo equipamento, ou seja, identifica a mudança de estado da onda quadrada para alteração dos dados.
Tem como ligar uma válvula solenoide pra cortar o fluxo dependendo da quantidade de litros?
Boa tarde Rodrigo.
Tem sim, basta incluir ao código a variável que define o limite da contagem para acionamento da válvula.
Conteúdo muito bom, bem explicado, mas fiquei com dúvida na linha abaixo:
while time.time() <= tempo_novo:
Realmente não entendi essa parte do código, o que significa “&amp”
Boa Tarde William!
Pedimos desculpa pelo ocorrido, infelizmente ocorreu um bug durante o cadastro do código.
O correto neste linha é o seguinte: “while time.time() >= tempo_novo:”.
Corrigimos o artigo também, obrigado pelo feedback.
Parabéns pelo trabalho bro! Qualquer coisa apita
Parabéns pelo conteúdo, tenho umas dúvidas.
Na linha:
while time.time() >= tempo_novo:
Acredito que a variável tempo_novo é o limite do laço, então acho que o sinal deveria ser trocado, não?
while time.time() <= tempo_novo:
O último parágrafo, fala sobre um sensor de presença e pinos não utilizados no código, acredito que deve ser de outro artigo.
Se eu estiver enganado me desculpem.
Se você alterar a pressão terá que alterar a a constante correto ? Teria uma forma de calcular a litragem independente da pressão ?
Boa Tarde Alexandre! A princípio nunca li nada sobre isto, o produto trabalha com um sistema mecânico que conta o número de voltas de uma hélice interna e converte este valor através da constante especificada no código.
como eu faço para o sensor, Sensor de Fluxo de Água YF-S401?
desde já agradeço!!!
Olá, meu nome é Leandro sou novo neste mundo e estou tentando começar com esse projeto do RPI + sensor de fluxo. O que pretendo é ligar junto com tudo isso uma valvula selenoide. Como deveria fazer? Em quais pinos e sequencias devo ligar esses hardwares.
Obrigado.
Bom dia Leandro!
Sugerimos iniciar primeiro com um sensor, depois apenas a válvula, aprendendo como os dois funcionam de forma independente, simplificando.
Depois juntar os dois em um projeto, caso tenha dificuldades, sugerimos uso de IA’s para ajudar na criação do código como o ChatGPT.