Como fazer o Arduino Infinity Clock usando o módulo RTC

Como fazer o Arduino Infinity Clock usando o módulo RTC

No mundo moderno, os circuitos de tempo do mundo são muito importantes. O mesmo é o caso do Arduino, o Arduino tem um relógio de timer embutido que conta para aproximadamente 49 dias, mas depois disso redefine. Em segundo lugar, o relógio interno do Arduino não é 100% preciso; Sempre há uma certa porcentagem de tempo de tempo entre o relógio Arduino e um relógio externo. Portanto, se alguém quiser criar um relógio preciso usando Arduino, devemos confiar em um módulo externo conhecido como RTC (relógio em tempo real). Vamos ver como interface este módulo RTC com Arduino e criar um relógio digital preciso.

Módulo RTC com Arduino

Às vezes, trabalhar em projetos Arduino precisa de um relógio de tempo preciso para manter o Arduino trabalhando e executar instruções e comandos especiais em algum momento específico. O Arduino tem relógio embutido, mas não podemos confiar nele por causa dos dois motivos seguintes:

    • O relógio Arduino é impreciso com um erro percentual de 0.5-1%.
    • O relógio Arduino será redefinido automaticamente assim que a placa for redefinida.
    • Os relógios Arduino não têm backup de energia se o Arduino perder a energia, seu relógio será redefinido automaticamente.

Considerando os motivos acima mencionados, os usuários preferem usar um relógio de hardware externo ou um módulo RTC. Então, um módulo muito barato e super preciso amplamente utilizado é o ds1307. Vamos ver como conectar este RTC com Arduino.

Configurar o módulo RTC Biblioteca Arduino

Para interface o Arduino com o módulo RTC, precisamos instalar algumas bibliotecas necessárias que possam ler dados do módulo RTC. Siga as etapas para instalar as bibliotecas RTC:

    1. Abrir Ide
    2. Vá para Seção da biblioteca
    3. Procurar “RTCLIB”
    4. Instale o DS3231_RTC e Rtclib por Adafruit.

Módulo RTC DS1307

O módulo DS1307 RTC é baseado no pequeno clock chip ds1307, que também suporta o protocolo de comunicação I2C. Na parte traseira do módulo RTC, temos uma bateria de célula de lítio. Este módulo pode fornecer informações precisas de segundos, minutos, horas, dia, data, mês e ano. Ele também tem a capacidade de ajuste automático de tempo por 31 dias por mês, juntamente com o suporte de erro do ano bisseiro. O relógio pode operar em 12 horas ou 24 horas de relógio.


Alguns destaques principais deste módulo RTC:

    • Pode funcionar na fonte de 5V DC
    • Saída de onda quadrada que pode ser programada
    • Detecção de falha de energia
    • Consumir muito menos quantidade de corrente (500mA)
    • RAM não volátil de 56 bytes
    • Backup da bateria

Pinagem do módulo RTC

Nome do pino Descrição
SCL Pino de entrada do relógio para interface de comunicação I2C
SDA Saída de entrada de dados para comunicação serial i2C
VCC Varia de pinos de energia de 3.3V a 5V
Gnd GND PIN
Ds Use para entrada do sensor de temperatura
Sqw Este pino pode gerar quatro ondas quadradas com frequência 1Hz, 4kHz, 8kHz ou 32kHz
BASTÃO PIN para backup da bateria se o suprimento principal interrompido

Diagrama de circuito

Conecte a placa Arduino com o módulo RTC, como mostrado no diagrama abaixo. Aqui os pinos A4 e A5 do Arduino serão usados ​​para a comunicação I2C com os módulos RTC, enquanto os pinos de 5V e GND darão o poder necessário ao módulo RTC.

Pino RTC DS 1307 Pino Arduino
Vin 5V
Gnd Gnd
SDA A4
SCL A5

Código

#incluir
#incluir
Rtc_ds3231 real_time_clock;
tempo de char [32]; /*CHAR A matriz é definida*/
configuração void ()

Serial.começar (9600); /*A comunicação serial começa*/
Arame.começar(); /*Arquivo da biblioteca para iniciar a comunicação*/
relógio de tempo real.começar();
relógio de tempo real.Ajuste (DateTime (F (__ Data __), F (__ Time__)));
/*relógio de tempo real.Ajuste (DateTime (2022, 09, 26, 1, 58, 0))*/

Void Loop ()

DateTime agora = real_time_clock.agora();
sprintf (tempo, "%02d:%02d:%02d%02d/%02d/%02d", agora.hora (), agora.minuto (), agora.segundo (), agora.dia (), agora.mês (), agora.ano());
Serial.impressão (f ("data/hora:")); /*Isso vai imprimir a data e hora*/
Serial.println (tempo);
atraso (1000); /*Atraso de 1 seg*/


No início do código primeiro, incluímos arame.h & Rtclib para comunicação com dispositivos. Em seguida, criamos um objeto rtclib com o nome relógio de tempo real. Em seguida, definimos uma matriz de char tempo de comprimento 32, que armazenará informações de data e hora.

Na função de configuração e loop, usamos o seguinte comando para garantir que a comunicação I2C seja estabelecida entre os módulos Arduino e RTC.

Arame.começar e relógio de tempo real.começar garantirá e verificará a conexão RTC.

ajustar() é uma função sobrecarregada que define a data e a hora.

DateTime (f (__ date__), f (__ time__))


Esta função definirá a data e a hora em que o esboço foi compilado.

O agora() Funções Data e hora de retorno e seu valor armazenará em variável "tempo".

A próxima hora, minuto, segundo, dia, mês, ano calculará a data exata e a imprimirá no monitor serial com um atraso de 1 seg.

Hardware

Saída

O monitor serial começará a imprimir a hora e a data em que o código é enviado para a placa Arduino.

Conclusão

O próprio Arduino tem algumas funções relacionadas ao tempo como millis (), micros (). No entanto, essas funções não dão tempo exato; Sempre há uma chance de alguns milissegundos atrasarem. Para evitar isso enquanto o uso de módulos externos do Arduino RTC são usados. Esses módulos como o DS1307 nos dão tempo exato com um backup de bateria que pode durar muitos anos. Este guia abrange como interface esses módulos RTC com uma placa Arduino.