Le but de cet article , est de monter comment réaliser facilement une horloge Numérique a base d’un Arduino , pour moins de 19 € .
Pour cela il nous faut :
- Un Arduino UNO ( environ 10 € )
- Une matrice LED 8×32 ( MAX7219 Dot Matrix ) environ 6 €
- un Module RTC ( environ 2 € )
Pour tous ceux qui découvre l’ARDUINO , je les invites à aller sur les sites suivants :
- Un tuto très complet sur le site Une Zest De savoir
- le site d’Open Classroom
- Le blog d’eskimon
- et bien sur le site officiel : Arduino.cc
Relier la matrice à l’Arduino :
Dans cette partie , nous allons voir comment relier une matrice led de type MAX7219.
Nous allons la relier à L’Arduino Uno de la façon suivante .
Pour le code , voici le minimum pour afficher « Test »
// Projet horloge avec Notif
// janvier 2018
// Chargement des librairies
// gestion affichage matrice
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
// Parametrage matrice ( Pin Arduino ou est branché la matrice )
#define MAX_DEVICES 4 // ( nombre de matrice )
#define CLK_PIN 10
#define DATA_PIN 12
#define CS_PIN 11
// initialisation de la matrice
MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
void setup() {
//init affichage
P.begin();
}
void loop() {
// Affichage d'un texte simple
P.print("TEST");
}Vous devriez obtenir ce résultat :

Si vous obtenez un affichage incompréhensible ou un texte a l’envers



