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
- Arduino tablero (por ejemplo, Uno, Mega, Nano)
- Pantalla OLED de 0.91 " (Interfaz I2C)
- Módulo RTC DS1307
- Cables de placa y jersey
- Una computadora con el Arduino IDE instalado
- 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:
- Adafruit SSD1306 (para OLED)
- Adafruit GFX (Biblioteca gráfica para OLED)
- Rtclib (para la funcionalidad RTC)
Instalación de bibliotecas
- Abra el IDE Arduino.
- Ir a Sketch> incluir biblioteca> Administrar bibliotecas.
- 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__)
yF(__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:
-
Cambiar el tamaño del texto: Usar
display.setTextSize()
Para ajustar el tamaño de la fuente. - Agregar gráficos: Use la biblioteca Adafruit GFX para dibujar formas como líneas o rectángulos.
- 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
-
OLED no se muestra:
- Asegúrese de que las coincidencias de la dirección I2C (comúnmente
0x3C
o0x3D
). - Verifique las conexiones de cableado.
- Asegúrese de que las coincidencias de la dirección I2C (comúnmente
-
RTC no encontrado:
- Verifique las conexiones SDA y SCL.
- Asegúrese de insertar la batería RTC correctamente.
-
Tiempo incorrecto:
- Usar
rtc.adjust()
Para establecer el tiempo correcto.
- Usar
Aplicaciones
- Reloj de escritorio de bricolaje
- Temporizadores y alarmas
- Reloj habilitado para IoT con sensores adicionales
- 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!