Creación de un reloj con el Arduino, un OLED de 0.91 "y el DS1307 RTC

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

Construir un reloj con un Arduino, una pantalla OLED y el módulo DS1307 en tiempo real (RTC) es un proyecto divertido y práctico. El módulo RTC DS1307 mantiene el tiempo preciso incluso cuando el Arduino está apagado, mientras que el OLED proporciona una interfaz elegante para mostrar la hora actual. Este tutorial lo guiará a través del proceso paso a paso.


Lo que necesitarás

  1. Arduino tablero (por ejemplo, Uno, Mega, Nano)
  2. Pantalla OLED de 0.91 " (Interfaz I2C)
  3. Módulo RTC DS1307
  4. Cables de placa y jersey
  5. Una computadora con el Arduino IDE instalado
  6. Bibliotecas: Adafruit SSD1306, Adafruit GFX y RTCLIB

Paso 1: Cableado los componentes

Cableado de pantalla OLED (I2C)

Alfiler Alfiler de arduino
VCC 5V
Gnd Gnd
SDA A4
SCL A5

Cableado del módulo RTC DS1307 (I2C)

Pasador RTC Alfiler de arduino
VCC 5V
Gnd Gnd
SDA A4
SCL A5

Nota: Si usa un tablero Arduino con pines SDA y SCL dedicados (por ejemplo, Mega), conecte los pines OLED y RTC SDA/SCL en su lugar.


Paso 2: Instalación de las bibliotecas requeridas

Para trabajar con la pantalla OLED y DS1307 RTC, necesita las siguientes bibliotecas:

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

Instalación de bibliotecas

  1. Abra el IDE Arduino.
  2. Ir a Sketch> incluir biblioteca> Administrar bibliotecas.
  3. Buscar e instalar:
    • "Adafruit SSD1306"
    • "Biblioteca Adafruit GFX"
    • "Rtclib"

Paso 3: cargar el código

Aquí está el código para mostrar la hora actual en el OLED usando el módulo RTC DS1307:

Código de ejemplo

#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
}

Paso 4: Ajustar el tiempo

Si el RTC no se está ejecutando o se debe actualizar el tiempo, la siguiente línea en el setup() La función establece el RTC en la hora actual:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) y F(__TIME__) son macros que establecen automáticamente la fecha y la hora de su computadora al cargar el código.

Para establecer un tiempo específico manualmente, use:

rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS

Paso 5: Personalización de la pantalla

Puede personalizar la pantalla del reloj por:

  1. Cambiar el tamaño del texto: Usar display.setTextSize() Para ajustar el tamaño de la fuente.
  2. Agregar gráficos: Use la biblioteca Adafruit GFX para dibujar formas como líneas o rectángulos.
  3. Tiempo de formato: Agregue el formato AM/PM o las 24 horas según sea necesario.

Ejemplo: Agregar 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);

Solución de problemas

  1. OLED no se muestra:

    • Asegúrese de que las coincidencias de la dirección I2C (comúnmente 0x3C o 0x3D).
    • Verifique las conexiones de cableado.
  2. RTC no encontrado:

    • Verifique las conexiones SDA y SCL.
    • Asegúrese de insertar la batería RTC correctamente.
  3. Tiempo incorrecto:

    • Usar rtc.adjust() Para establecer el tiempo correcto.

Aplicaciones

  1. Reloj de escritorio de bricolaje
  2. Temporizadores y alarmas
  3. Reloj habilitado para IoT con sensores adicionales
  4. Proyectos educativos

Conclusión

Al combinar el Arduino, un OLED de 0.91 "y el DS1307 RTC, puede crear un reloj preciso y visualmente atractivo. Con algunos ajustes, puede personalizar el reloj para satisfacer sus necesidades o integrarlo en proyectos más grandes. Experimente con características adicionales. ¡Como alarmas o sincronización de Internet para llevar su proyecto al siguiente nivel!

Escribir un comentario

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.