, il faudra modifier les lignes suivantes dans le fichier de configuration de la bibliothèque master : src/MD_MAX72xx_lib.h
// ******************************************************************************************* // ** Combinations not listed here have probably not been tested and may not work correctly ** // ******************************************************************************************* #if USE_PAROLA_HW // tested MC 8 March 2014 //#pragma message "PAROLA HW selected" #define HW_DIG_ROWS 1 ///< MAX72xx digits are mapped to rows in on the matrix #define HW_REV_COLS 0 ///< Normal orientation is col 0 on the right. Set to 1 if reversed #define HW_REV_ROWS 0 ///< Normal orientation is row 0 at the top. Set to 1 if reversed #endif
Ci dessus la configuration qui marche avec ma matrice.
Animer le Texte :
Avec la bibliothèque Parola , il est très facile d’animer un texte , en utilisant la commande P.display et la fonction P.displayAnimate().
exemples :
void loop() {
// Affichage d'un texte simple
if (P.displayAnimate())
{
P.displayText("Message defilant", PA_LEFT,40,200, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
}
}La syntaxe est simple : le texte , la position de départ ( pas d’incidence en scroll ), la vitesse de scroll , le temps de pause à la fin de l’animation , L’effet entrant ( ici scroll de la gauche ) , l’effet sortant ( uniquement sur affichage en cours ).
Plein d’autres effets , que vous pouvez trouver dans les exemples fournis avec la bibliothèque.
Le module Horloge
Arduino a des fonctions de timer , très limité et surtout n’est pas en mesure de garder la notion d’heure et de date , une fois débranché. Il faut pour cela lui installer un module RTC ( Real Time Clock ) , comme le module DS3231 qui permet de connaître l’heure à la seconde près , ainsi que le jour , le mois , l’année , le jour de la semaine …. Il est de plus équipé d’une pile permettant de mémoriser le temps sur plusieurs années.

Son branchement est très simple:
Il suffit de relier la borne VCC au plus 5V de l’arduino , la broche GND à la broche GND de l’arduino.
Les deux broches qui vont servir seront SDA et SCL , qui seront relié aux broches SDA et SCL de l’arduino.

voici , donc le script Modifié :
// Chargement des librairies
// gestion affichage matrice
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
// librairie pour horloge
#include <DS3231.h>
// Parametrage matrice ( Pin Arduino ou est branché la matrice )
#define MAX_DEVICES 4 // ( nombre de matrice )
#define CLK_PIN 10
#define DATA_PIN 12
#define CS_PIN 11
// initialisation de la matrice
MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// parametrage horloge
DS3231 clock;
RTCDateTime dt;
// Commande a devalider pour reglage horloge premiere fois Manual (YYYY, MM, DD, HH, II, SS
//clock.setDateTime(2017, 10, 27, 16, 19, 00);
void setup() {
//init affichage
P.begin();
// init horloge
clock.begin();
}
void loop() {
dt = clock.getDateTime();
// Affichage d'un texte simple
if (P.displayAnimate())
{
P.displayText(clock.dateFormat("H:i", dt), PA_CENTER,0,0, PA_PRINT, PA_NO_EFFECT);
}
}Et voilà , votre horloge est prête , il ne vous reste plus qu’a lui trouver ( ou fabriquer un petit coffret ) .
Lors du premier lancement , votre horloge ne sera sûrement pas a l’heure ….
Pour corriger cela il faut decommenter la ligne « setDateTime » .
RTCDateTime dt; // Commande a devalider pour reglage horloge premiere fois Manual (YYYY, MM, DD, HH, II, SS clock.setDateTime(2017, 10, 27, 16, 19, 00);
En fonction de votre équipement mettez entre 5 et 15s de plus , qui correspond au temps de compilation.

Les notifications :
Pour illustrer les notifications , j’ai choisi d’afficher la date du jour toutes les 3 minutes.
Le Script complet :
// Projet horloge avec Notif
// janvier 2018
// Chargement des librairies
// gestion affichage matrice
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
// librairie pour horloge
#include <DS3231.h>
// Parametrage matrice ( Pin Arduino ou est branché la matrice )
#define MAX_DEVICES 4 // ( nombre de matrice )
#define CLK_PIN 10
#define DATA_PIN 12
#define CS_PIN 11
// initialisation de la matrice
MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// parametrage horloge
DS3231 clock;
RTCDateTime dt;
// Commande a devalider pour reglage horloge premiere fois Manual (YYYY, MM, DD, HH, II, SS
//clock.setDateTime(2017, 10, 27, 16, 19, 00);
// variable pour tempo notif
long temps;
unsigned int tempoNotif = 180 ; // temps en secondes
void setup() {
//init affichage
P.begin();
// init horloge
clock.begin();
}
void loop() {
dt = clock.getDateTime();
// Affichage d'un texte simple
if (P.displayAnimate())
{
P.displayText(clock.dateFormat("H:i", dt), PA_CENTER,0,0, PA_PRINT, PA_NO_EFFECT);
// notif auto
// temp et date
if ((millis()-temps)>( tempoNotif*1000L))
{
P.displayText(clock.dateFormat(" --> d.m.y", dt), PA_LEFT,40,2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
temps=millis();
}
}
Afin d’éviter de bloquer l’exécution du script avec la commande delay , on utilise ici la fonction millis() , qui permet de lancer un timer sans arrêter le script.
Pour l’affichage de la date , j’ai choisi un effet de scrolling gauche . Une fois l’effet terminé , il revient à l’affichage de l’horloge au bout de deux secondes.
Et voila un réveil , avec une notification de date toutes les 3 minutes ( 180s).
Petite astuce : le calcul de la tempo on utilise la fonction millis() qui est de type Long , on compare ensuite sa valeur à une multiplication par 1000 ( afin d’éviter de s’encombrer des millisecondes ) il faut penser à ajouter le L à la fin afin de forcer le résultat en « Long« . ( tempoNotif*1000L ).
Ce petit script , peut être amélioré en affichant la date « a la française « , sous la forme : Mardi 05 décembre 2017 … par exemple , ou simplement l’ajout d’une phrase qui défierait automatiquement ….
Je me suis volontairement limiter à cette fonctionnalité , car la mémoire de l’Arduino étant très limité . pour information dans cette partie , on utilise déjà 70% de la mémoire.
Dans la partie 2 , nous ajouterons un capteur de température , afin d’afficher la température et l’humidité de la pièce .
Nous ajouterons aussi , un module IR , afin d’interagir avec l’horloge et la rendre plus dynamique , afin de l’associer avec une box Domotique ( comme Jeedom , par exemple ).


Commentaire sur “Projet ARDUINO ( Horloge avec notification ) – Partie 1”