TIMER PARA BANHO COM LCD E ARDUINO
Publicado em 17 de Julho de 2026 às 21:37
ELE APITA DEPOIS DO TIMER PROGRAMADO COM SELEÇÃO DE PESSOA E SITIO E NIVEL DE SUJEIIRA INTELIGENTE
Materiais Necessários
- ARDUINO UNO R3 ( CEREBRO )
- LCD COM ADAPTADOR I2C ( 16 COLUNAS 2 LINHAS ) ( PARA ESCREVER A MENSAGEM)
- JUMP ( PARA LIGAR OS COMPONENTE )
- CABO USB-A USB-A ( CABO DE UMA IMPRESSORA )
- BANHEIRO ( PARA POR O TIMER ) ( COM TOMADA)
- PLUGUE PARA USB-A ( PARA ALIMENTAR )
- CAXA (PARA POR OS COMPONENTE)
- BUZZER ( PARA TOCAR O SOM )
- BOTAO ( COM 2 TERMINAIS)
Ferramentas Necessárias
- CANETA
- REGUA
- TESOURA
Etapas
PREPARANDO A CAIXA
- COLOQUE O BUZZER NA CAIXA E RISQUE NO FORMATO DO BUZZER
- CORTE NO FORMATO RISCADO
- MEÇA O TAMANHO DO LCD
- MEÇA A CAIXA
- ACHE A METADE DO COMPRIMENTO DO LCD
- POSICIONE A METADE DO LCD COM A METADE DA CAIXA
- MARQUE NA CAIXA O LCD
- CORTE O TAMANHO DO LCD NA CAIXA
- ENCAICHE O BUZZER NA CAIXA
- ENCAICHE O LCD NA CAIXA
LIGANDO
- LIGUE O - DO BUZZER NO GND DO ARDUINO
- LIGUE O + DO BUZZER NO PINO 9 DO ARDUINO
- LIGUE O VCC DO LCD NO 5V DO ARDUINO
- LIGUE O GND DO LCD NO GND DO ARDUINO
-
LIGUE SDA do display no pino A4 do Arduino.
LIGUE SCL do display no pino A5 do Arduino.
O CEREBRO
- COLE O CODIGO ABAIXO NO ARDUINO
-
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pinoBuzzer = 9;
const int pinoBotao = A0;
// --- VARIÁVEIS DE TEMPO ---
int tempoFlaiveNormal = 300;
int tempoFlaiveSemLavar = 330;
int tempoFlaiveLavarCabelo = 480;
int tempoFlaiveGato = 120;
int tempoWellingtonNormal = 300;
int tempoWellingtonGato = 120;
int tempoBrunoNormal = 360;
int tempoBrunoGato = 120;
int tempoBrunoPoucoSujo = 300;
int tempoBrunoMedioSujo = 360;
int tempoBrunoMuitoSujo = 420;
int tempoJoaoGNormal = 360;
int tempoJoaoGGato = 120;
int tempoJoaoGPoucoSujo = 300;
int tempoJoaoGMedioSujo = 360;
int tempoJoaoGMuitoSujo = 420;
int tempoCachorroNormal = 400;
int tempoCachorroGato = 180;
int tempoCachorroPoucoSujo = 240;
int tempoCachorroMedioSujo = 400;
int tempoCachorroMuitoSujo = 600;
int tempoSitioPadrao = 400;
// --- CONTROLE ---
int estado = 0;
int tempoRestante = 0;
int subMenuOpcao = 0; // 0=Gato, 1=Normal
int nivelSujeira = 0; // 0=Pouco, 1=Medio, 2=Muito
int tipoCabeloFlaive = 0;
bool foiNoSitio = false;
String nomes[] = {"Flaive", "Wellington", "Bruno", "Joao.G", "Cachorro"};
int totalUsuarios = 5;
int usuarioSelecionado = 0;
unsigned long tempoAnterior = 0;
unsigned long tempoPressionado = 0;
bool botaoFoiPressionado = false;
void setup() {
pinMode(pinoBuzzer, OUTPUT);
pinMode(pinoBotao, INPUT_PULLUP);
lcd.init(); lcd.backlight();
}
void loop() {
int leituraBotao = analogRead(pinoBotao);
bool estaPressionado = (leituraBotao < 300);
bool cliqueCurto = false;
bool cliqueLongo = false;
if (estaPressionado) {
if (!botaoFoiPressionado) { tempoPressionado = millis(); botaoFoiPressionado = true; }
} else {
if (botaoFoiPressionado) {
unsigned long duracao = millis() - tempoPressionado;
if (duracao > 2000) cliqueLongo = true;
else cliqueCurto = true;
botaoFoiPressionado = false;
}
}
if (estado == 0) {
lcd.setCursor(0, 0); lcd.print("PRONTO P/ BANHO!");
lcd.setCursor(0, 1); lcd.print("APERTE P/ INICIAR");
if (cliqueCurto) { estado = 1; lcd.clear(); }
}
else if (estado == 1) {
lcd.setCursor(0, 0); lcd.print("QUEM VAI TOMAR?");
lcd.setCursor(0, 1); lcd.print("> "); lcd.print(nomes[usuarioSelecionado]); lcd.print(" ");
if (cliqueCurto) { usuarioSelecionado++; if (usuarioSelecionado >= totalUsuarios) usuarioSelecionado = 0; }
if (cliqueLongo) { estado = 2; subMenuOpcao = 0; lcd.clear(); }
}
else if (estado == 2) {
lcd.setCursor(0, 0); lcd.print("TIPO DE BANHO?");
lcd.setCursor(0, 1); lcd.print(subMenuOpcao == 0 ? "> BANHO DE GATO " : "> BANHO NORMAL ");
if (cliqueCurto) subMenuOpcao = !subMenuOpcao;
if (cliqueLongo) {
if (subMenuOpcao == 0) { // Gato
if (nomes[usuarioSelecionado] == "Flaive") tempoRestante = tempoFlaiveGato;
else if (nomes[usuarioSelecionado] == "Wellington") tempoRestante = tempoWellingtonGato;
else if (nomes[usuarioSelecionado] == "Bruno") tempoRestante = tempoBrunoGato;
else if (nomes[usuarioSelecionado] == "Joao.G") tempoRestante = tempoJoaoGGato;
else tempoRestante = tempoCachorroGato;
estado = 5;
} else { // Normal
if (nomes[usuarioSelecionado] == "Wellington") { tempoRestante = tempoWellingtonNormal; estado = 5; }
else if (nomes[usuarioSelecionado] == "Flaive") { estado = 4; }
else { estado = 3; foiNoSitio = false; }
}
lcd.clear();
}
}
else if (estado == 3) { // Pergunta Sítio
lcd.setCursor(0, 0); lcd.print("FOI NO SITIO?");
lcd.setCursor(0, 1); lcd.print(foiNoSitio ? "> SIM" : "> NAO");
if (cliqueCurto) foiNoSitio = !foiNoSitio;
if (cliqueLongo) {
if (foiNoSitio) {
tempoRestante = tempoSitioPadrao;
estado = 5;
} else {
estado = 4; nivelSujeira = 0;
}
lcd.clear();
}
}
else if (estado == 4) { // Ajustes
lcd.setCursor(0, 0);
if (nomes[usuarioSelecionado] == "Flaive") {
lcd.print("OPCAO CABELO? ");
lcd.setCursor(0, 1);
if (tipoCabeloFlaive == 0) lcd.print("> NORMAL ");
else if (tipoCabeloFlaive == 1) lcd.print("> LAVAR CABELO ");
else lcd.print("> SEM LAVAR ");
if (cliqueCurto) { tipoCabeloFlaive++; if (tipoCabeloFlaive > 2) tipoCabeloFlaive = 0; }
if (cliqueLongo) {
if (tipoCabeloFlaive == 0) tempoRestante = tempoFlaiveNormal;
else if (tipoCabeloFlaive == 1) tempoRestante = tempoFlaiveLavarCabelo;
else tempoRestante = tempoFlaiveSemLavar;
estado = 5;
}
} else { // Bruno, João ou Cachorro (Sujeira)
lcd.print("NIVEL SUJEIRA? ");
lcd.setCursor(0, 1);
if (nivelSujeira == 0) lcd.print("> POUCO SUJO ");
else if (nivelSujeira == 1) lcd.print("> MEDIO SUJO ");
else if (nivelSujeira == 2) lcd.print("> MUITO SUJO ");
if (cliqueCurto) { nivelSujeira++; if (nivelSujeira > 2) nivelSujeira = 0; }
if (cliqueLongo) {
if (nomes[usuarioSelecionado] == "Bruno")
tempoRestante = (nivelSujeira == 0) ? tempoBrunoPoucoSujo : (nivelSujeira == 1 ? tempoBrunoMedioSujo : tempoBrunoMuitoSujo);
else if (nomes[usuarioSelecionado] == "Joao.G")
tempoRestante = (nivelSujeira == 0) ? tempoJoaoGPoucoSujo : (nivelSujeira == 1 ? tempoJoaoGMedioSujo : tempoJoaoGMuitoSujo);
else
tempoRestante = (nivelSujeira == 0) ? tempoCachorroPoucoSujo : (nivelSujeira == 1 ? tempoCachorroMedioSujo : tempoCachorroMuitoSujo);
estado = 5;
}
}
if (cliqueLongo) lcd.clear();
}
else if (estado == 5) {
lcd.setCursor(0, 0); lcd.print("BANHO: "); lcd.print(nomes[usuarioSelecionado]);
lcd.setCursor(0, 1);
int min = tempoRestante / 60; int seg = tempoRestante % 60;
if (min < 10) lcd.print("0"); lcd.print(min); lcd.print(":");
if (seg < 10) lcd.print("0"); lcd.print(seg);
if (cliqueCurto) { estado = 0; }
if (millis() - tempoAnterior >= 1000) { tempoAnterior = millis(); tempoRestante--; if (tempoRestante < 0) estado = 6; }
}
else if (estado == 6) {
tone(pinoBuzzer, 1000);
lcd.setCursor(0, 0); lcd.print("FIM DO TEMPO! ");
if (cliqueCurto) { noTone(pinoBuzzer); estado = 0; }
}
}

Comentários
0