Um Cronometro Eletronico De Precisao
Como montar um cronômetro eletrônico de precisão com Arduino
A maioria das pessoas que tenta construir um cronômetro eletrônico de precisao em casa acaba comprando um módulo de display e conectando botões, mas esquece que a verdadeira dificuldade está no timer do microcontrolador. Se você simplesmente usar millis() do Arduino padrão, já pode esquecer de precisão acima de 10 milissegundos. O erro acumula e, em medições longas, a coisa sai do eixo. Um cronômetro dessas categorias não depende do timer principal do Arduino. Você precisa configurar o TIMER1 ou TIMER2 como contador externo, usando o pino T1 (pin 5 no ATmega328P) para capturar sinais de evento com resolução de um ciclo de clock. Com clock de 16 MHz, isso dá resolução de 62,5 nanossegundos por contagem. Muito diferente dos 1.000 microssegundos que o millis() te entrega de graça. O display é o segundo ponto crítico. LCDs comuns têm tempo de refresh de ~200ms. Se você está medindo frações de segundo, não adianta ter precisão no timer se o display não consegue atualizar sem piscar ou travar. Use um display OLED I2C de 0,96 polegadas. Atualização quase instantânea, contraste bom, e consome cerca de 20mA no máximo.
Eu montei um desses para uma competição de robótica há uns três anos. O problema foi que o circuito de debouncing dos botões estava interferindo no timer através do ground compartilhado. Cada vez que o operador pressionava START, o timer zerei de forma errática. A solução foi separar completamente o ground do circuito de botões com um isolador óptico e alimentar a lógica de entrada por um regulador LDO 3,3V independente, mesmo usando o mesmo Arduino. O erro de triggering caiu de ~15ms para menos de 0,1ms.
Código funcional
O segredo é configurar o TIMER1 em modo CTC com prescaler de 1, e usar a interrupção de overflow para acumular segundos. O pino T1 recebe o sinal de start/stop via external interrupt (INT0 no pin 2). Configuração do TIMER1: TCCR1B = (1 << WGM12) | (1 <
CS10); // CTC, prescaler 1

Isso faz o timer contar a cada 62,5 nanossegundos. Quando o overflow acontece (65536 contagens), você adiciona 65536 ao contador total. A matemática é simples mas precisa ser feita na interrupção, não no loop principal, senão você perde eventos durante operações de display. Para o display OLED, use a biblioteca SSD1306Wire. Renderize os dígitos com fonte monoespaçada e atualize apenas quando o valor mudar. Isso evita flicker desnecessário e reduz o consumo.
Pegadinhas que ninguém conta
A primeira pegadinha é a caparacidade parasita dos fios. Se você está medindo sinais de alta frequência vindos de sensores externos, um cabo de 30cm já introduz capacitância suficiente para distorcer bordas de pulso. Use cabo coaxial ou, no mínimo, twisted pair com resistor de terminação de 100 ohms. A segunda é o fenômeno de jitter no clock do cristal. Osciladores de cristal de 16 MHz genéricos têm tolerância de +/-20 ppm. Em uma hora de medição contínua, isso significa até 72 milissegundos de erro sistemático. Para aplicações que exigem precisão real, invista em um cristal de 10 ppm ou, idealmente, um oscilador TCXO. Custa uns 15 reais a mais e elimina essa variável completamente. O que funciona na prática:
- TIMER1 em modo contador externo com prescaler 1
- Display OLED I2C com atualização seletiva
- Debouncing por software com filtro de 10ms, nunca por capacitor
- Alimentação separada para a parte de trigger dos botões
- Cristal de 10 ppm se a medição passar de 5 minutos
O custo total fica entre 80 e 120 reais, dependendo dos componentes que você já tem em estoque. Leva cerca de 3 horas para montar e calibrar. O resultado é um cronômetro com precisão de 62,5 microssegundos em média, capaz de medir até 18 horas sem overflow do acumulador de segundos.

Galeria
-
Cronômetro Digital Profissional De Precisao Memoria 10 Volta - VOLLO ... -
Cronômetro Digital de Mão Alta Precisão 1/100s Display Grande com ... -
Um Cronômetro Esportivo, Cronômetro Eletrônico, Cronômetro ...