⏱️ Criando um Timer Visual com Arduino para Controlar o Tempo de Apresentações
Resumo para o Leitor
Aprenda a criar um cronômetro visual utilizando LEDs e botões no Arduino. Um projeto prático para controlar o tempo de pitches, reuniões ou estudos (Pomodoro), dominando entradas e saídas digitais.
O Problema
Quem nunca estourou o tempo em uma apresentação de trabalho ou em uma reunião? Ficar olhando para o relógio tira o foco do orador. A solução é criar um dispositivo periférico simples que nos avise visualmente o “status” do tempo.
Neste tutorial completo, vamos construir um sistema onde:
- LED Verde: Indica que o tempo está tranquilo.
- LED Amarelo: Indica “Atenção”, o tempo está acabando.
- LED Vermelho: Indica “Pare”, o tempo esgotou.
- Botão: Reinicia a contagem.
Lista de Materiais
Vamos utilizar o kit básico de Arduino:
- 1x Arduino Uno
- 3x LEDs (1 Verde, 1 Amarelo, 1 Vermelho)
- 3x Resistores de 220Ω ou 330Ω (para os LEDs)
- 1x Botão (Push-button)
- 1x Resistor de 10kΩ (para o botão)
- Protoboard e Jumpers
A Montagem (Hardware)

O Código Completo
Abaixo está o código funcional. Note como utilizamos variáveis para definir o tempo de cada etapa. Isso facilita ajustes futuros sem precisar caçar números mágicos no meio do código.
// --- Mapeamento de Hardware ---
const int pinVerde = 2;
const int pinAmarelo = 3;
const int pinVermelho = 4;
const int pinBotao = 12;
// --- Configurações de Tempo (em milissegundos) ---
// Para teste rápido, usaremos tempos curtos.
// Num cenário real, você mudaria 3000 para 300000 (5 minutos), por exemplo.
const int tempoVerde = 3000; // 3 segundos de tempo livre
const int tempoAmarelo = 2000; // 2 segundos de alerta
void setup() {
// Configura os pinos dos LEDs como SAÍDA
pinMode(pinVerde, OUTPUT);
pinMode(pinAmarelo, OUTPUT);
pinMode(pinVermelho, OUTPUT);
// Configura o pino do botão como ENTRADA
pinMode(pinBotao, INPUT);
// Inicializa o sistema no estado "Pronto/Resetado" (Apenas Vermelho Aceso)
resetarSistema();
}
void loop() {
// Lê o estado do botão
int leituraBotao = digitalRead(pinBotao);
// Se o botão for pressionado, inicia a contagem do timer
if (leituraBotao == HIGH) {
iniciarCicloDeTempo();
}
}
void resetarSistema() {
// Estado de espera: Apenas vermelho ligado indicando "Parado"
digitalWrite(pinVerde, LOW);
digitalWrite(pinAmarelo, LOW);
digitalWrite(pinVermelho, HIGH);
}
void iniciarCicloDeTempo() {
// 1. Início da apresentação (Luz Verde)
digitalWrite(pinVermelho, LOW); // Apaga o vermelho anterior
digitalWrite(pinVerde, HIGH); // Acende o verde
delay(tempoVerde); // Espera o tempo do verde
// 2. Alerta (Luz Amarela)
digitalWrite(pinVerde, LOW); // Apaga o verde
digitalWrite(pinAmarelo, HIGH); // Acende o amarelo
delay(tempoAmarelo); // Espera o tempo do amarelo
// 3. Tempo Esgotado (Luz Vermelha Piscando)
digitalWrite(pinAmarelo, LOW); // Apaga o amarelo
// Pisca o vermelho 5 vezes para chamar atenção
for(int i = 0; i < 5; i++) {
digitalWrite(pinVermelho, HIGH);
delay(200);
digitalWrite(pinVermelho, LOW);
delay(200);
}
// Retorna ao estado de repouso (Vermelho fixo)
digitalWrite(pinVermelho, HIGH);
}Execução

Entendendo a Lógica
O segredo deste código está na função iniciarCicloDeTempo(). Ela é linear e bloqueante (usando delay). Isso significa que, uma vez apertado o botão, o Arduino executa cada linha uma após a outra até o fim do ciclo.
Experimente alterar as variáveis tempoVerde e tempoAmarelo para adaptar o timer às suas necessidades!