Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Reloj RTC con Arduino Nano y DS1307: Cronometraje Preciso

Componentes y materiales

Componente Cantidad Notas
Arduino Nano R3 1
Módulo Reloj Tiempo Real (RTC) DS1307 1 Mantiene la hora sin alimentación. Fácil interfaz I2C. Librerías disponibles.
Display LED 7 segmentos 4 dígitos (Ánodo Común) 1
Header hembra fila simple 3
Placa perforada (perfboard) 1 Para soldar y dejar presentable. Mejor con pistas tipo protoboard.
Cables jumpers (genéricos) 25
Header macho 40 posiciones 1 fila (0.1") 1

Herramientas necesarias

Aplicaciones y servicios en línea

Sobre el proyecto

Este es un reloj digital realmente simple y fácil de montar creado con el IC RTC DS1307. Muestra la hora en un display de 7 segmentos de 4 dígitos. El código puede modificarse fácilmente para añadir funcionalidades como alarma; solo hace falta imaginación. Fue un peldaño para proyectos más complejos y quería algo vistoso para mi habitación.

Incluyo todos los detalles, incluyendo problemas al soldar en PCB y cómo los resolví.

PASO 1: Componentes

Módulo RTC DS1307

Reloj RTC con Arduino Nano y DS1307: Cronometraje Preciso

El chip DS1307 mantiene la hora incluso sin alimentación. Interfaz I2C con Arduino (pines A4=SDA, A5=SCL). No usamos el pin DS.

Inconveniente: No es tan preciso como quisiéramos; sufre deriva temporal (time drift) sensible a temperatura.

¡OJO! Conecta bien GND y VCC. En el módulo, VCC está antes que GND. Conectar al revés calienta mucho el chip. Toca la pila de botón al encender y apaga rápido si notas calor.

Registro de Desplazamiento 74HC595

Reloj RTC con Arduino Nano y DS1307: Cronometraje Preciso

Nota: Me llegaron varios chips defectuosos (pines Q0, Q1, Q3, Q7 fallando). Verificad con multímetro en modo continuidad. Todo es aprendizaje.

Display 7 segmentos 4 dígitos (Ánodo Común)

Reloj RTC con Arduino Nano y DS1307: Cronometraje Preciso Reloj RTC con Arduino Nano y DS1307: Cronometraje Preciso

Display genérico de 12 pines (numeración desde inferior izquierda). Cada dígito muestra 0-9 y punto decimal. Usé el punto decimal del 2º dígito como separador ":" (parpadeante).

Cuidado: Los segmentos a-g no están en orden lineal. Nunca conectar directo a 5V sin resistencias limitadoras.

Conexiones Shift Register → Display:

Segmento Pin Display Pin 74HC595
A1115 (1er 595)
B71 (1er 595)
C42 (1er 595)
D23 (1er 595)
E14 (1er 595)
F105 (1er 595)
G56 (1er 595)
Decimal37 (1er 595)
D1 (dígito 1)1215 (2do 595)
D291 (2do 595)
D382 (2do 595)
D463 (2do 595)

Proyecto barato y fácil, requiere paciencia si soldas en PCB (unas 2 horas en protoboard).

Código

Código Principal del Reloj (Arduino)

Usa librería RTC e I2C (Wire). Para display Ánodo Común.

#include <Wire.h>
#include <EEPROM.h>
#include <RTClib.h>

RTC_DS1307 RTC;

int latchPin = 3;  // Pin 12 del 595
int dataPin  = 4;  // Pin 14 del 595
int clockPin = 2;  // Pin 11 del 595
int shift = 256;

int units, tens, hundreds, thousands;
const int alarmHour = 17;
const int alarmMinute = 26;

void setup() {
  Serial.begin(9600);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(13, OUTPUT); // LED alarma
  Wire.begin();
  RTC.begin();
  if (!RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  DateTime now = RTC.now();
  int HOUR = now.hour();
  int MINUT = now.minute();

  // Descomposición dígitos hora
  if (HOUR < 10) { hundreds = HOUR; thousands = 0; }
  else { hundreds = HOUR % 10; thousands = HOUR / 10; }

  // Descomposición dígitos minutos
  if (MINUT <= 9) { units = MINUT; tens = 0; }
  else { units = MINUT % 10; tens = MINUT / 10; }

  // Multiplexado: envía cada dígito al 74HC595 correspondiente
  // (Código repetido para units, tens, hundreds, thousands con shiftOut)
  // ... (ver código completo en repositorio)

  delay(1); // Persistencia de visión

  // Alarma simple en pin 13
  if (HOUR == alarmHour && MINUT == alarmMinute) digitalWrite(13, HIGH);
  else digitalWrite(13, LOW);
}

Nota: El código completo con todos los switch-case para cada dígito está en el archivo original. Aquí se muestra la estructura principal.

Programa para Poner en Hora (Arduino)

Como el DS1307 deriva, este programa permite ajustar la hora vía Monitor Serie. Conecta el RTC, sube este sketch, abre Monitor Serie y envía comandos (h##, i##, s##, d##, m##, y##, w##, t, a, p, etc.). Luego sube el código principal.

// Incluye librería RealTimeClockDS1307.h (ver abajo)
// Comandos: h=hora, i=minutos, s=segundos, d=día, m=mes, y=año, w=día semana,
// t=toggle 12/24h, a=AM, p=PM, z=start, Z=stop, q=SQW 1Hz, Q=SQW off,
// >reg,val = escribir registro, 

Librerías necesarias

Se requieren dos librerías personalizadas que debes instalar en Arduino IDE (Sketch → Incluir librería → Añadir librería .ZIP):

  1. RealTimeClockDS1307 (carpeta con: RealTimeClockDS1307.h, RealTimeClockDS1307.cpp, keywords.txt, Readme)
  2. RTClib (fork de JeeLab, compatible con DS1307, DS3231, PCF8523, etc. Carpeta con RTClib.h, RTClib.cpp, README.md, library.properties)

Ambas librerías permiten control total del DS1307: lectura/escritura de registros, onda cuadrada (SQW), RAM con batería, formato 12/24h, AM/PM, etc.

Esquemático

Esquema del proyecto en Fritzing: 7segmentClock.fzz

Proceso de manufactura

  1. Fabricación de Tablas de Planchar: Diseño, Materiales y Proceso Productivo
  2. Reloj de cuco: historia, artesanía y evolución moderna
  3. Placas de Circuito Impreso: Diseño, Fabricación y Tendencias Futuras
  4. Construcción y Diseño de Tablas de Surf: De Raíces Polinesias a la Innovación Moderna
  5. Construcción de un robot con Arduino y Raspberry Pi: Guía paso a paso
  6. Placa RasPiRobot Board V2: Convierte tu Raspberry Pi en un Controlador de Robot Potente
  7. Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
  8. Reloj de Palabras DIY con Arduino: Construye una Pantalla Elegante en Tiempo Real
  9. Reloj Espejo Infinito: Elegancia infinita y hora precisa
  10. Configuración de Motores: Guía Completa de Tipos y Características
  11. La Importancia de un PCB Impecable