Horloge à matrice LED 4x64 avec Arduino Nano – Nouvelle version
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 | 1 |
| Matrice LED 4×(8×8) (module 4 en 1 MAX7219) | 1 |
| Photorésistance (LDR) | 1 |
| Plaque d'essai (breadboard) | 1 |
| Module RTC DS3231 | 1 |
Applications et services en ligne
- Arduino IDE
À propos du projet



L'affichage d'une horloge lisible à plusieurs mètres dans une pièce nécessite une telle matrice LED.
Ayant acheté à bon prix un afficheur 4 modules, j'ai cherché sur Hackster des projets existants pour Arduino Nano. Il y en a plusieurs, mais peu permettent d'afficher simultanément heures, minutes et secondes, car il faut des chiffres plus petits que les polices 5×7 pixels habituelles. Une option est la bibliothèque MD_Parola, mais son code est trop volumineux pour une simple horloge. L'autre option testée, la bibliothèque Max72xxPanel, est trop ancienne et appelle d'autres bibliothèques. Finalement, ce projet repose sur la bibliothèque d'interface de base MD_MAX72XX, incluse dans les autres.
Les remarques sur ce site m'ont amené à revoir les aspects matériels et le code.
- Bibliothèques DS3231 : il en existe beaucoup. J'utilise celle-ci : https://www.rinkydinkelectronics.com/library.php?id=73 (Arduino/chipKit library support for the DS3231 I2C Real-Time Clock, Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen).
- Matrice LED : il existe plusieurs modèles sur le marché, il est donc probable que l'affichage montre des choses bizarres après le téléversement. Solution : téléversez l'exemple « MD_MAX72xx_HW_Mapper.ino » de la bibliothèque « MD_MAX72xx_lib.h » pour identifier votre modèle matériel. Dans mon code, le modèle était défini :
#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW, mais cela peut ne pas fonctionner tant que vous n'avez pas défini le bon modèle ! - Petites secondes : elles ne s'affichaient plus récemment ? Maintenant (v2), les polices pour ces secondes sont incluses dans le code, plus besoin de modifier une autre bibliothèque.
- Avertissements de compilation : dus aux mises à jour Arduino. Maintenant, les mois sont dans un tableau char bidimensionnel et non plus via un pointeur. Les autres avertissements viennent de la bibliothèque DS3231.h, mais peuvent être ignorés.
- Points clignotants : maintenant seulement 2 points ! Les secondes précises s'affichent avec mes polices 3×5 après « hh:mm ». De plus, les deux points « : » clignotent presque deux fois par seconde, juste pour montrer que c'est vivant !
- Réponse à une demande : l'heure est affichée 53 secondes par minute, et pendant les 7 dernières secondes, la date et la température sont affichées.
- Jour de la semaine : peut aussi être affiché, si vous décommentez deux lignes dans
loop(). Dans ce cas, vous préférerez peut-être réduire l'intervalle de 53 à 51 secondes. - Format 12 heures : voir une de mes anciennes réponses.
- Réglage de l'heure RTC : via le moniteur série Arduino en entrant
JJ/MM/AAAA hh:mm:ss(ne pas oublier l'espace) et valider. Possible dès qu'un câble USB est connecté et le moniteur série fonctionnel (bon port COM et baud rate).
Le nouveau code utilise 13 558 octets (44 %) et 372 octets (18 %) pour les variables, donc un peu plus court !
La date s'affiche sous la forme « jj Mmm » et la température ambiante en degrés Celsius (estimée via le capteur interne du RTC) sur une page séparée. La luminosité est contrôlée par la photorésistance. Le code fonctionne cependant même sans capteur de lumière.
Merci pour votre intérêt, montré par le bouton « respect » !
Code
- Ancienne version - Horloge Arduino Nano à matrice de points
- Nouvelle version (v2) - Horloge Arduino Nano à matrice de points
Ancienne version (obsolète)
Comme de nombreuses bibliothèques ont changé depuis la sortie initiale, ce code est obsolète. Utilisez la nouvelle version. Toutes les connexions sont décrites dans le code. Pour les petites polices, modifiez quelques lignes dans MD_MAX72xx_font.cpp, comme expliqué dans le code.
/* WARNING: Initial code is now obsolete. Use the new one (version 2)
* Arduino Nano DS3231 clock with 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 with connector on the right side (last module)
* https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in-1-Display-For-Arduino-p-1072083.html
* CONNECTIONS:
* >> LCD 4x64 -> Arduino Nano: (using Hardware SPI):
* 5V -> 5V pin
* GND -> GND pin
* CLK_PIN -> 13 // or SCK
* DATA_PIN -> 11 // or MOSI
* CS_PIN -> 10 // or SS
* >> DS3231 RTC -> Arduino Nano:
* SDA (DAT) -> A4
* SCL (CLK) -> A5
* Inspired by: 1) Arduino Clock by AnthoTRONICS...
* Not using Max72xxPanel.h, but small size digits are still used.
* Replace in library MD_MAX72XX/src/MD_MAX72xx_font.cpp:
* 1) #define USE_NEW_FONT 1
* 2) fonts #148 ... 158 must be replaced with 3x5 fonts...
* project: 13790 bytes (44%); variables 361 bytes (17%)
* Author: MVP https://www.hackster.io/M-V-P
*/
#include
#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;
// ... fonctions adjustClock, ledintensitySelect, printText, setup, getDate, getHour, showsec, loop ...
Nouvelle version (v2) – mise à jour pour les nouvelles bibliothèques
/* Arduino Nano DS3231 clock with LED Matrix 4x(8x8) SPI
* Version 2 - updated 15/05/2021
* Arduino Nano 5V logic - 32kB prog. space
* Tools: Board: Arduino Nano; Processor: ATmega328P (Old Bootloader)!!
* LED Matrix 4x(8x8) SPI with connector on the right side (last module)
* https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in-1-Display-For-Arduino-p-1072083.html
* CONNECTIONS:
* >> LCD 4x64 -> Arduino Nano: (using Hardware SPI):
* 5V -> 5V pin
* GND -> GND pin
* CLK_PIN -> 13 // or SCK
* DATA_PIN -> 11 // or MOSI
* CS_PIN -> 10 // or SS
* >> DS3231 RTC -> Arduino Nano:
* SDA (DAT) -> A4
* SCL (CLK) -> A5
* Inspired by: 1) Arduino Clock by AnthoTRONICS...
* Not using Max72xxPanel.h, but small size digits are still used.
* project: 13558 bytes (44%); variables 372 bytes (17%)
* Author: MVP https://www.hackster.io/M-V-P
*/
#include
#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 below your LED matrix hardware model:
//#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW
#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;
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;
// ... fonctions adjustClock, ledintensitySelect, printText, setup, getDate, getHour, showsec, loop ...
Schémas
Inspiré par Leonardo Sposina, mais #define CS_PIN(Matrix) <-> 10(Nano)
Le schéma est PRESQUE le même pour tous les projets à matrice. Ici la photorésistance est originale. Comme mentionné dans le code : #define CS_PIN(Matrix) <-> 10(Nano). Voir GitHub de Leonardo Sposina.
Processus de fabrication
- Horloge Arduino temps réel pour les heures de prière islamiques
- Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Station météo interactive Nextion HMI avec Arduino Mega et capteurs
- Affichage LED matrice interactif porte avec capteur PIR - Salutations fêtes Arduino
- Contrôler 2 moteurs pas-à-pas avec Arduino Nano et joystick – Tutoriel Visuino
- Horloge à bascule Arduino avec matrice LED 8×8 – Projet DIY d'horloge temps réel
- Maîtriser une matrice LED 8×8 avec Arduino Uno : Guide pas à pas
- Compteur Geiger Portable avec Arduino Nano : Construction Pas à Pas