"Eletroeletrônica e Informações"
Home
Artigos

Circuitos

Arduino
Pic
Informações
ARDUINO

Monitor de Nivel de Agua e Bateria

Autor: Ivanildo M. Gonçalves

Eu já tinha um circuito em funcionamento monitorando a tensão da bateria do meu "Circuito de Ilumenação de Emergênca" , mas surgiu a ideia de criar um monitor de nivel de agua. Resolvi, então juntar as duas idéias num unico projeto...


Visão Geral :

.

CARACTERISTICAS:

O display indica a tensão da bateria e apos o asterisco(*) indica a tensão ajustada para proteção da bateira;
O Display indica o nivel de agua e apos o asterisco(*)o nivel de agua ajustado para o alarme;
Alarme de tensão baixa (bip de 1500HZ);
Alarme de Nivel de água baixo(som continuo de 500HZ);
Possibilidade de ajuste do tensão de proteção da bateria (Desliga a carga e aciona o alarme de tensão baixa);
Possibilidade de ajuste do nível de agua que aciona o alarme;
Possibilidade de desabilitar/habilitar o alarme;
O Display indica >OFF para alarme de tensão baixa desabilitado;
O Display indica >OFF para alarme de nivel de agua desabilitado;
O circuto possui apenas dois botoes: "RESETE" e "AJUSTE".

FUNCIONAMENTO:

Se o valor de tensão ajustado na constante "E_baixa" (normalmente é especificado pelo fabricante e vem impresso na bateria) desliga a carga via relé e aciona um bip intermitente.
Mesmo que a tensão da bateria volte a subir acima do valor ajustado em "E_baixa" a carga só será religada após o resete do circuito.
O botão "AJUSTE" é usado para ajustar, durante o resete do circuito, o nível de água em que o alarme de nível dispara, e desabilita o alarme sonoro tanto para tensão quanto para nível de água baixo, e o alarme só é reabilitado pelo reset.
Os eletrodos foram confeccionados com fio de cobre nu (do tipo usado em instalação elétrica residencial) rigido de 6mm².

Em breve publicarei as fotos da montagem.

Ajustes:
O Programa permite o ajuste do nível de água em que o alarme é acionado (Do nível 1 ao Nível 7) durante o resete do circuito.
Para isso é preciso pressionar o botão "RESETE" e aguardar a mensagem "Botão Ajuste seta Alarm Niv". A cada vez que o botão "Ajuste" for pressionado incrementa-se o valor do nível (nível baixo de água)  do alarme e ao atingir o "Nivel 7" o ajuste retorna em "0".
Se a tecla "Ajuste" não for pressionada em até 10 segundos o circuito sai do modo ajuste e entra no modo operação.
Para retornar ao modo ajuste, resete o circuito novamente.
**Caso não seja feito ajuste o circuito adota o padrão de "Nível 3"

O Programa  permite o ajuste do valor de tensão baixa em que o alarme é acionado e a carga é desligada(entre 10,0 e 11V) durante o resete do        circuito.
Para isso é preciso pressionar o botão "RESETE" e aguardar a mensagem "Botao Ajuste E-baixa". A cada vez que o botão "Ajuste" for pressionado
incremeta-se o valor de tensão de proteção em 0,1 até o limite máximo de 11V. Ao atingir o valor de 11V o ajuste retorna a 10,0Vcc e recomeça a ser incrementado em 0,1.
O valor de tensão de proteção normalmente é indicado no corpo ou no "Datasheet" da bateria.
Se a tecla "Ajuste" não for pressionada em até 10 segundos o circuito sai do modo ajuste e entra no modo operação.
Para retornar ao modo ajuste, resete o circuito novamente.
**Caso não seja feito ajuste o circuito adota o padrão de "10,5Vcc"


Até o momento fiz apenas testes básicos de funcionamento, mas o circuito funcionou muito bem e espero que seja útil a mais alguém.

Se alguém tiver alguma duvida envie e-mail para imartinsg@hotmail.com

Codigo:


