Buscar
banner

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
Faça login para adicionar um comentário.
  1. Nenhum comentário ainda. Seja o primeiro a comentar!

Gostou do Projeto?