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”