/*
Monitor de Nivel de Água e Bateria
Por Ivanildo Martins Gonçalves - Técnico em Eletrônica
10/07/2016
*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
# define rele 13
# define alarmOut 12
# define butonSet 11 // Este botão é usado para ajustar, durante o setup, o nivel de agua
//em que o alarme dispara, e desabilita o alarme sonoro e o mesmo só é reabilitadopelo reset.
# define N1n 2
# define N2n 3
# define N3n 4
# define N4n 5
# define N5n 6
# define N6n 7
# define N7n 8

int tempo=0;
float E_baixa=10.5;// Tensão de proteção (desarme) da bateria.
int nivel=0;
int ledState = LOW;
int selectNivel=3;
boolean a=LOW;
boolean set=LOW;
unsigned long previousMillis = 0;
const long interval = 1000;
int tempo1=0;
int tempo2=0;
boolean increase=LOW;

void setup()
{
lcd.init();
Serial.begin(9600);

// Print a message to the LCD.
lcd.backlight();
pinMode(alarmOut, OUTPUT);
pinMode(rele, OUTPUT);
pinMode(N1n,INPUT_PULLUP);
pinMode(N2n,INPUT_PULLUP);
pinMode(N3n,INPUT_PULLUP);
pinMode(N4n,INPUT_PULLUP);
pinMode(N5n,INPUT_PULLUP);
pinMode(N6n,INPUT_PULLUP);
pinMode(N7n,INPUT_PULLUP);
pinMode(butonSet,INPUT_PULLUP);

tempo=0;
digitalWrite(rele,HIGH);

lcd.setCursor(0,0);
lcd.print("Botao RESETE");
lcd.setCursor(0,1);
lcd.print("Reinicia o Progr");
delay(2000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Botao Ajuste");
lcd.print(" ");

lcd.setCursor(0,1);
lcd.print("Alarm Nivel");
lcd.print(" ");
lcd.print("*");
lcd.print(selectNivel);
lcd.print("*");

delay(10);

while(tempo1<1000)
{
if(digitalRead(butonSet)==LOW&&increase==LOW)
{
if(selectNivel<8)
{
lcd.setCursor(13,1);
lcd.print("*");
lcd.print(selectNivel);
lcd.print("*");
selectNivel++;
tempo1=0;
tempo2=0;
}
else
{
selectNivel=0;
}
increase=HIGH;
}

if(digitalRead(butonSet)==HIGH&&increase==HIGH)
{
increase=LOW;
}
delay(10);

if(digitalRead(butonSet)==HIGH)
{
tempo1++;
}

}
lcd.clear();

lcd.setCursor(0,0);
lcd.print("Botao Ajuste");

lcd.setCursor(0,1);
lcd.print("E-baixa");
lcd.print(" ");
lcd.print(E_baixa);
lcd.print("V");
while(tempo2<1000)
{
if(digitalRead(butonSet)==LOW&&increase==LOW)
{
if(E_baixa<11)
{
lcd.setCursor(0,0);
lcd.print("Botao Ajuste");
lcd.setCursor(0,1);
lcd.print("E-baixa");
lcd.print(" ");
lcd.print(E_baixa);
lcd.print("V");
E_baixa=E_baixa+0.1;
tempo2=0;
}
else
{
E_baixa=10.0;
}
increase=HIGH;
}

if(digitalRead(butonSet)==HIGH&&increase==HIGH)
{
increase=LOW;
}
delay(10);

if(digitalRead(butonSet)==HIGH)
{
tempo2++;
}

}
lcd.clear();

}

void loop()
{
unsigned long currentMillis = millis();

if(currentMillis - previousMillis >= interval)
{
// save the last time you blinked the LED
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
}

int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 220.0);

if(ledState==HIGH)
{
if(a==0)
{
lcd.setCursor(0,0);
lcd.print("BAT ");
lcd.print(voltage);
lcd.print("V ");
lcd.print("*");
lcd.print(E_baixa);
lcd.print("*");

a=1;
}

if(voltage < E_baixa&&tempo<11)
{
tempo++;
}
else if(tempo>10)
{
if(set==LOW)
{
tone(alarmOut, 1500, 100);
}
digitalWrite(rele,LOW);
}
}
else
{
if(a==1)
{
lcd.setCursor(0,1);
lcd.print("Nivel = ");
lcd.print(nivel);
a=0;
}

if(digitalRead(N7n)==LOW)
{
nivel=7;
}
else if(digitalRead(N6n)==LOW)
{
nivel=6;
}
else if(digitalRead(N5n)==LOW)
{
nivel=5;
}
else if(digitalRead(N4n)==LOW)
{
nivel=4;
}
else if(digitalRead(N3n)==LOW)
{
nivel=3;
}
else if(digitalRead(N2n)==LOW)
{
nivel=2;
}
else if(digitalRead(N1n)==LOW)
{
nivel=1;
}
else if(digitalRead(N1n)==HIGH)
{
nivel=0;
}
}
if(digitalRead(butonSet)==LOW)
{
set=HIGH;
}
else if (nivel<=selectNivel&&set==LOW)
{
tone(alarmOut, 500, 100);
lcd.setCursor(13,1);
lcd.print("*");
lcd.print(selectNivel);

}
else if (set==HIGH)
{
lcd.setCursor(10,0);
lcd.print(" >");
lcd.print("OFF");

lcd.setCursor(10,1);
lcd.print(" >");
lcd.print("OFF");
}

}

 

 


 

 

 

Treinamento Em Arduino

Loja Virtual

Artigos   Circuitos Arduino Pic Informações