Tanque de água baseado em Arduino – Nível e taxa de fluxo (corte automático)

Tempo de leitura: 3 minutes

Esta ideia de projeto explica como controlar automaticamente a operação da bomba d’água de acordo com o nível de água do tanque e a vazão.

Um sensor ultrassônico detecta o nível de água e liga a bomba se o nível de água estiver abaixo de 25%.

A taxa de fluxo não pode ser determinada inicialmente, porque inicialmente não há fluxo de água através do sensor de fluxo de água.

Portanto, o limite de nível de 30% foi definido.

Se o nível de água estiver acima de 30% e a vazão de água abaixo de 0,5 litro/min, o relé permanecerá na posição NÃO (normalmente aberto) e a fonte de alimentação para o motor da bomba permanecerá desligada.

Se o nível de água estiver acima de 30% e a vazão de água acima de 0,5 litro / min, o relé opera e a energia será fornecida ao motor da bomba. (Para proteger o motor da bomba)

Se o nível de água atingir 95%, o relé desconectará a energia do motor da bomba, portanto, não haverá vazamento de água.

O nível de água (sempre) e a vazão (somente quando a água flui através do sensor) são exibidos na tela LCD. Dessa forma, o usuário pode monitorar o nível de água e a vazão.

Nota: Antes de construir este projeto, esteja ciente dos componentes usados ​​e suas capacidades.

 

Ferramentas e componentes

1 x Arduino Nano
1 x 5V/230V 1Hp Relé
1 x Sensor ultrassônico (HC-SR04)
1 x Sensor de taxa de fluxo de água (YF S201)
1 x Módulo LCD 16×2
1 x Potenciômetro 10K Ohm
1 x bomba de água 0,5 HP
1 x Tanque de água de 500 litros
Tubos de PVC de 1/2 “(para sensor de taxa de fluxo de água, tanque e bomba de água)
Acessórios, válvulas e cola para tubos de PVC

O sistema de controle é a principal preocupação deste projeto. Portanto, você pode organizar o equipamento de encanamento adequado de acordo.

 

Componentes de conexão

 

Pino de sinal do sensor de nível de água – Arduino Pino D12
Pino de sinal de relé – Arduino Pino D13
Ultrasonic Trig. Pino – Arduino Pino D03
Ultrasonic Echo Pino – Arduino Pino D02
Pino RS LCD – Arduino Pino A02
Pino EN LCD – Arduino Pino A03
Pino D4 LCD – Arduino Pino A04
Pino D5 LCD – Arduino Pino A05
Pino D6 LCD – Arduino Pino A06
Pino D7 LCD – Arduino Pino A07

 

Código Arduino

#include <LiquidCrystal.h>
#include <HCSR04.h>
UltraSonicDistanceSensor distanceSensor(3, 2);
int LCD;

const int rs = A2, en = A3, d4 = A4, d5 = A5, d6 = A6, d7 = A7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
byte Relay    = 13;

byte sensorInterrupt = 0; 
byte sensorPin       = 12;

float calibrationFactor = 7.5;

volatile byte pulseCount; 

float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;

unsigned long oldTime;

void setup()
{
 
  pinMode(Relay, OUTPUT);
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);

  pulseCount        = 0;
  flowRate          = 0.0;
  flowMilliLitres   = 0;
  totalMilliLitres  = 0;
  oldTime           = 0;

  attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}


void loop()
{ 
  LCD = map( distanceSensor.measureDistanceCm(), 0, 95, 100, 0);
  delay(1);

  lcd.begin(16, 2);
  lcd.print("NÍVEL : ");
  lcd.print(LCD);   
  lcd.print("%");
  delay(500);
  lcd.clear();
  delay(1);
  
  if((millis() - oldTime) > 1000)   
  {
   
    detachInterrupt(sensorInterrupt); 
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    oldTime = millis();
    flowMilliLitres = (flowRate / 60) * 1000;
    totalMilliLitres += flowMilliLitres;
     
    unsigned int frac;

    lcd.print("Quociente de vazão: ");
    lcd.print(flowRate);     
    lcd.print("L/Min");
    delay(500);
    lcd.clear();
    delay(1);
 
    pulseCount = 0;
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  }

  if (LCD <= 25){
    digitalWrite(Relay,HIGH);
  } else if(LCD >= 95){
    digitalWrite(Relay,LOW);
  } else if(flowRate <= 0.500 && LCD >=30){
    digitalWrite(Relay,LOW);
  } else if(flowRate >= 0.500 && LCD >=30){
    digitalWrite(Relay,HIGH);
  } else if(flowRate <= 0.500 && LCD >=95){
     digitalWrite(Relay,LOW);
  }
}
 
void pulseCounter()
{
  pulseCount++;
}

// Altere o código de acordo com a profundidade do tanque e a vazão mínima necessária.

 

Sempre conecte a fonte de alimentação principal se tiver certeza absoluta de que os componentes estão conectados corretamente sem alterar a polaridade e causar curto-circuito na ligação.

Mesmo que pareça que não há nada de errado: VERIFIQUE DUPLA TUDO !!