Construa um Temporizador Regressivo Confiável com Arduino e Display de 7 Segmentos SparkFun
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Protoboard (genérico) | 1 |
| Jumpers (genéricos) | 1 |
| Display Serial de 7 Segmentos SparkFun - Vermelho | 1 |
| Cabo USB-A para Mini-USB | 1 |
| Arduino Mega 2560 | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Este projeto foi criado por necessidade: não tinha um temporizador à mão. Para utilizá-lo, basta fazer o upload do código para seu Arduino (qualquer modelo funciona) e a contagem regressiva iniciará automaticamente.
Para alterar o tempo total, modifique esta linha do código:
long n = 60000; // tempo inicial - PODE SER ALTERADO PARA QUALQUER TEMPO DESEJADO
Importante: 1000 = 1 segundo. Portanto, 60000 = 60 segundos. A fórmula (SEGUNDOS × 1000) fornece o valor a ser inserido no lugar de 60000. Ao pressionar o botão de reset, o contador reinicia automaticamente.
Código
O código abaixo controla o display de 7 segmentos de 4 dígitos diretamente (sem placa breakout), usando multiplexação para mostrar a contagem regressiva.
// Mapeamento de pinos: display de 7 segmentos -> pino Arduino
// pino 11 - A = 12 | pino 7 - B = 10 | pino 4 - C = 8 | pino 2 - D = 7
// pino 1 - E = 6 | pino 10 - F = 11 | pino 5 - G = 9 | pino 3 = decimal
// Dígitos: pino 12 = 1º | pino 9 = 2º | pino 8 = 3º | pino 6 = 4º
const int a = 12, b = 10, c = 8, d = 7, e = 6, f = 11, g = 9;
int p = 0;
int startStopReset = 13;
const int d1 = 1, d2 = 2, d3 = 3, d4 = 4;
long n = 60000; // tempo inicial em milissegundos (60s)
int x = 100;
int del = 55; // atraso em microssegundos para multiplexação
void setup() {
pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT);
pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT);
pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(p, OUTPUT);
pinMode(startStopReset, INPUT);
digitalWrite(startStopReset, HIGH); // pull-up interno
}
void loop() {
digitalWrite(p, HIGH);
clearLEDs();
pickDigit(1); pickNumber((n/x/1000)%10); delayMicroseconds(del);
clearLEDs();
pickDigit(2); pickNumber((n/x/100)%10); delayMicroseconds(del);
clearLEDs();
pickDigit(3); dispDec(3); pickNumber((n/x/10)%10); delayMicroseconds(del);
clearLEDs();
pickDigit(4); pickNumber(n/x%10); delayMicroseconds(del);
n--; // use n++ para cronômetro progressivo
if (digitalRead(13) == LOW) {
n = 60000; // reinicia com o tempo original configurado
}
}
void pickDigit(int x) {
digitalWrite(d1, HIGH); digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH); digitalWrite(d4, HIGH);
switch(x) {
case 1: digitalWrite(d1, LOW); break;
case 2: digitalWrite(d2, LOW); break;
case 3: digitalWrite(d3, LOW); digitalWrite(p, HIGH); break;
default: digitalWrite(d4, LOW); break;
}
}
void pickNumber(int x) {
switch(x) {
default: zero(); break;
case 1: one(); break; case 2: two(); break; case 3: three(); break;
case 4: four(); break; case 5: five(); break; case 6: six(); break;
case 7: seven(); break; case 8: eight(); break; case 9: nine(); break;
}
}
void dispDec(int x) { digitalWrite(p, LOW); }
void clearLEDs() {
digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW);
digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW);
digitalWrite(g, LOW); digitalWrite(p, LOW);
}
void zero() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); }
void one() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void two() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void three() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void four() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void five() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void six() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void seven() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void eight() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void nine() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
Esquemático
Utilize o diagrama de conexão abaixo para ligar seu display de 4 dígitos ao Arduino:

Processo de manufatura
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Construa o Clássico Jogo Pong no Arduino UNO com Display OLED – Tutorial Passo a Passo
- Detector de Frequência de Áudio com Arduino – Meça Picos de Som com Módulo de Alta Sensibilidade
- Construa Seu Próprio Tamagotchi com Arduino: Projeto DIY de Pet Digital
- Controlador Inteligente de Interruptor de Luz Sem Fio: Manipulador Remoto Baseado em Arduino
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
- Pistola de Água Inteligente com Detecção de Movimento usando Arduino Nano
- Timer de Lavagem de Mãos com Arduino: Ferramenta DIY Simples para Combater a COVID‑19
- Girassol Eletrônico com Arduino: Rastreador Solar Autônomo
- Construa Seu Próprio Carro RC Porsche com Arduino: Guia Passo a Passo