Domine o Arduino com DS3231 RTC: Tutorial Passo a Passo do Relógio de Tempo Real
Neste tutorial Arduino, aprenderemos a usar o módulo Real Time Clock DS3231. Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.
Visão Geral
A primeira pergunta que surge é: por que realmente precisamos de um RTC separado para nosso projeto Arduino quando o próprio Arduino tem um cronômetro embutido? O ponto é que o módulo RTC funciona com bateria e pode manter o controle do tempo mesmo se reprogramarmos o microcontrolador ou desconectarmos a alimentação principal.

DS3231 Real Time Clock
O DS3231 é um Real Time Clock de baixo custo e alta precisão, que pode manter horas, minutos e segundos, bem como informações de dia, mês e ano. Também possui compensação automática para anos bissextos e para meses com menos de 31 dias.

O módulo pode funcionar tanto em 3,3V quanto em 5V, o que o torna adequado para muitas plataformas de desenvolvimento ou microcontroladores. A entrada da bateria é 3V e uma bateria CR2032 3V típica pode alimentar o módulo e manter as informações por mais de um ano.
O módulo usa o Protocolo de Comunicação I2C, o que torna a conexão com a placa Arduino muito fácil.
Aqui está o esquema do circuito:

Tudo o que precisamos são 4 fios: os pinos VCC e GND para alimentar o módulo, e os dois pinos de comunicação I2C, SDA e SCL.
Você pode obter os componentes necessários para este tutorial Arduino nos links abaixo:
- DS3231 Real Time Clock
- Placa Arduino
- Protoboard e Jumpers
Programação
Uma vez conectado o módulo, precisamos programar a placa Arduino para trabalhar com o Real Time Clock. No entanto, quando se trata de programar uma comunicação entre Arduino e um módulo I2C, o código não é tão pequeno e fácil. Felizmente, já existem várias bibliotecas para o RTC DS3231 que podem ser encontradas na internet.
Para este tutorial, escolhi usar a biblioteca feita por Henning Karlsen, que pode ser encontrada e baixada do site dele, www.rinkydinkelectronics.com.
Uma vez que baixamos e instalamos a biblioteca, podemos usar seu primeiro exemplo de demonstração para ativar inicialmente o relógio do módulo RTC. Na seção setup do código do exemplo de demonstração, podemos notar que há três linhas que precisamos descomentar para definir inicialmente o dia da semana, a hora e a data.
// Código do Exemplo Demo da Biblioteca DS3231
void setup() {
Serial.begin(115200);
// Descomente a próxima linha se estiver usando Arduino Leonardo
//while (!Serial) {}
rtc.begin();
// As linhas a seguir podem ser descomentadas para definir data e hora
//rtc.setDOW(WEDNESDAY); // Define Dia da Semana para QUARTA-FEIRA
//rtc.setTime(12, 0, 0); // Define a hora para 12:00:00 (formato 24h)
//rtc.setDate(1, 1, 2014); // Define a data para 1 de Janeiro de 2014
}
A primeira linha é para definir o dia da semana, a segunda linha para definir a hora em horas, minutos e segundos, e a terceira linha para definir a data em dias, meses e anos.
Uma vez que fazemos upload deste código, precisamos comentar novamente as três linhas e fazer upload do código novamente.
// Código do Exemplo Demo da Biblioteca DS3231
void loop() {
// Envia Dia da Semana
Serial.print(rtc.getDOWStr());
Serial.print(" ");
// Envia data
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Envia hora
Serial.println(rtc.getTimeStr());
// Aguarda um segundo antes de repetir
delay(1000);
}
Se olharmos a seção loop do código, podemos ver que agora, usando as três funções personalizadas, obtemos as informações do RTC e as imprimimos no Monitor Serial. Aqui está como elas aparecem no Monitor Serial.

Agora, mesmo se desconectarmos a alimentação do Arduino e a reconectarmos e executarmos o Monitor Serial novamente, notaremos que o tempo continua sem ser reiniciado.
Então, agora temos nosso Real Time Clock funcionando e podemos usá-lo em qualquer projeto Arduino. Como segundo exemplo, conectei um LCD ao Arduino e imprimi a hora e a data nele.

Aqui está o código fonte deste exemplo:
/*
* Tutorial Arduino Módulo Real Time Clock DS3231
* Criado por Dejan Nedelkovski,
* www.HowToMechatronics.com
* Biblioteca DS3231 feita por Henning Karlsen, disponível em www.rinkydinkelectronics.com.
*/
#include <DS3231.h>
#include <LiquidCrystal.h> // inclui a biblioteca LiquidCrystal
DS3231 rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Cria objeto LC. Parâmetros: (rs, enable, d4, d5, d6, d7)
void setup() {
rtc.begin(); // Inicializa o objeto rtc
lcd.begin(16,2); // Inicializa a interface para a tela LCD, e especifica as dimensões (largura e altura) do display
}
void loop() {
lcd.setCursor(0,0);
lcd.print("Time: ");
lcd.print(rtc.getTimeStr());
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(rtc.getDateStr());
delay(1000);
}
Isso é tudo para este tutorial Arduino. Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo.
Processo de manufatura
- Relógio POV com Arduino: Construa um Display LED de Persistência de Visão
- Crie uma Fechadura RFID Segura com Arduino – Guia Passo a Passo
- Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
- Monitor de Temperatura e Relógio Tempo Real com Arduino Due e Display TFT 3.2"
- Construa um Relógio de Berlim com Arduino UNO – Relógio DIY de Matriz LED
- Relógio Digital TM1637 com Configuração de Hora e Alarme – Prototipo Arduino Nano
- eDOT: Relógio de Precisão e Estação Meteorológica Arduino com Controle IR Embutido
- Relógio Meteorológico Arduino em Tempo Real: Display OLED para Hora, Data e Temperatura
- Projeto Sensor de Impressão Digital com Arduino Nano – Tutorial Completo
- Detecção de Mudanças 3D em Tempo Real por Robô Aumenta Segurança de Soldados via RA