Construir um relógio com um Arduino, uma tela OLED e o módulo DS1307 Relógio em tempo real (RTC) é um projeto divertido e prático. O módulo RTC DS1307 mantém o tempo preciso, mesmo quando o Arduino é desligado, enquanto o OLED fornece uma interface elegante para exibir o horário atual. Este tutorial o guiará através do processo passo a passo.
O que você precisará
- Conselho de Arduino (por exemplo, Uno, Mega, Nano)
- Tela OLED de 0,91 " (Interface i2c)
- Módulo RTC DS1307
- Fios de pão e jumper
- Um computador com o Arduino IDE instalado
- Bibliotecas: Adafruit SSD1306, Adafruit GFX e RTCLIB
Etapa 1: Fiação dos componentes
Fiação de tela OLED (i2C)
Pino OLED | Pino Arduino |
---|---|
VCC | 5V |
Gnd | Gnd |
SDA | A4 |
SCL | A5 |
Fiação do módulo RTC DS1307 (I2C)
Pino rtc | Pino Arduino |
---|---|
VCC | 5V |
Gnd | Gnd |
SDA | A4 |
SCL | A5 |
Observação: Se estiver usando uma placa Arduino com pinos SDA e SCL dedicados (por exemplo, Mega), conecte os pinos OLED e RTC SDA/SCL a esses.
Etapa 2: Instalando as bibliotecas necessárias
Para trabalhar com a tela OLED e o DS1307 RTC, você precisa das seguintes bibliotecas:
- Adafruit SSD1306 (para OLED)
- Adafruit GFX (Biblioteca gráfica para OLED)
- Rtclib (para funcionalidade RTC)
Instalando bibliotecas
- Abra o Arduino IDE.
- Vá para Sketch> Incluir biblioteca> Gerenciar bibliotecas.
- Procure e instale:
- "Adafruit SSD1306"
- "Biblioteca Adafruit GFX"
- "Rtclib"
Etapa 3: Enviando o código
Aqui está o código para exibir a hora atual no OLED usando o módulo RTC DS1307:
Código de exemplo
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
// OLED display width and height
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
// Create an instance of the display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Create an instance of the RTC
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
// Initialize the OLED display
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
// Initialize the RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if the RTC is running
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running! Setting the time...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now(); // Get the current time
// Clear the display
display.clearDisplay();
// Display the time
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(now.hour(), DEC);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute(), DEC);
// Display the date
display.setTextSize(1);
display.setCursor(0, 20);
display.print(now.day(), DEC);
display.print("/");
display.print(now.month(), DEC);
display.print("/");
display.print(now.year(), DEC);
// Show the display buffer
display.display();
delay(1000); // Update every second
}
Etapa 4: Ajustando o tempo
Se o RTC não estiver em execução ou o tempo precisar ser atualizado, a seguinte linha no setup()
A função define o RTC para o horário atual:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)
eF(__TIME__)
são macros que definem automaticamente a data e a hora do seu computador ao fazer o upload do código.
Para definir um tempo específico manualmente, use:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
Etapa 5: Personalizando a tela
Você pode personalizar a tela do relógio:
-
Alterando o tamanho do texto: Usar
display.setTextSize()
Para ajustar o tamanho da fonte. - Adicionando gráficos: Use a biblioteca Adafruit GFX para desenhar formas como linhas ou retângulos.
- Tempo de formatação: Adicione o formato AM/PM ou 24 horas, conforme necessário.
Exemplo: Adicionando AM/PM
int hour = now.hour();
String period = "AM";
if (hour >= 12) {
period = "PM";
if (hour > 12) hour -= 12;
}
if (hour == 0) hour = 12;
display.print(hour);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute());
display.print(" ");
display.print(period);
Solução de problemas
-
OLED não exibindo:
- Verifique se o endereço I2C corresponde (geralmente
0x3C
ou0x3D
). - Verifique as conexões de fiação.
- Verifique se o endereço I2C corresponde (geralmente
-
RTC não encontrado:
- Verifique as conexões SDA e SCL.
- Verifique se a bateria RTC está inserida corretamente.
-
Tempo incorreto:
- Usar
rtc.adjust()
Para definir o tempo correto.
- Usar
Aplicações
- Relógio da mesa DIY
- Timers e alarmes
- Relógio habilitado para IoT com sensores adicionais
- Projetos educacionais
Conclusão
Ao combinar o Arduino, um OLED de 0,91 "e o DS1307 RTC, você pode criar um relógio preciso e visualmente atraente. Com alguns ajustes, você pode personalizar o relógio para atender às suas necessidades ou integrá -lo a projetos maiores. Experimente recursos adicionais Como alarmes ou sincronização da Internet para levar seu projeto ao próximo nível!