Construir um relógio com termômetro funciona quando você para de complicar
A maioria dos tutoriais pela internet pula direto para o código e ignora como as coisas realmente se comportam quando vocêliga tudo pela primeira vez. Vou explicar do jeito que eu faço, porque já queimei mais de um módulo RTC e desperdicei horas tentando calibrar sensores que não estavam nem perto do chão. O projeto básico de relógio com termômetro gira em torno de três partes: o microcontrolador, o módulo de tempo real e o sensor de temperatura. O display é apenas a interface final, mas define grande parte do problema que você vai enfrentar.
Relógio com termômetro — o que dá certo na prática
Eu começo sempre escolhendo o microcontrolador com base no display que vou usar, não o contrário. Se o projeto usa um display OLED SSD1306 de 128x64, um ESP32 ou um STM32F103 funcionam bem porque têm memória suficiente para bufferizar a tela sem travar. Se for um LCD 16x2 comum via I2C, até um ATmega328P serve, mas aí a atualizaçãode temperatura fica limitada a uma vez a cada 2 ou 3 segundos por causa da lentidão do protocolo. O sensor de temperatura é onde a maioria das pessoas erra. O DHT22 é barato e fácil de achar, mas tem uma taxa de amostragem máxima de 0,5 Hz. Isso significa que você não consegue ler temperatura duas vezes por segundo sem corromper os dados. Eu usei isso em um projeto residencial e levei dois dias entendendo por que o relógio travava aleatoriamente. O problema não era o código, era a biblioteca do DHT22 bloqueando a thread principal durante a leitura. A solução foi trocar para o DS18B20 em configuração parasita, que permite leituras assíncronas e não trava o processamento do relógio.
O módulo RTC precisa ser externo se o microcontrolador não tiver um em hardware. O DS1302 é obsoleto e precisa de bateria Cr1220 que dura cerca de um ano em média. O DS3231 é mais caro, mas mantém a precisão de 2 ppm e já vem com compensação térmica embutida, oque elimina quase todo o erro de derivação que aparece em projetos caseiros após algumas semanas rodando. A conexão entre os componentes segue dois caminhos principais. I2C é mais limpo, usa apenas dois fios e funciona bem com displays SSD1306, DS3231 e até alguns sensores de temperatura como o TMP102. SPI é mais rápido mas exige mais pinos. Para um relógio com termômetro que não precisa de alta velocidade, I2C resolve com folga e ocupa menos pinos do microcontrolador.
O código em si é simples se você separar as responsabilidades. Atualize o display apenas quando os dados mudarem, não a cada loop. Armazene a última temperatura lida e só escreva na tela quando o valor variar mais de 0,1 °C. Isso reduz o desgaste do OLED em cerca de 70% e diminui o flickering que aparece em projetos que refrescam a tela a cada iteração do loop principal.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Configuração passo a passo sem perder tempo
Monte o circuito antes de escrever qualquer linha de código. Conecte o VCC e GND, depois o SDA e SCL. Use resistores de pull-up de 4k7 nos barramentos I2C se o display ou o RTC não tiverem resistores internos soldados. A maioria dos módulos chineses já vem com eles, mas os mais baratos às vezes cortam esse custo e o barramento fica instável. Rode um scanner I2C antes de prosseguir. É um script de cinco linhas que varre o barramento e mostra os endereços encontrados. Se o sensor de temperatura não aparecer, o problema é físico, não de software. Já vi gente passando horas debugando código porque o cabo do sensor estava solto no protoboard.
Depois de confirmar os endereços, implemente o RTC primeiro. Defina a hora inicial via código, faça uma leitura de teste e verifique se os segundos avançam corretamente. Só então adicione o sensor de temperatura. Se tudo estiver funcionando separadamente, a integração costuma dar certo na primeira tentativa. A parte que ninguém explica é a calibração do sensor. Eu peguei um DS18B20 e comparei com um termômetro de referência de farmácia em várias temperaturas. O sensor marcava 0,8 °C acima dovalor real em torno de 25 °C. Ajustei adicionando um offset no código, mas o erro varia com a temperatura, então a correção ideal seria uma tabela de lookup de três pontos. Para uso doméstico, um offset fixo de -0,5 °C resolve na maior parte dos casos.
O que eu aprendi depois de construir três versões diferentes
O maior problema prático que encontrei foi a deriva térmica do cristal do RTC. O DS3231 compensa automaticamente, mas se você usar um DS1307 ou um cristal externo solto, a hora pode andar alguns segundos por dia em ambientes com variação de temperatura significativa. Um projeto que deixei rodando perto de uma janela no verão perdeu cerca de 4 minutos em duas semanas. Trocar para o DS3231 esse erro completamente. Outro detalhe que passa despercebido é a alimentação. Display OLED consome cerca de 20 mA em branco máximo. O ESP32 em modo ativo pode puxar até 170 mA. Se você alimentar tudo direto de uma USB de computador, a tensão pode cair nos picos de leitura do sensor e causar resetes. Use um capacitor de 100 µF em paralelo com o VCC do circuito e, se possível, uma fonte dedicada de 5 V 1 A em vez de depender da USB do PC.
O relógio com termômetro também tem limitações claras. Sensores resistivos como o DS18B20 respondem lentamente a mudanças bruscas de temperatura, com um tempo de resposta de cerca de 5 a 10 segundos para estabilizar. Se você precisa de medição instantânea, como em um forno ou sistema industrial, esse tipo de sensor não serve. Nesse caso, um termopar com amplificador MAX6675 é a alternativa, mas aí o projeto fica consideravelmente mais complexo e caro. Para quem quer baixar o código e testar, a estrutura básica pode ser montada com a biblioteca OneWire e DallasTemperature para o sensor DS18B20, a biblioteca RTClib para o DS3231, e a biblioteca Adafruit_SSD1306 para o display. Todas estão disponíveis no gerenciador de bibliotecas do Arduino IDE e funcionam sem configuração adicional além de incluir os cabeçalhos corretos no início do sketch.
Se o objetivo é apenas ter um relógio com termômetro funcional sem solderar componentes manualmente, módulos pré-montados como o ESP32 DEVKIT V1 com display OLED integrado resolvem o projeto inteiro em uma única placa, mas aí você perde flexibilidade para trocar sensores ou ajustar o layout. Vale a pena isso antes de decidir o caminho.