HIDROMETRO DIGITAL - MEDIDOR DE FLUXO DE AGUA COM LORA

Projetos com LoRa
JuanAlex
Membro
Mensagens: 4
Registrado em: 23/Abr/2019, 18:57

HIDROMETRO DIGITAL - MEDIDOR DE FLUXO DE AGUA COM LORA

Mensagem por JuanAlex » 25/Abr/2019, 18:51

Estou procurando um código fonte para utilizar como Medidor de Fluxo de Agua - tipo Hidrometro Digital

- alguém tem alguma sugestão?

- já comprei o sensor de fluxo de água, 03 fios, deve ser um sensor hall internamente;

- optei pelo LORA pois já vem com o display e tem wi-fi;

- se for possível quero fazer leitura dos fluxo de agua (litros) pelo celular também;

- talvez quem sabe, fazer um supervisório com Elipse ou ScadaBr, se conseguir umas dicas por aqui!

8-)

eduardomoraes
Membro
Mensagens: 9
Registrado em: 16/Abr/2019, 13:14

Re: HIDROMETRO DIGITAL - MEDIDOR DE FLUXO DE AGUA COM LORA

Mensagem por eduardomoraes » 27/Jun/2019, 22:09

Olá JuanAlex,
sou novo em IOT e ainda estou engatinhando, porém fiz um projeto que tem um pouco do que você precisa.
Porém não fiz um Hidrômetro (que aliás, você encontra vários projetos na net), mas fiz um Dosador de Líquidos.
Vou colocar uma parte do código aqui e creio que vai servir para você adaptar ao seu projeto. Só tenha o cuidado de fazer uma medição prévia pois o sensor de fluxo não é muito confiável não. Eu tive que calcular um fator de correção para que pudesse ter uma medida mais precisa.
Creio que você tenha que fazer a mesma coisa.
Fiz algumas implementações no código pois precisei rodá-lo em um ATMega168, porém ele foi feito para o ATMega328 mas você vai conseguir adaptá-lo sem problemas para o ESP32 LoRa.
Segue uma parte do código que eu criei:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <Wire.h> // Biblioteca I2C
#include <LiquidCrystal_I2C.h> // Biblioteca LiquidCrystal I2C

/* Inicializa o display no endereço 0x3f */
LiquidCrystal_I2C lcd(0x3F, 20, 4); // Configura endereço I2C e display com 20 caracteres e 4 linhas

/* Inicializa Sensor de Água */
#define PORTAAGUA 2 // Pino do Sensor de Fluxo
volatile int contaPulso; // Inicializa a variavel para contagem do Fluxo de Água
#define FATORCALIBRACAO 0.926667 // Fator de Calibração para corrigir a medida de agua do medidor

/* Inicializa Relê */
#define PORTARELE 4 // Pino onde o acionamento do rele

/* Inicializa Buzzer */
#define PORTABUZZER 13 // Pino onde o acionamento do Buzzer

/* Prototipação das funções */
void Pulso(); // Contador de Pulso do Sensor de Fluxo
void AcionaContadorLitros(int Litros); // Função para Contar a Qtd de Agua Selecionada

/* Funçao Setup */
void setup(){
pinMode(PORTARELE,OUTPUT); // Inicializada o RELE
digitalWrite(PORTARELE,LOW);
//
pinMode(PORTABUZZER,OUTPUT); // Inicializada o Buzzer
digitalWrite(PORTABUZZER,LOW);
//
pinMode(PORTAAGUA,INPUT); // Inicializa o Sensor de Fluxo
digitalWrite(PORTAAGUA,HIGH);
contaPulso = 0;
attachInterrupt(digitalPinToInterrupt(PORTAAGUA), Pulso, RISING);
sei(); // Habilita a Interrupção
//
Serial.begin(9600); //Inicializa a Interface Serial - utilizada para Debug
//
Wire.begin(); // Inicializa a interface I2c
//
lcd.init(); // Inicializa o LCD
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Contador de Liqu."));
delay(2000);
}

/* Função Loop ou MAIN()
* A função que ficará rodando indefinidamente no Arduino */
void loop() {
int Litros = 0; // Variável que recebera a quantidade digitada
/* Aqui vai um menu de seleção onde fazemos uma interface LCD x Teclado com o usuário */
MenuLitros(); // Exibe a tela de digição do numero de litros que será contato
// Na verdade eu leio a quant.de litros que o usuario digitou
Litros = 100;
if (Litros >= 0) {
// Inicia a contagem dos litros selecionados
AcionaContadorLitros(Litros); // Inicia a contagem dos litros digitados
}
}

/* Programa para contar os litros selecionados */
void AcionaContadorLitros(int _Litros) {
// Inicializa as variaveis
unsigned long OldMillis; // Contadores de Tempo
unsigned long NewMillis;
float vazao=0; //Variável para armazenar o valor em L/min
// Exibe a tela do contador
lcd.clear();
lcd.setCursor(0,2);
lcd.print(F("Contando"));
lcd.setCursor(9,2);
lcd.print(_Litros);
lcd.setCursor(13,2);
lcd.print(F("Litros"));
lcd.setCursor(2,3);
lcd.print(F("Iniciando..."));
lcd.setCursor(16,3);
lcd.print(F("3"));
delay(700);
lcd.setCursor(16,3);
lcd.print(F("2"));
delay(700);
lcd.setCursor(16,3);
lcd.print(F("1"));
delay(700);
lcd.setCursor(16,3);
lcd.print(F(" "));
lcd.setCursor(0,3);
lcd.print(F(" Litros "));
//
contaPulso = 0; //zera a variavel de contagem de pulsos do sensor de vazao
OldMillis = millis();
digitalWrite(PORTARELE,HIGH); // abre a valvula eletromagnetica
while (true) {
NewMillis = millis();
if (NewMillis >= (OldMillis + 1000)){
OldMillis = NewMillis;
// Devido a inúmeras variaveis como (fabricante do sensor, defeitos e etc),
// criamos um Fator de Calibracao que "corrige" em parte esta variação
// Este fator deve ser gravado na 1a.vez que o sistema for utilizado e
// toda vez que for substituida alguma peça como sensor, eletrovalvula e mangueiras
vazao += ((contaPulso / 7.5 / 60) / FATORCALIBRACAO); //Converte para L/seg e aplica o Fator de Calibração
contaPulso = 0;
lcd.setCursor(5,3);
lcd.print(vazao);
}
if (vazao >= _Litros){ //verificamos se a quant.de litros esperada já foi alcançada
digitalWrite(PORTARELE,LOW); // Fecha a valvula eletromagnetica
break;
}
}
lcd.setCursor(1,3);
lcd.print(F("Contagem Encerrada"));
delay(2000); // Aguarda 2 segundos
}

/* Programa para incrementar o contador de pulsos do sensor de vazão */
void Pulso()
{
contaPulso++; // Incrementa o contador de Pulsos do Sensor de Vazão
}

JuanAlex
Membro
Mensagens: 4
Registrado em: 23/Abr/2019, 18:57

Re: HIDROMETRO DIGITAL - MEDIDOR DE FLUXO DE AGUA COM LORA

Mensagem por JuanAlex » 14/Jul/2019, 10:15

Eduardo,

Vlw pelo código, muito bem escrito e comentado!

Obrigado,

Juan

Responder