O relógio em tempo real RTC DS1307 é um chip que funciona via protocolo de comunicação i2c. Ele pode fornecer e manter a hora, minuto, segundo, dia, mês e ano atuais em um formato de 12 ou 24 horas. Ele tem (no caso do shield usado neste tutorial) uma bateria CR2032 para backup.
As conexões com o Arduino UNO são as seguintes, é necessário apenas fornecer 5V e GND junto com i2c (SCL A5 e SDA A4 do Arduino UNO).
Primeiro, peguei o código deste blog e a biblioteca deste Github. Aqui está o código e o resultado do monitor serial:
//Program : Clock with RTC DS1307
//Author : MakerHero
//Load RTC DS1307's library
#include <DS1307.h>
//i2c ports in Arduino UNO
DS1307 rtc(A4, A5);
void setup()
{
//Turn the clock on
rtc.halt(false);
//The lines below set the date and time
//uncomment them, use once and comment them again
/*rtc.setDOW(WEDNESDAY); //Define the day of week
rtc.setTime(19, 47, 00); //Define time
rtc.setDate(3, 7, 2024); //Define day, month, year*/
//SQW/Out pin definition
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
Serial.begin(9600);
}
void loop()
{
//Show info on Serial Monitor
Serial.print("Hour (24h) : ");
Serial.print(rtc.getTimeStr());
Serial.print(" ");
Serial.print("Date : ");
Serial.print(rtc.getDateStr(FORMAT_SHORT));
Serial.print(" ");
Serial.println(rtc.getDOWStr(FORMAT_SHORT));
//Wait 1s and do it all over
delay (1000);
}
Observe que a hora está no formato 24h (está mostrando 7:57 PM) e a data não está no formato americano (portanto, 3 de julho de 2024). Para testar, removi a energia do Arduino completamente por alguns minutos. Após restabelecê-lo, a hora e a data permaneceram atuais, então a bateria CR2032 realmente cumpre seu propósito.
Lembre-se de que você precisa alterar as linhas abaixo com sua data e hora atuais. Faça isso apenas uma vez e depois você precisa comentar ou remover as linhas.
rtc.setDOW(WEDNESDAY); //Define the day of week
rtc.setTime(19, 47, 00); //Define time
rtc.setDate(3, 7, 2024); //Define day, month, year
Em relação ao pedaço de código abaixo, parece ser uma onda quadrada gerada a cada segundo (SQW_RATE_1). Desabilitei as duas linhas inteiras porque não tinha utilidade visível para elas.
//SQW/Out pin definition
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
Aparentemente, ele é usado para informar ao seu microcontrolador que o tempo está passando. Para que ele possa ter seu próprio controle de tempo sem ler o DS1307. Não vamos usá-lo, apesar do módulo DS1307 que estamos usando ter o pino SQ disponível.
Uso de bateria (duração)
De acordo com a folha de dados do DS1307, uma bateria de 48mAh manterá a hora e a data no chip por 10 anos. Então, provavelmente levará muito tempo até que você tenha que substituir a bateria do módulo.
Há 56 bytes de informações que a bateria fará backup, incluindo hora, minuto, segundo, dia, mês e ano. Isso inclui cálculos automáticos de número de dias no mês e também anos bissextos. A lógica do módulo tem garantia de funcionar até 2100.
Pra finalizar
O chip DS1307 já é um pouco antigo, há opções melhores disponíveis. Especialmente na limitação de tempo de 2100. Ele continua sendo um módulo de relógio de tempo real fácil de usar e barato para projetos de hobby e estudantes.
Se você quiser acompanhar e replicar o experimento, compre um DS1307 através do meu link de afiliado Aliexpress, aqui. Um pouco sem relação (mas ainda falando sobre consumo de energia) confira meu artigo sobre redução do consumo de energia do relé.
Deixe um comentário