Reloj de Matriz LED 4x64 con Arduino Nano – Nueva Versión
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Arduino Nano R3 | 1 |
| Matriz LED 4 en 1 (8x8 cada una, total 32x8) | 1 |
| Fotorresistencia (LDR) | 1 |
| Protoboard (genérica) | 1 |
| RTC DS3231 | 1 |
Aplicaciones y Servicios en Línea
- Arduino IDE
Sobre el Proyecto



Leer la hora a varios metros en una habitación requiere una pantalla de matriz LED como esta.
Compré a buen precio un display de 4 celdas y busqué proyectos en Hackster para Arduino Nano. Hay varios, pero para ver hora, minutos y segundos simultáneamente, pocos funcionan porque se necesitan dígitos más pequeños que los típicos de 5x7 píxeles. Una opción es la librería MD_Parola, pero su código es demasiado grande para un reloj simple. La librería Max72xxPanel está anticuada y llama a otras librerías. Finalmente, el proyecto se basa en la librería base MD_MAX72XX, incluida en las demás.
Los comentarios en este sitio me hicieron revisar hardware y código.
- Librería DS3231: Uso esta: Rinky-Dink Electronics
- Matriz LED: Hay varios modelos en el mercado; es probable que el display muestre cosas raras al subir el código. Solución: sube el ejemplo
MD_MAX72xx_HW_Mapper.inode la libreríaMD_MAX72xx_lib.hy encuentra tu modelo de hardware. En mi código el modelo era#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW, pero puede no funcionar hasta que configures el correcto. - Segundos pequeños: Ahora (v2), las fuentes para estos segundos están incluidas en el código, sin necesidad de modificar otras librerías.
- Advertencias de compilación: Debido a actualizaciones de Arduino. Ahora los meses están en array bidimensional
chary ya no usan punteros. Otras advertencias vienen deDS3231.hpero pueden ignorarse. - Puntos parpadeantes: Ahora son solo 2 puntos. Los segundos precisos se muestran con mis fuentes 3x5 después de "hh:mm". Los dos puntos ":" parpadean casi dos veces por segundo para mostrar que está vivo.
- Formato de visualización: La hora se muestra 53 segundos cada minuto; en los últimos 7 segundos se muestra fecha y temperatura.
- Día de la semana: También puede mostrarse descomentando dos líneas en
loop(). En ese caso, reduce el intervalo de 53 a 51 segundos. - Formato 12h: Ver respuestas antiguas mías.
- Ajuste RTC: Desde el Monitor Serie de Arduino escribiendo
DD/MM/YYYY hh:mm:ss(con espacio) y pulsando Enter. Funciona cuando hay cable USB y Monitor Serie activo (COM y baud rate correctos).
El nuevo código usa 13558 bytes (44%) y 372 bytes (18%) para variables, un poco más corto.
La fecha se muestra como "dd Mmm" y temperatura ambiente en °C (estimada con sensor interno del RTC) en página separada. El brillo se controla con la fotorresistencia. El código funciona incluso sin sensor de luz.
¡Gracias por vuestro interés, mostrado con el botón "respect"!
Código
- Versión antigua – Reloj matriz Arduino Nano
- Nueva versión (v2) – Reloj matriz Arduino Nano
Versión Antigua – Reloj Matriz Arduino Nano Arduino
Como muchas librerías cambiaron desde la versión inicial, este código es obsoleto. Usa la nueva versión. Todas las conexiones descritas en el código. Para fuentes pequeñas, modificar unas líneas en MD_MAX72xx_font.cpp como se explica en el código.
/* ADVERTENCIA: Código inicial ahora obsoleto. Usa el nuevo (versión 2)
* Arduino Nano DS3231 clock con LED Matrix 4x(8x8) SPI
* Arduino Nano 5V logic - 32kB prog. space
* Tools:Board: Arduino Nano; Processor: ATmega328P (Old Bootloader)!!
* LED Matrix 4x(8x8) SPI con conector a la derecha (último módulo)
* CONEXIONES:
* LCD 4x64 -> Arduino Nano: (usando Hardware SPI):
* 5V -> 5V pin, GND -> GND pin
* CLK_PIN -> 13 (o SCK), DATA_PIN -> 11 (o MOSI), CS_PIN -> 10 (o SS)
* DS3231 RTC -> Arduino Nano: SDA (DAT) -> A4, SCL (CLK) -> A5
* Autor: MVP https://www.hackster.io/M-V-P
*/
#include <SPI.h>
#include "DS3231.h"
#include "MD_MAX72xx_lib.h"
DS3231 rtc(SDA, SCL);
const byte LDR_PIN = A2;
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW
#define USE_NEW_FONT 1
#define BUF_SIZE 20
#define CHAR_SPACING 1
char buf[BUF_SIZE], secs[4];
uint8_t dots;
MD_MAX72XX matrix = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
const byte WAIT = 100;
const byte SPACER = 1;
byte FONT_WIDTH;
bool timeset=false;
// ... (funciones: adjustClock, ledintensitySelect, printText, setup, getDate, getHour, showsec, loop)
// Código completo en el adjunto del proyecto.
Nueva Versión (v2) – Reloj Matriz Arduino Nano Arduino
Actualizada según nuevas librerías.
/* Arduino Nano DS3231 clock con LED Matrix 4x(8x8) SPI
* Versión 2 - actualizada 15/05/2021
* Arduino Nano 5V logic - 32kB prog. space
* Tools:Board: Arduino Nano; Processor: ATmega328P (Old Bootloader)!!
* CONEXIONES: (igual que arriba)
* Definir abajo tu modelo de matriz LED:
* #define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW
* #define HARDWARE_TYPE MD_MAX72XX::FC16_HW
* Autor: MVP https://www.hackster.io/M-V-P
*/
#include <SPI.h>
#include "DS3231.h"
#include "MD_MAX72xx_lib.h"
DS3231 rtc(SDA, SCL);
const byte LDR_PIN = A2;
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define USE_NEW_FONT 1
#define BUF_SIZE 20
#define CHAR_SPACING 1
char buf[BUF_SIZE], secs[4];
uint8_t hh, mm, ss, dots;
// Definición de fuentes pequeñas 3x5:
uint8_t Font3x5[10][3] = {
{248, 136, 248}, // 0
{144, 248, 128}, // 1
{200, 168, 184}, // 2
{136, 168, 248}, // 3
{112, 72, 224}, // 4
{184, 168, 232}, // 5
{248, 168, 232}, // 6
{8, 232, 24}, // 7
{248, 168, 248}, // 8
{184, 168, 248} // 9
};
char months[12][4] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
char* wday;
MD_MAX72XX matrix = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
const byte WAIT = 100;
const byte SPACER = 1;
byte FONT_WIDTH;
bool timeset=false;
// ... (funciones: adjustClock, ledintensitySelect, printText, setup, getDate, getHour, showsec, loop)
// Código completo en el adjunto del proyecto.
Esquemáticos
Inspirado en Leonardo Sposina, pero #define CS_PIN(Matrix) <-> 10(Nano)
El esquemático es CASI el mismo para todos los proyectos de matriz. Aquí la fotorresistencia es original. Como se menciona en el código: #define CS_PIN(Matrix) <-> 10(Nano)
Referencia: GitHub de Leonardo Sposina
Proceso de manufactura
- Construye un reloj en tiempo real con Arduino para horarios de oración islámica
- Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
- Pantalla LED Matricial Interactiva en Puerta con Sensor PIR - Saludo Navideño Arduino
- Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
- Reloj flip Arduino con matriz LED 8×8: proyecto DIY de reloj en tiempo real
- Control de Matriz LED 8×8 con Arduino Uno: Guía Paso a Paso
- Contador Geiger Portátil con Arduino Nano: Construye tu Detector de Radiación
- Cargador inteligente de baterías avanzado con multiplexación y display digital
- Reloj Meteorológico Arduino en Tiempo Real: Pantalla OLED para Hora, Fecha y Temperatura