Você está na página 1de 6

Cap Sistema

Informações sobre Android, Flutter, Dart, Java, Kottlin, Desenvolvimento, Programação, Instruções, Noticias.

capsistema.com.br Printed on 24/03/2023

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


automático)
December 10, 2020
Categorias: Arduino
Tags: Arduino, Arduino IDE, Arduino mini, automação DIY, código, Domótica, Fios, HC-SR04, LCD, LCD
16x2

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) / calibration
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 !!

Visits: 8 Visits: 1563340

    

Você também pode gostar