Criando um relógio com o Arduino, um OLED de 0,91 "e o DS1307 RTC

Creating a Clock with the Arduino, a 0.91" OLED, and the DS1307 RTC

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á

  1. Conselho de Arduino (por exemplo, Uno, Mega, Nano)
  2. Tela OLED de 0,91 " (Interface i2c)
  3. Módulo RTC DS1307
  4. Fios de pão e jumper
  5. Um computador com o Arduino IDE instalado
  6. 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:

  1. Adafruit SSD1306 (para OLED)
  2. Adafruit GFX (Biblioteca gráfica para OLED)
  3. Rtclib (para funcionalidade RTC)

Instalando bibliotecas

  1. Abra o Arduino IDE.
  2. Vá para Sketch> Incluir biblioteca> Gerenciar bibliotecas.
  3. 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__) e F(__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:

  1. Alterando o tamanho do texto: Usar display.setTextSize() Para ajustar o tamanho da fonte.
  2. Adicionando gráficos: Use a biblioteca Adafruit GFX para desenhar formas como linhas ou retângulos.
  3. 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

  1. OLED não exibindo:

    • Verifique se o endereço I2C corresponde (geralmente 0x3C ou 0x3D).
    • Verifique as conexões de fiação.
  2. RTC não encontrado:

    • Verifique as conexões SDA e SCL.
    • Verifique se a bateria RTC está inserida corretamente.
  3. Tempo incorreto:

    • Usar rtc.adjust() Para definir o tempo correto.

Aplicações

  1. Relógio da mesa DIY
  2. Timers e alarmes
  3. Relógio habilitado para IoT com sensores adicionais
  4. 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!

Deixe um comentário

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.