Monitore sua caixa dágua usando Arduino
E não só a caixa dágua, mas também tanques, reservatórios e aquários, usando o sensor de nível de água, um sensor do tipo bóia que é um sensor de funcionamento bem simples, como você vai ver nesse projeto de monitoramento. Monitore sua caixa dágua e evite desperdícios!
Para entender melhor o funcionamento do sensor de nível de água, recomendo a leitura deste post aqui do Arduino e Cia.
Material necessário para o projeto
Para esse projeto você vai precisar do seguinte material:
- Arduino Uno
- Sensores de nível de água tipo bóia (usarei 3)
- Display LCD 16×2 I2C
- Módulo Relé 5V 1 canal
- Resistores
- Protoboard 400 pontos
- Jumpers macho-macho e macho-fêmea
O material mostrado acima será usado para a montagem da parte eletrônica do projeto. Se você pretende instalar isso na sua casa, vai precisar de outros materiais para fixar os sensores na caixa dágua, cabos para ligação dos sensores ao Arduino, caixa para proteção do circuito, etc.
O projeto de monitoramento de caixa dágua
Este projeto consiste em um Arduino Uno que vai efetuar a leitura dos sensores de nível de água, que são do tipo “bóia” e ficarão dentro do reservatório. Serão utilizados 3 sensores que, conforme o nível da água, vão enviar sinais para o microcontrolador, que por sua vez vai acionar um display LCD 16×2 I2C e mostrar o nível de água no reservatório.
Coloquei um relé no circuito, mas o uso é opcional, já que ele pode ser usado para ligar uma bomba que vai encher a caixa. O relé permanece desligado até que o nível da água atinja o ponto mais baixo (sensor 3), quando então ele é acionado, e permanece assim até que o nível do reservatório atinja o nível máximo (sensor 1).
Circuito monitoração de caixa dágua
O circuito abaixo mostra a ligação dos 3 sensores no Arduino Uno, conectados às portas 8, 9 e 10, com o relé conectado na porta 7.
O display utiliza interface I2C, e é ligado nas portas analógicas A4 (SDA) e A5 (SCL) do Arduino. Ele está “de lado” justamente para facilitar a visão do nível da água, representado pelos quadrados no lado direito do display.
Os resistores usados nos sensores são de 10K, funcionando como resistores pull-down. Você não precisa usar necessariamente esses valores, ajuste de acordo com os resistores que tiver em mãos.
Programa monitoramento de caixa dágua
O programa usa a biblioteca LiquidCrystal_I2C, que você pode instalar a partir da própria IDE do Arduino.
Para isso, na IDE acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Na janela do Gerenciador de Bibliotecas, procure por liquidcristal_I2c e instale a biblioteca LiquidCrystal I2C by Frank de Brabander, conforme imagem abaixo:
Dúvidas na instalação da biblioteca? Confira o post Como instalar uma biblioteca na IDE Arduino.
Não esqueça de adaptar, na linha 22, o endereço I2C do display que você está usando. No caso o meu display está com o endereço 0x3B. Se não souber qual o endereço I2C do display utilize o I2CScanner, mostrado neste post.
No código temos a inicialização do display e depois a leitura do estado dos sensores. Se houver alguma mudança, o nível do reservatório é atualizado, passando pelos níveis C (caixa cheia), M (nível médio) e V (caixa vazia).
//Programa: Monitoracao de Caixa d´agua usando Arduino //Autor: Arduino e Cia //Display HD44780 com adaptador I2C #include <Wire.h> #include <LiquidCrystal_I2C.h> #define pino_rele 7 #define sensor1 8 #define sensor2 9 #define sensor3 10 int valor_s1 = 1, valor_s2 = 1, valor_s3 = 1; //Simbolos uint8_t letra_C[8] = {0x0, 0xE, 0x11, 0x11, 0x11, 0x11, 0x0, 0x0}; uint8_t letra_M[8] = {0x0, 0x1F, 0x2, 0x4, 0x2, 0x1F, 0x0, 0x0}; uint8_t letra_v[8] = {0x0, 0x7, 0x8, 0x10, 0x8, 0x7 , 0x0, 0x0}; uint8_t caracter_nivel[8] = {0x0, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0}; LiquidCrystal_I2C lcd(0x3B, 16, 2); int nivel_anterior = 0; void setup() { Serial.begin(9600); //Inicializa o display I2C lcd.init(); lcd.backlight(); //Caracteres customizados lcd.createChar(0, letra_C); lcd.createChar(1, letra_M); lcd.createChar(2, letra_v); lcd.createChar(3, caracter_nivel); //Define os pinos dos sensores como entrada pinMode(sensor1, INPUT); pinMode(sensor2, INPUT); pinMode(sensor3, INPUT); //Mostra a letra C no display lcd.setCursor(15, 0); lcd.write(uint8_t(0)); //Mostra a letra M no display lcd.setCursor(8, 0); lcd.write(uint8_t(1)); //Mostra a letra V no display lcd.setCursor(0, 0); lcd.write(uint8_t(2)); Serial.println("Monitoracao de Caixa Dagua"); Serial.println(); } void loop() { //Leitura dos sensores int valor_s1 = digitalRead(sensor1); int valor_s2 = digitalRead(sensor2); int valor_s3 = digitalRead(sensor3); //Mostra valor dos sensores no serial monitor Serial.print("S1: "); Serial.print(valor_s1); Serial.print(" S2: "); Serial.print(valor_s2); Serial.print(" S3: "); Serial.println(valor_s3); //Checa o nivel e atualiza o display if ((valor_s1 == 0) && valor_s2 == 0 && valor_s3 == 0) { //Atualiza o nivel no display, enviando o numero de //"quadrados" que devem ser mostrados para indicar //o nivel mostra_nivel(15); //Desliga o rele digitalWrite(pino_rele, HIGH); } if ((valor_s1 == 1) && valor_s2 == 0 && valor_s3 == 0) { //Atualiza o nivel no display mostra_nivel(11); } if ((valor_s1 == 1) && valor_s2 == 1 && valor_s3 == 0) { //Atualiza o nivel no display mostra_nivel(4); } if ((valor_s1 == 1) && valor_s2 == 1 && valor_s3 == 1) { mostra_nivel(0); //Liga o rele digitalWrite(pino_rele, LOW); } delay(100); } void mostra_nivel(int nivel) { if (nivel != nivel_anterior) { //Apaga informacao anterior lcd.setCursor(0, 1); lcd.print(" "); //Atualiza o nivel no display for (int i = 0; i <= nivel; i++) { lcd.setCursor(i, 1); lcd.write(uint8_t(3)); } nivel_anterior = nivel; } }
Na imagem abaixo, temos a saída de mensagens no serial monitor, onde você pode acompanhar o estado de cada um dos sensores e também incluir mensagens para o seu próprio controle:
Você pode expandir facilmente esse projeto, se precisar utilizar mais sensores, e também pode incrementá-lo adicionando funcionalidades como envio de avisos via Wifi, SMS, MQTT e outros.
Gostou? Monitore sua caixa dágua de uma jeito fácil e confira outros posts sobre Arduino aqui no Arduino e Cia!
boa tarde, como faco para ter as bioas no telhado do predio e o monitor na portaria>
Opa, teria sim, eu utilizei como recurso para estender a distancia da placa até a caixa cabo de rede CAT5, já que dentro dele possui 4 pares de fios é só você soldar os sensores no cabo e levar o cabo até a placa
Obs. adicione capacitores de 100nfx250v poliester em cada entrada de sensor, próximos a placa do Arduíno, referencia ao terra da alimentação, isto evitara ao minimo os ruídos e interferências que circula na estrutura do condomínio…
Será que alguém pode me ajudar ? Fiz toda a montagem, usei cabo de rede e levei 3 sensores até a caixa d’água, mas não mostra nada no LCD. Só aparece o lado do “quadrados” e não muda o nível. O que devo fazer ?
Pode me ajudar a subtituir o rele por um BUZZER e um botao para silenciar o buzzer por 5 min (se a caixa encher ele nao toca, se nao, ele toca novamente em 5 min)
falta
pinMode(pino_rele, OUTPUT);
verdade !
Boa noite, estou com um problema na programação do arduino, agradecia que me pudessem ajudar, obrigado.
C:Usersfilho leonelDocumentsArduinosketch_jan14asketch_jan14a.ino:7:60: fatal error: hd44780.h: No such file or directory
#include // include hd44780 library header file
^
compilation terminated.
exit status 1
Erro ao compilar para a placa Arduino/Genuino Uno.
Oi David,
Esse arquivo hd44780.h está incluído na biblioteca. Você baixou a biblioteca do link do post?
Abraço!
Adilson
Bom dia, estou tendo um problema em que os caracteres mostra nível, esta somente aumentando e não diminuem, nao indicam a redução,o que pode ser ?
Bom noite, estou tendo um problema em que os caracteres mostra nível, esta somente aumentando e não diminuem, nao indicam a redução, oque fazer no caso?
Oi Pablo,
Talvez o programa não esteja “apagando” os caracteres. Dê uma olhada na linha 110, é ela que faz isso.
Abraço!
Adilson
Boa noite,sim baixei a biblioteca e coloquei no programa mas continuava a dar erro, mas agora já resolvi o problema, bastou instalar/atualizar uma biblioteca.
Obrigado na mesma, abraço.
david costa qual foi a biblioteca que vc atualizou
a biblioteca disponilizada aqui neste projeto, LiquidCrystal_I2C
Ola pessoal, Sou Heron, baixei o arquivo acima coloquei no diretório libraries e instalei mas dah esse aviso de erro. pra piorar diz que preciso ir no menu "Arquivo -> Preferências" e no IDE do Arduino no meu mac nao tem assa opção nesse menu e em nenhum outro menu aqui… desde ja agradeço se alguém puder me dar uma dica… valeu!
Arduino: 1.8.5 (Mac OS X), Placa:"Arduino/Genuino Uno"
/Users/meunome/Documents/Arduino/Monitoracao_de_Caixa_d_agua/Monitoracao_de_Caixa_d_agua.ino/Monitoracao_de_Caixa_d_agua.ino.ino:6:60: fatal error: hd44780.h: No such file or directory
#include // include hd44780 library header file
^
compilation terminated.
exit status 1
Erro compilando para a placa Arduino/Genuino Uno
Este relatório teria mais informações com
"Mostrar a saida detalhada durante a compilação"
opção pode ser ativada em "Arquivo -> Preferências"
Boa noite, adicionei um led ao circuito, em que acende quando o deposito ta vazio e apaga quando ta cheio, e tudo funciona bem, mas o led da pouca luz, quase nem se vê. Agradecia se me pudesse ajudar.
Bom dia David,
Nesse caso, você pode tentar colocar uma resistência menor (se o led permitir), ou então mudar para um led de alto brilho.
Abraço!
Adilson
Bom dia, como posso colocar esses sensores no fritzing?
Arduino: 1.8.4 (Windows 7), Placa:"Arduino/Genuino Uno"
C:UsersNovo UserDocumentsArduinoarduino_3_boias_arduino_ciaarduino_3_boias_arduino_cia.ino:6:60: fatal error: hd44780.h: No such file or directory
#include // include hd44780 library header file
^
compilation terminated.
exit status 1
Erro compilando para a placa Arduino/Genuino Uno
Esta ocorrendo esse erro baixei a biblioteca do link se alguém puder ajudar
Tem de ir a instalar bibliotecas, no programa arduino e instalar as bibliotecas associadas a este projeto
Ótimo post, estou tentando desenvolver junto com o envio do comando para ligar a bomba por RF 433mhz, o RF estou usando seu exemplo postado no seu site.
Mas estou com problema para resolver com os sinais do sensor que ficará emitindo 5v e a bomba liga e desliga.
Consegui pessoal, obrigado por compartilhar o projeto! Abraço a todos.
Boa tarde,
Muito obrigado! Aguardo a sua visita no Arduino e Cia sempre que possível e se for do seu interesse, assine a nossa newsletter para receber as novidades em primeira mão. 🙂
Abraço!
Adilson
Olá, boa tarde. Gostaria de saber como foi feita a ligação do display lcd?
Oi Ariane,
O display é do tipo que tem uma interface I2C, assim a comunicação com o Arduino usa somente 2 pinos. 🙂
Abraço!
Adilson
O Meu Funcionou Perfeitamente , mais eu gostaria de Colocar mais um sensor que seria o quarto sensor e também gostaria de acrescentar o BUZZER no circuito , mais o rele continua
Olá, ficaria muito grato se disponibilizasse o arquivo do sensor nível de água no formato fritzing. Estou desenhando o circuito e gostaria de adicionar o sensor nível de água, só que não encontrei na internet.
Oi Gilvan,
Infelizmente não tenho. Tive que desenhar o sensor separadamente.
Abraço!
Adilson
O Meu Funcionou Perfeitamente , mais eu gostaria de Colocar mais um sensor que seria o quarto sensor e também gostaria de acrescentar o BUZZER no circuito e um rele ou um contator para ligar uma bomba
Boa Noite Estou com dificuldades em alterar o projeto para quatro sensores por favor alguém pode ajudar
//Programa: Monitoracao de Caixa d´agua usando Arduino
//Autor: Arduino e Cia
//Display HD44780 com adaptador I2C
#include
#include // include hd44780 library header file
#include // i/o expander/backpack class
hd44780_I2Cexp lcd; // auto detect backpack and pin mappings
#define pino_rele 7
#define sensor1 8
#define sensor2 9
#define sensor3 10
#define sensor4 11
#define pino_buzzer 12
int valor_s1 = 1, valor_s2 = 1, valor_s3 = 1, valor_s4 = 1;
//Simbolos
uint8_t letra_C[8] = {0x0, 0xE, 0x11, 0x11, 0x11, 0x11, 0x0, 0x0};
uint8_t letra_M[8] = {0x0, 0x1F, 0x2, 0x4, 0x2, 0x1F, 0x0, 0x0};
uint8_t letra_v[8] = {0x0, 0x7, 0x8, 0x10, 0x8, 0x7 , 0x0, 0x0};
uint8_t caracter_nivel[8] = {0x0, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0};
int nivel_anterior = 0;
void setup()
{
Serial.begin(9600);
//Inicializa o display I2C
lcd.begin(16, 2);
//Caracteres customizados
lcd.createChar(0, letra_C);
lcd.createChar(1, letra_M);
lcd.createChar(2, letra_v);
lcd.createChar(3, caracter_nivel);
//Define os pinos dos sensores como entrada
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
pinMode(sensor4, INPUT);
pinMode(pino_rele, OUTPUT);
//Mostra a letra C no display
lcd.setCursor(15, 0);
lcd.write(uint8_t(0));
//Mostra a letra M no display
lcd.setCursor(8, 0);
lcd.write(uint8_t(1));
//Mostra a letra V no display
lcd.setCursor(0, 0);
lcd.write(uint8_t(2));
Serial.println("Monitoracao de Caixa Dagua");
Serial.println();
}
void loop()
{
//Leitura dos sensores
int valor_s1 = digitalRead(sensor1);
int valor_s2 = digitalRead(sensor2);
int valor_s3 = digitalRead(sensor3);
int valor_s4 = digitalRead(sensor4);
//Mostra valor dos sensores no serial monitor
Serial.print("S1: ");
Serial.print(valor_s1);
Serial.print(" S2: ");
Serial.print(valor_s2);
Serial.print(" S3: ");
Serial.println(valor_s3);
Serial.print(" S4: ");
Serial.println(valor_s4);
//Checa o nivel e atualiza o display
if ((valor_s1 == 1) && valor_s2 == 1 && valor_s3 == 1 && valor_s4 == 1)
{
//Atualiza o nivel no display, enviando o numero de
//"quadrados" que devem ser mostrados para indicar
//o nivel
mostra_nivel(15);
//Desliga o rele
digitalWrite(pino_rele, LOW);
//lcd.setBacklight(HIGH);
//delay(10);
}
if ((valor_s1 == 0) && valor_s2 == 1 && valor_s3 == 1 && valor_s4 == 1)
{
//Atualiza o nivel no display
mostra_nivel(11);
}
if ((valor_s1 == 0) && valor_s2 == 0 && valor_s3 == 1 && valor_s4 == 1)
{
//Atualiza o nivel no display
mostra_nivel(7);
}
if ((valor_s1 == 0) && valor_s2 == 0 && valor_s3 == 0 && valor_s4 == 1)
{
//Atualiza o nivel no display
mostra_nivel(4);
}
if ((valor_s1 == 0) && valor_s2 == 0 && valor_s3 == 0 && valor_s4 == 0)
{
mostra_nivel(0);
//Liga o rele
digitalWrite(pino_rele, HIGH);
// lcd.setBacklight(LOW);
//delay(10);
}
delay(100);
}
void mostra_nivel(int nivel)
{
if (nivel != nivel_anterior)
{
//Apaga informacao anterior
lcd.setCursor(0, 1);
lcd.print(" ");
//Atualiza o nivel no display
for (int i = 0; i <= nivel; i++)
{
lcd.setCursor(i, 1);
lcd.write(uint8_t(3));
}
nivel_anterior = nivel;
}
}
O erro esta aqui:
/Apaga informacao anterior
lcd.setCursor(0, 1);
lcd.print(” “);
//Atualiza o nivel no display
O correto: lcd.print(” “); // 15 espaços para limpar toda linha
CONSEGUI FIZ VARIOS TESTES
//Programa: Monitoracao de Caixa d´agua usando Arduino
//Autor: Arduino e Cia
//Display HD44780 com adaptador I2C
#include
#include // include hd44780 library header file
#include // i/o expander/backpack class
hd44780_I2Cexp lcd; // auto detect backpack and pin mappings
#define pino_rele 7
#define sensor1 8
#define sensor2 9
#define sensor3 10
#define sensor4 11
#define pino_buzzer 12
int valor_s1 = 1, valor_s2 = 1, valor_s3 = 1, valor_s4 = 1;
//Simbolos
uint8_t letra_C[8] = {0x0, 0xE, 0x11, 0x11, 0x11, 0x11, 0x0, 0x0};
uint8_t letra_M[8] = {0x0, 0x1F, 0x2, 0x4, 0x2, 0x1F, 0x0, 0x0};
uint8_t letra_v[8] = {0x0, 0x7, 0x8, 0x10, 0x8, 0x7 , 0x0, 0x0};
uint8_t caracter_nivel[8] = {0x0, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0};
int nivel_anterior = 0;
void setup()
{
Serial.begin(9600);
//Inicializa o display I2C
lcd.begin(16, 2);
//Caracteres customizados
lcd.createChar(0, letra_C);
lcd.createChar(1, letra_M);
lcd.createChar(2, letra_v);
lcd.createChar(3, caracter_nivel);
//Define os pinos dos sensores como entrada
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
pinMode(sensor4, INPUT);
pinMode(pino_rele, OUTPUT);
//Mostra a letra C no display
lcd.setCursor(15, 0);
lcd.write(uint8_t(0));
//Mostra a letra M no display
lcd.setCursor(8, 0);
lcd.write(uint8_t(1));
//Mostra a letra V no display
lcd.setCursor(0, 0);
lcd.write(uint8_t(2));
Serial.println("Monitoracao de Caixa Dagua");
Serial.println();
}
void loop()
{
//Leitura dos sensores
int valor_s1 = digitalRead(sensor1);
int valor_s2 = digitalRead(sensor2);
int valor_s3 = digitalRead(sensor3);
int valor_s4 = digitalRead(sensor4);
//Mostra valor dos sensores no serial monitor
Serial.print("S1: ");
Serial.print(valor_s1);
Serial.print(" S2: ");
Serial.print(valor_s2);
Serial.print(" S3: ");
Serial.println(valor_s3);
Serial.print(" S4: ");
Serial.println(valor_s4);
//Checa o nivel e atualiza o display
//valor_s4
if ((valor_s1 == 1) && valor_s2 == 1 && valor_s3 == 1 && valor_s4 == 1)
{
//Atualiza o nivel no display, enviando o numero de
//"quadrados" que devem ser mostrados para indicar
//o nivel
mostra_nivel(15);
//Liga o rele
digitalWrite(pino_rele, HIGH);
}
//valor_s3
if ((valor_s1 == 1) && valor_s2 == 1 && valor_s3 == 1 && valor_s4 == 0)
{
//Atualiza o nivel no display
mostra_nivel(11);
}
//valor_s2
if ((valor_s1 == 1) && valor_s2 == 1 && valor_s3 == 0 && valor_s4 == 0)
{
//Atualiza o nivel no display
mostra_nivel(7);
}
//valor_s1
if ((valor_s1 == 1) && valor_s2 == 0 && valor_s3 == 0 && valor_s4 == 0)
{
//Atualiza o nivel no display
mostra_nivel(3);
}
//valor_s0
if ((valor_s1 == 0) && valor_s2 == 0 && valor_s3 == 0 && valor_s4 == 0)
{
mostra_nivel(0);
//Desliga o rele
digitalWrite(pino_rele, LOW);
}
delay(100);
}
void mostra_nivel(int nivel)
{
if (nivel != nivel_anterior)
{
//Apaga informacao anterior
lcd.setCursor(0, 1);
lcd.print(" ");
//Atualiza o nivel no display
for (int i = 0; i <= nivel; i++)
{
lcd.setCursor(i, 1);
lcd.write(uint8_t(3));
}
nivel_anterior = nivel;
}
}
ESSE FUNCIONA COM QUATRO SENSORES
Consegui resolver, porem agora estou querendo colocar um wifi e um sensor de temperatura nesse mesmo projeto.
Bom dia, primeiramente parabéns pelo projeto.
Você poderia me dar uma ideia de como adicionar avisos via MQTT?
Oi Philipi!
Boa sugestão. Vamos ver na versão "2.0" do post. 🙂
Abraço!
Adilson
Baixei a biblioteca do post mais mesmo assim pede a biblioteca, alguem que conseguiu pode ser mais especifico, pois o arquivo que pede não vem junto.
Carreguei toda programação e ele identifica os sensores no serial porém no LCD não mostra os níveis, oque pode ser?
Boa tarde,
Ele chega a mostrar alguma coisa no display?
Abraço!
Adilson
Boa noite, estou tendo problemas com o display LCD no arduíno, a programação está ok e foi testada no Serial Monitor e teve o recebimento de sinal, mas não tem repasse de informação para o display, gostaria de saer o que pode estar acontecendo
Boa noite,
O display é I2C? Confira o endereço dele usando o I2CScanner.
Abraço!
Adilson
BOA NOITE
NÃO TO CONSEGUINDO COMPILAR , TA DANDO UM ERRO NO HD44780
Bom dia Antonio,
Que erro está apresentando?
Abraço!
Adilson
Boa noite,
Alteraram alguma coisa na biblioteca, por isso não estava funcionando. Programa e post atualizados.
Abraço!
Adilson
Boa tarde, como eu poderia fazer para receber avisos via wifi, algum aviso que me envia o estado da caixa d'água, seria usando algum módulo diferente ?
Boa noite,
Você pode usar por exemplo algum módulo da linha ESP8266. Dê uma olhada nos posts aqui do blog, por favor.
Abraço!
Adilson
Boa noite, gostaria de ligar um motor simples no rele, como por exemplo um cooler, eu posso fazer essa ligação direta no rele? Ou vai ter que alterar a programação?
Oi Talita,
Pode fazer direto. Só verifique se o aparelho que você vai usar não ultrapassa a capacidade de corrente do relé (o mais comum são relés de 10A).
Abraço!
Adilson
Ola.
Estou fazendo a verificação do código depois de baixar e adicionar a biblioteca, mas o erro continua sendo o mencionado como se não houvesse a biblioteca adicionada ao software.
error: hd44780.h: No such file or directory
compilation terminated.
exit status 1
hd44780.h: No such file or directory
Mesmo erro aqui.
Boa noite,
Alteraram alguma coisa na biblioteca, por isso não estava funcionando. Programa e post atualizados.
Abraço!
Adilson
BOM DIA
COMO FAÇO PARA ADICIONAR UM MODULO BLUETOOTH PARA RECEBER AS MESMAS INFORMAÇÕES DO DISPLAY NO APLICATIVO ?
Oi Antonio,
Que aplicativo você vai usar?
Abraço!
Adilson
Oi Talita,
Realmente havia um erro na biblioteca. Alteraram alguma coisa e o HD44780 parou de funcionar. Já corrigi tanto o programa como o post.
Me avise se funcionar, por favor.
Abraço!
Adilson
Muito obrigada, me salvou ❤️
Haha Valeu pelo retorno, Talita. 🙂
Abraço!
Adilson
Boa tarde de novo kkkk tô tentando simular no proteus o projeto porém no display não está aparecendo nada, ele liga mas não aparece nenhuma informação. Quais são os pinos que eu uso pra ligar no arduíno, além da fonte e do gnd?
Oi Talita,
Os pinos da interface I2C: SDA e SCL.
Abraço!
Adilson
Bom dia,enquanto a parte elétrica do sensor, a isolação de fábrica já garante que não feche curto ou tem que que fazer algum tipo de proteção para a medma
Boa tarde! Normalmente o isolamento do sensor suporta bem até produtos corrosivos, uso algum tempo e não tive problema com isolação.Uso tanto de boia vertical como pêndulo.
Boa tarde amigo, sempre que a caixa dagua começa a esvaziar, os sensores só atualizam a marcação no display se eu utilizar o Monitor Serial do Arduino. Existe alguma forma de deixar de forma automática da mesma forma que acontece quando a caixa esta vazia e vai enchendo?
Oi Leandro,
Teoricamente não teria nenhuma relação.. a não o fato de que quando vc entra no Serial Monitor o Arduino é reiniciado… Já verificou se a sua placa não está travando?
Abraço!
Adilson
só uma dica.. eu fiz um pouco diferente .. coloquei os 3 sensores sendo.. de cima para baixo.. o primeiro sensor acima do nivel da agua (boia) o segundo na metade e o terceiro no fundo da caixa.. assim sei se a caixa esta vazando agua caso a boia o outro recurso venha falhar … assim se a agua estiver acima do segundo sensor cheia e abaixo do segundo sendor metade e abaixo do terceiro vazia.. assim com 3 sensores consigo monitorar os quatros status .. vazia .. metade .. cheia .. vazando
Boa noite!!! Alguém poderia me ajudar o display não atualiza o nível.. verifiquei o monitor serial e os sensores estão funcionando S1/S2/S3 entre 0 e 1,mas os quadrados referente ao nível não atualiza .agradeço quem puder me dar essa força
Boa noite!!! Alguém poderia me ajudar carreguei o programa ele mostra as características dos sensores mas ao atuar os sensores não atualiza no display já no monitor serial as entradas referentes aos sensores funcionam perfeitamente agradeço quem me ajudar
Olá pessoal alguém poderia me ajudar o display não atualiza os níveis o monitor serial mostra que eles estão funcionando corretamente … abraço
[…] usar o sensor de nível de líquidos? Então confira também outro post onde utilizo esse sensor, o Monitore sua caixa dágua usando arduino. Até […]
[…] pode usar vários sensores desse tipo e montar um esquema parecido com o que eu mostrei no post Monitore sua Caixa dágua usando Arduino, por […]
Bom dia, seria possivel adicionar um Node MCU com o sensor de rele para acionar a bomba atraves da Wi-Fi neste mesmo projeto?
Outra duvida, existe a possibilidade de utilizar sensores ultrasonicos na vertical para verificar o nivel da agua tanto da caixa d’agua quanto da cisterna?
Oi Max,
É possível sim, seria uma evolução interessante deste projeto. Quanto ao sensor ultrassônico, eu já vi projetos assim mas que devido às características do sensor (geralmente o HC-SR04) a leitura não é muito confiável (ele pode detectar o fundo do recipiente ou as paredes, por exemplo). Existem sensores mais profissionais feitos especialmente para líquidos. Outra opção é vc usar um sensor de aproximação como o XKC-Y25-V, que eu mostro neste post.
Abraço!
Adilson
Bom noite, estou tendo um problema em que os caracteres mostra nível, esta somente aumentando e não diminuem, nao indicam a redução,o que pode ser ?
Oi Tiago,
Consegue saber se o problema é no display ou nos sensores? Recomendo usar um programa de teste do display para verificar se ele está ok.
Abraço!
Adilson
Bom dia,
Gostaria de fazer um projeto desse de leitura do nível de caixa d’água com o ESP8266 no Blynk. Pode me ajuda a adaptar o código?
Muito obrigado.
Oi Renato,
Posso te ajudar sim. Até onde vc chegou com o projeto?
Abraço!
Adilson
Adilson, boa tarde.
Obrigado pelo retorno!
Eu não tenho muito conhecimento em programação, por isso consegui fazer o projeto funcionar com a ajuda de alguns códigos prontos na internet. Consegui rodar o projeto em uma página na web local e implementei atualização via OTA, mas ainda não consegui fazer funcionar no Blynk.
Segue o código:
#include
#include \\*
#include \\*
#include \\*
#include
//#####################################//
const char* ssid = “Renato”;
const char* password = “1536@Rpg”;
String readString;
char c;
int sensor1 = 16;
int sensor2 = 5;
int sensor3 = 4;
int sensor4 = 14;
WiFiServer server(80);
//#####################################//
void setup() {
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
pinMode(sensor4, INPUT);
Serial.begin(115200);
delay(10);
Serial.print(“Conectando na rede: “);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi Conectada”);
server.begin();
Serial.println(“Servidor iniciado!”);
Serial.print(“Endereço IP: “);
Serial.println(WiFi.localIP());
// Mantenha esse trecho OTA
ArduinoOTA.onStart([]() {
Serial.println(“Inicio…”);
});
ArduinoOTA.onEnd([]() {
Serial.println(“nFim!”);
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf(“Progresso: %u%%r”, (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf(“Erro [%u]: “, error);
if (error == OTA_AUTH_ERROR) Serial.println(“Autenticacao Falhou”);
else if (error == OTA_BEGIN_ERROR) Serial.println(“Falha no Inicio”);
else if (error == OTA_CONNECT_ERROR) Serial.println(“Falha na Conexao”);
else if (error == OTA_RECEIVE_ERROR) Serial.println(“Falha na Recepcao”);
else if (error == OTA_END_ERROR) Serial.println(“Falha no Fim”);
});
ArduinoOTA.begin();
Serial.println(“Pronto”);
Serial.print(“Endereco IP: “);
Serial.println(WiFi.localIP());
}
void loop() {
//####################################################################################//
// Mantenha esse trecho no inicio do laço “loop” – verifica requisicoes OTA
ArduinoOTA.handle();
WiFiClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\r') {
String buf = "";
buf += "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
buf += “CONTROLE DE NÍVEL D’AGUA”;
buf += “NODEMCU”;
buf += “SENSOR BÓIA NÍVEL D’AGUA”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
if (digitalRead(sensor1) == 0) {
buf += “Nivel Maximo”;
} else {
buf += “Nivel Maximo”;
}
buf += “”;
buf += “”;
if (digitalRead(sensor2) == 0) {
buf += “Nivel Medio”;
} else {
buf += “Nivel Medio”;
}
buf += “”;
buf += “”;
if (digitalRead(sensor3) == 0) {
buf += “Nivel Baixo”;
} else {
buf += “Nivel Baixo”;
}
buf += “”;
buf += “”;
if (digitalRead(sensor4) == 0) {
buf += “Caixa Quase Vazia”;
} else {
buf += “Caixa Quase Vazia”;
}
buf += “”;
buf += “”;
buf += “”;
buf += “”;
buf += “”;
client.print(buf);
client.flush();
client.stop();
readString = “”;
}
}
}
}
}
boa tarde os caracteres do display não atualizam não diminuem apenas aumentam alguem resolveu isso?
Oi Flávio!
Tudo bem? Eu testei o programa aqui e rodou normalmente. Você alterou alguma coisa no circuito?
Abraço!
Adilson
Boa noite, Por favor, alguém pode me ajudar? Estou querendo monitorar o nível de água da caixa d’água de minha casa e tenho 2 dúvidas. PRIMEIRA DÚVIDA: Qual sensor utilizar, pois verifiquei que há vários modelos (XKC-Y25-V, XKC-Y25-NPN, XKC-Y25-PNP e XKC-Y25-RS485). Qual a diferença entre os modelos V, NPN, PNP e RS485? SEGUNDA DÚVIDA: A distância entre esses sensores e o painel onde ficará o circuito (Arduino, buzzer, LCD, etc) é de 15 metros. Terei perdas com essa distância? Preciso colocar algum cabo especial? Fiquem em paz e MUITO OBRIGADO!