Como fazer um relógio digital com display e Arduino passo a passo para iniciantes
Fazer um relógio digital é um daqueles projetos que todo mundo que mexe com Arduino deveria montar pelo menos uma vez. Ele junta várias coisas úteis em um só lugar: ler um sensor de tempo, mostrar informação em um display e organizar o código de um jeito limpo. E o melhor: o resultado funciona de verdade, marcando as horas no seu quarto, na bancada ou na cozinha. Se você já fez o seu primeiro LED piscar com Arduino, está mais do que pronto para encarar este passo a passo.
Neste guia a gente vai montar um relógio que mostra horas, minutos e segundos (e, se você quiser, a data) usando um módulo de tempo real chamado RTC. A grande sacada é que esse módulo tem uma pilha própria e continua contando o tempo mesmo quando o Arduino é desligado. Ou seja, você acerta a hora uma vez e ela não se perde. Vamos explicar cada peça, cada ligação e cada linha importante do código, sempre pensando em quem nunca montou nada parecido.
O que você vai precisar
Os componentes são baratos e fáceis de encontrar em lojas de eletrônica brasileiras ou pela internet. A peça central é o módulo RTC, que pode ser o DS3231 (mais preciso e recomendado) ou o DS1307. Para mostrar a hora, você pode usar um display LCD 16x2 com módulo I2C, que simplifica muito as ligações. Reúna tudo antes de começar para não precisar parar no meio.
- Uma placa Arduino Uno (ou Nano)
- Um módulo RTC DS3231 com a pilha CR2032 incluída
- Um display LCD 16x2 com adaptador I2C soldado
- Uma protoboard (breadboard) para montar sem solda
- Jumpers macho-macho e macho-fêmea
- Cabo USB para programar o Arduino
- Um computador com a IDE do Arduino instalada
Entendendo o módulo RTC e o display I2C
O RTC, ou Real Time Clock, é um pequeno relógio dedicado. Ele conta segundos, minutos, horas, dia, mês e ano com muita precisão e mantém esse registro graças à pilha de botão. O DS3231 é o preferido porque compensa variações de temperatura e quase não atrasa. Sem um RTC, o Arduino perderia a hora toda vez que fosse desligado, pois ele não tem noção real da passagem do tempo.
Tanto o RTC quanto o display com adaptador I2C usam o mesmo tipo de comunicação, chamada I2C. A grande vantagem disso é que você precisa de apenas dois fios de dados para cada um: um chamado SDA e outro chamado SCL. No Arduino Uno, esses pinos ficam em A4 (SDA) e A5 (SCL). Como os dois dispositivos compartilham essas mesmas linhas, a fiação fica bem enxuta, o que é ótimo para iniciantes.
Montando o circuito na protoboard
Com o Arduino desligado e desconectado do USB, vamos fazer as ligações. Lembre que SDA e SCL são compartilhados: tanto o RTC quanto o display vão para os mesmos pinos A4 e A5. A alimentação também é simples, pois os dois módulos trabalham com 5 volts, que o Arduino fornece direto. Faça as conexões com calma e confira cada fio antes de ligar.
- Ligue o pino VCC do RTC ao 5V do Arduino e o GND do RTC ao GND do Arduino
- Ligue o SDA do RTC ao pino A4 e o SCL do RTC ao pino A5
- Ligue o VCC do display ao 5V e o GND do display ao GND
- Ligue o SDA do display também ao A4 e o SCL do display também ao A5
- Use a protoboard para distribuir o 5V e o GND entre os dois módulos
Repare que as linhas de 5V e GND podem ser puxadas para as laterais da protoboard, as chamadas trilhas de alimentação, e de lá distribuídas para os dois módulos. Isso evita amontoar fios no mesmo pino do Arduino. Confira se nenhum jumper está frouxo e se você não trocou VCC com GND por engano, pois essa é a causa mais comum de módulos que não acendem.
Preparando a IDE e as bibliotecas
Antes de escrever o programa, instale as bibliotecas que fazem o trabalho pesado por você. Abra a IDE do Arduino, vá no Gerenciador de Bibliotecas e procure por RTClib, da Adafruit, para o módulo de tempo. Em seguida, instale a biblioteca LiquidCrystal I2C, que controla o display. Essas duas poupam dezenas de linhas de código e deixam o projeto acessível para quem está começando.
Um detalhe importante do display I2C é o endereço dele, geralmente 0x27 ou 0x3F. Se o display não mostrar nada, provavelmente o endereço está diferente. Existe um pequeno programa chamado I2C Scanner, fácil de achar, que varre o barramento e mostra o endereço de cada dispositivo conectado. Rode ele uma vez, anote o número que aparecer e use esse valor no seu código.
Acertando a hora e enviando o código
O coração do código tem duas partes. No bloco setup, você inicializa o RTC e o display e, na primeira vez, acerta a hora. A biblioteca RTClib permite ajustar o relógio com a própria data e hora de compilação do computador, usando um comando que pega o momento em que o código foi enviado. Depois que a pilha estiver funcionando, você comenta essa linha e reenvia o código, para que o relógio não seja reajustado toda vez que o Arduino ligar.
No bloco loop, o programa pede a hora atual ao RTC a cada volta, monta o texto com horas, minutos e segundos e manda imprimir no display. Você pode posicionar a hora na primeira linha e a data na segunda, por exemplo. Como o loop roda muito rápido, o display atualiza suavemente e os segundos avançam de forma natural. Vale soltar a criatividade e adicionar os dias da semana ou um saudação diferente conforme o horário.
Resolvendo problemas comuns
Se nada aparecer no display, comece pelo potenciômetro ou trimpot azul atrás do módulo I2C: ele controla o contraste e, se estiver no extremo, a tela fica apagada ou totalmente preta. Gire devagar com uma chave de fenda pequena até enxergar os caracteres. Se mesmo assim nada mudar, confira o endereço I2C e as ligações de SDA e SCL, que são as falhas mais frequentes nesse tipo de projeto.
Quando a hora aparece errada toda vez que você liga o Arduino, quase sempre a culpa é da pilha do RTC. Verifique se ela está bem encaixada e com carga. Já se a hora atrasa ou adianta bastante com o tempo, troque o módulo DS1307 pelo DS3231, bem mais preciso. E lembre-se: depois de acertar a hora uma vez, comente a linha de ajuste no código, senão o relógio vai voltar ao horário de compilação a cada reinício.
Com o relógio funcionando, você pode dar o próximo passo e evoluir o projeto. Dá para colocar tudo dentro de uma caixinha impressa em 3D, trocar o LCD por um display OLED menor e mais bonito, ou até adicionar um sensor de temperatura e umidade para transformar o relógio em uma pequena estação do ambiente. O importante é que, ao montar este projeto, você aprendeu a ler um módulo por I2C, usar bibliotecas e exibir informação em tela, bases que vão abrir muitas portas nos seus próximos projetos maker.