Une Horloge Pour Votre Arduino (Real Time Clock)

Pages d'index

  • Accueil
  • Électronique
  • Arduino
  • Raspberry Pi
  • ESP8266 / ESP32
  • STM32
  • Autres microcontrôleurs
  • Moteurs et robotique
  • Son et Musique
  • Logiciels
  • Expériences scientifiques
  • À propos...

mercredi 19 juin 2013

Une horloge pour votre Arduino (Real Time Clock)

Il est parfois utile que votre Arduino connaisse la date et l'heure. Par exemple, l'Arduino pourrait être à la base d'un système de mesures automatisé ("datalogging") qui consignera la date et l'heure de chaque mesure, ou encore d'une tâche devant être accomplie tous les jours à la même heure (sauf la fin de semaine), etc. Comme son nom l'indique, une horloge temps réel ("Real Time Clock" ou RTC) est un circuit intégré dont la principale fonction consiste à mesurer le temps. Par exemple, il existe sur eBay des modules ("breakout") basés sur le circuit intégré DS1307 de Dallas/Maxim qui peuvent facilement être branchés à un Arduino (protocole i2c): chaque fois que l'Arduino a besoin de connaître la date ou l'heure, il n'a qu'à interroger le module RTC. Mais pourquoi, dites-vous, ne pas simplement utiliser les fonctions de mesure de temps déjà incluses dans l'Arduino? Une instruction comme millis() retourne le temps écoulé depuis le dernier démarrage de l'Arduino, mais sera réinitialisée dès le prochain démarrage. De plus, millis() atteint sa limite maximale (et retourne à zéro) au bout d'une cinquantaine de jours. Un module RTC est muni d'une petite pile qui peut durer plusieurs années (sauf le modèle que j'ai reçu, qui était muni d'une pile rechargeable LIR2032 à la place d'une CR2032: ces piles perdent leur charge en 1 mois environ...). Et leur utilisation est d'une incroyable simplicité. 4 fils suffisent pour brancher le module RTC à l'Arduino: "Sda" : Arduino A4 (analog in) "Scl": Arduino A5 (analog in) "Gnd": Arduino GND "Vcc": Arduino 5V ou 3V3 La librairie RTClib simplifie énormément la conception des sketches. La version la plus récente sur trouve ici (utilisez le bouton "ZIP" pour télécharger la totalité du dossier, que vous installez ensuite dans le répertoire "Librairies" de l'IDE Arduino). Une fois la librairie installée, ouvrez simplement l'exemple "ds1307" (menu Fichier/Exemples/rtclib/ds1307) et installez-le dans l'Arduino; ouvrez le moniteur série et réglez sa fréquence à 57600 bauds: vous verrez alors défiler la date et l'heure (suivies de quelques informations moins utiles). Un coup d'oeil sur le sketch vous indiquera comment récupérer les informations voulues (jour, mois, année, etc.). Si vous constatez que la date et l'heure retournées par votre module RTC sont incorrecte, exécutez à nouveau l'exemple "ds1307" après avoir "décommenté" la ligne "RTC.adjust(DateTime(__DATE__, __TIME__));": le ds1307 se réinitialisera en utilisant l'heure de votre ordinateur. Voici finalement un sketch permettant de construire une horloge avec un Arduino, un module RTC et un afficheur LCD. Pour la façon de brancher l'afficheur LCD à l'Arduino, je vous réfère à cette précédente rubrique. À lire également: une autre horloge à base d'Arduino, sauf que celle-ci affiche l'heure au moyen de deux galvanomètre à cadre mobile. Il existe aussi un billet concernant le modèle DS3231. Yves Pelletier (Twitter: @ElectroAmateur)

39 commentaires:

  1. Anonyme28 janvier 2014 à 05:15

    Merci votre programme nous a permis d'avancer dans notre projet.

    RépondreSupprimerRéponses
      Répondre
  2. Anonyme19 juin 2014 à 12:45

    Thanks for this, just used this with a Nano. Works like a charm.

    RépondreSupprimerRéponses
      Répondre
  3. Anonyme23 juin 2014 à 16:48

    merci pour le code bien jouer !!!!

    RépondreSupprimerRéponses
      Répondre
  4. Anonyme1 juillet 2014 à 16:18

    parfait, je l'ai adapté au lcd I2C, en revanche pour delay 100 plutôt que 1000, et suppression du lcd.clear, cela me semble plus douxbravo pour ce codeje suis un fervent de l'I2Ccordialement

    RépondreSupprimerRéponses
      Répondre
  5. Titi5018 octobre 2015 à 07:01

    eu j'ai un petit probleme lors de la compilation du programme, sa me metcompilation terminated.exit status 1Erreur lors de la compilation.

    RépondreSupprimerRéponses
    1. Unknown18 février 2016 à 12:08

      Il faut valider le port com en USB si tu utilise l'usb et installer les drivers si ce n'est pas fait.

      SupprimerRéponses
        Répondre
    2. Répondre
  6. Unknown18 février 2016 à 12:04

    Le programme ne fonctionne pas, l'heure reste figée.Les secondes ne défilent pas.La date est bien affichéeEnlever la pile n'y change rien et le reset de la carte UNO ne fait rien également.En ce qui concerne "ds1307" après avoir "décommenté" la ligne "RTC.adjust(DateTime(__DATE__, __TIME__));Windows interdit de modifier le fichier, GNU linux également.La procédure dest attibuts de fichiers dans la base de registes est complexe et incompréhensible.Arduino uno LCD 20x4 relié en 4 bit via afficheur et I2C via le DS1307 Remettre la ligne RTC.adjust(DateTime(__DATE__, __TIME__)); dans le programme principal met effectivement a l'heure mais elle reste figée, et affiche dans la console la même chose dans la console "heure" et "date" en boucle.

    RépondreSupprimerRéponses
    1. Yves Pelletier18 février 2016 à 12:08

      Windows et Linux vous interdit de modifier le fichier d'un sketch Arduino?

      SupprimerRéponses
        Répondre
    2. Yves Pelletier18 février 2016 à 12:11

      Ha, je comprend: vous avez essayé de modifier directement le fichier d'exemple plutôt qu'en modifier une copie.

      SupprimerRéponses
        Répondre
    3. Unknown19 février 2016 à 12:06

      Rebonjour!Oui, modifier directement le fichier est plus simple, et donc impossible, créer une copie pose des problèmes quand on appelle des bibliothèques du style : " #include " car il le logiciel ne retrouve pas les "librairies" quand elle sont crées et il y a une procédure qui n'est pas claire ou pas bien expliquée et en plus en anglais avec le point h et le .ino.On devrait pouvoir modifier les programmes ou les librairies de manière simple et rapide.

      SupprimerRéponses
        Répondre
    4. Unknown19 février 2016 à 12:15

      Windows me dit: vous le pouvez pas modifier le fichier DS1307, il demande de faire une copie dans un autre emplacement, et quand on copie dans un autre emplacement, le programme principal ne fonctionne plus. Le clic droit avec la souris option propriétés sur le dossier ou le raccourci Arduino, ne résoud pas le problème des fichiers en lecture seule, le dossier se remet en lecture seule, quoi q'il arrive de manière automatique, donc l'utilisation des librairies est difficile, puisque l'on ne peut pas facilement en modifier le contenu directement sans trop réfléchir avec des grosses notions d'informatique pour la bidouille des fichiers.

      SupprimerRéponses
        Répondre
    5. Yves Pelletier19 février 2016 à 12:16

      À moins que l'IDE (ou la bibliothèque) ait été mal installé, il n'y a aucune raison que la bibliothèque ne soit pas trouvée suite à la copie d'un fichier d'exemple.

      SupprimerRéponses
        Répondre
    6. Anonyme2 mars 2016 à 10:19

      J'ai pu constater plusieurs fois des problemes de ce genre. Il ne faut pas copier le fichier exemple, mais avec l'exemple ouvert faire un copier/coller du texte dans un nouveau fichier... et la, pour moi cela fonctionne!

      SupprimerRéponses
        Répondre
    7. Répondre
  7. filtre à café23 février 2016 à 09:41

    Bonjour.Merci pour ce petit tuto. J'ai pu mettre en route une horloge à base d'Arduino nano rapidement. Ma seule difficulté a été de trouver sur quelles broches du nano brancher le module RTC. Certains schémas sur le Net indiquent les broches D4 et D5 pour SDA et SCL.J'ai vu que sur le module que je possède et qui le même que le votre, il y a de la mémoire EEPROM intégrée. Connaissez vous un tuto pour son utilisation ? Merci d'avance.

    RépondreSupprimerRéponses
    1. Unknown23 février 2016 à 13:20

      Ce n'est pas en français mais il faut suivre à l'écran c'est très instructif "adress"https://www.youtube.com/watch?v=tNcL4zSCl-Q

      SupprimerRéponses
        Répondre
    2. Répondre
  8. Unknown23 février 2016 à 13:15

    Re Bonjour !Maintenant que le programme est compilé, j'ai 2 possibilités :soit j'ai ligne 1 de l'afficheur : 0:00:00et ligne 2 : 1 janvier 2000Si j'enlève la pile du module RTC : ligne 1 de l'afficheur 165:165:165Ligne 2 165 2165Résultats incompréhensibles à la réalisation d'une horloge qui ne fonctionne pas que ce soit avec 4 bit ou en I2C pcf8574 !!Help please.

    RépondreSupprimerRéponses
      Répondre
  9. massi28 février 2016 à 16:44

    bonjour j'ai eu un problème lors de la compilation exit status 1Erreur lors de la compilation.merci

    RépondreSupprimerRéponses
      Répondre
  10. massi29 février 2016 à 09:46

    salut, j'ai compiler le programme et voici le résultat Le croquis utilise 5 594 octets (17%) de l'espace de stockage de programmes. Le maximum est de 32 256 octets.Les variables globales utilisent 450 octets (21%) de mémoire Le maximum est de 2 048 octets.

    RépondreSupprimerRéponses
    1. Anonyme11 janvier 2020 à 14:16

      cela veut dire que c'est réussi

      SupprimerRéponses
        Répondre
    2. Répondre
  11. Unknown18 mars 2016 à 13:56

    Bonjour,j'ai utilisé cet exemple pour monter mon projet.jusque là pas de soucis puisque j'étais branché en usb sur mon PC.En revanche je n'arrive pas à mémoriser l'heure, je m'explique :tant que je suis branché en USB l'heure de mon programme est à l'heure du PC (après téléversement du programme).si je débranche et que je rebranche quelques minutes plus tard, le programme reprends à l'heure ou l'alimentation a été coupée.J'ai d'abord pensé à ma pile qui était HS et l'ai donc changé mais... rien n'y fait.Je ne comprends pas ou ça cloche. Faut il décommenter une certaine partie du programme ?Merci si quelqu'un a la réponse.

    RépondreSupprimerRéponses
    1. Yves Pelletier18 mars 2016 à 15:37

      Il y a une pile valide insérée dans le module RTC?

      SupprimerRéponses
        Répondre
    2. Unknown19 mars 2016 à 04:15

      Oui, une CR2023 3V.J'ai essayé une autre méthode qui utilise uniquement la lib "Wire.h" et l'heure reste bien mémorisée après une coupure d'alimentation de l'arduino. Du coup ça vient de mon code. J'aimerai garder la méthode ci-dessus et utiliser la lib "RTClib.h" ce qui évitera de remodeler mon programme déjà bien avancé..Je vais continuer à creuser côté prog' maintenant que je sais que ce n'est pas la pile.

      SupprimerRéponses
        Répondre
    3. Répondre
  12. Anonyme19 mars 2016 à 08:31

    bonjoursi le programme ne fonctionne pas ça peut être du aune petite erreur #include et il faut écrire #include "RTClib.h"

    RépondreSupprimerRéponses
    1. Unknown20 mars 2016 à 07:29

      Pour une raison que j'ignore j'ai réussis à mémoriser l'heure après une coupure de l'alimentation avec l'exemple de cette page et avec une manipulation que j'avais déjà testée.. à savoir :renseigner l'heure au module RTC en téléversant le programme avec la ligne de code :"RTC.adjust(DateTime(__DATE__, __TIME__));"puis en téléversant à nouveau le programme en mettant cette ligne de code en commentaire...Merci à ceux qui ont répondu à ma question même si j'avais déjà la réponse..

      SupprimerRéponses
        Répondre
    2. Anonyme21 mars 2016 à 09:02

      Le programme est bon, mais dans le microcontrôleur ça ne m'affiche pas du tout la bonne date, ni la bonne heure. J'ai beau supprimer "RTC.adjust(DateTime(__DATE__, __TIME__));" ou la mettre en commentaire, ça ne marche pas. Puis soit rien ne s'affiche sur l'afficheur ou alors seulement des choses incompréhensible...

      SupprimerRéponses
        Répondre
    3. Répondre
  13. Unknown24 mars 2016 à 05:05

    Bonjours j'ai un petit soucis car je voudrais afficher l'heure sur un écran LCD avec le module RTC 3231. Du coup j'ai changer la ligne 31 de votre programme par : RTC_DS3231 RTC;Mais lorsque je compile le programme sur mon afficheur j'ai : 165:165:85165 2165Merci d'avance de votre réponse

    RépondreSupprimerRéponses
    1. Yves Pelletier13 juin 2016 à 18:39

      Est-ce qu'on parle de la bibliothèque que j'utilise dans cet article? Les choix possibles sont DS1388, PCF8563et BQ32000.

      SupprimerRéponses
        Répondre
    2. Répondre
  14. Unknown24 mars 2016 à 05:06

    Merci

    RépondreSupprimerRéponses
    1. Anonyme13 juin 2016 à 10:42

      Meme quesstion pour unkowcomment on fait car c'est marquer pareil pour moi

      SupprimerRéponses
        Répondre
    2. Répondre
  15. Anonyme25 mars 2016 à 14:02

    Bonjour,j'ai trouvé un lien pour mettre à jour l'heure et la date et ça fonctionne.http://www.semageek.com/arduino-un-utilitaire-bien-pratique-pour-mettre-a-lheure-les-modules-rtc/

    RépondreSupprimerRéponses
      Répondre
  16. Anonyme20 mai 2016 à 03:30

    Merci beaucoup pour tes explications. elles m'ont grandement aidées.

    RépondreSupprimerRéponses
      Répondre
  17. Anonyme25 janvier 2017 à 04:53

    Bonjour, j'ai essayé de lancer le programme exemple mais quand j'ouvre le moniteur série, je ne vois qu'une ligne qui continue du genre :"ò êâÿb‡+]B‡+]B‡+]BO93B†«]R JãÿR JãÿB JãÿÒ êâÿR êãÿW"Qu'est ce qui pourrait faire que ça ne marche pas ? Merci d'avance pour votre réponse.

    RépondreSupprimerRéponses
    1. Yves Pelletier25 janvier 2017 à 08:05

      La vitesse de transmission a-t-elle été changée pour 57600 bauds dans le moniteur série?

      SupprimerRéponses
        Répondre
    2. Répondre
  18. Anonyme28 mars 2018 à 04:37

    Bonjour, merci pour ce tuto bien fait, il semble que la DS1307 et surtout le type de quartz utilisé rende jusqu'à 10mn par jour de retard sans coupure de l'alimentation, pouvez-vous confirmer et donner une solution à ce problème si il y en a une ? La DS3231 est-elle aussi concernée ? Merci.

    RépondreSupprimerRéponses
      Répondre
  19. Bergart.Eric23 décembre 2019 à 23:11

    L'explication de Flavien Cardon est impecable : il faut compiler avec la mise a l'heure ( la fameuse ligne : "RTC.adjust(DateTime(__DATE__, __TIME__));")Puis la mettre en commentaire avec les signes : //Merci beaucoup car j'ai galérer pour trouver et tu m'a eclairé !!! [email protected]

    RépondreSupprimerRéponses
      Répondre
  20. Anonyme11 janvier 2020 à 14:17

    Bonjour,pourriez vous faire un code qui fonctionne avec un afficheur 4digit 7segements s'il vous plait?

    RépondreSupprimerRéponses
      Répondre
  21. Ahmed10 septembre 2020 à 07:18

    Bonjour, juste une petite suggestion d'allègement du code. On peut retirer le switch case et le remplacer par quelque chose de ce style:String mois[12]= {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"};lcd.print(mois[now.month()-1]);

    RépondreSupprimerRéponses
    1. Yves Pelletier10 septembre 2020 à 13:29

      Ha oui, c'est beaucoup plus élégant de cette façon!

      SupprimerRéponses
        Répondre
    2. Répondre
  22. Anonyme12 janvier 2023 à 10:30

    Bonjour j'ai une erreur de complilation je ne comprends pas d'où cela provient, pouvez vous m'aider svp ?voici l'erreur :Arduino : 1.8.13 (Windows 7), Carte : "Arduino Nano, ATmega328P"In file included from D:\Arduino Mes Prog\Horloge_RTC_DS1307_plus_afficheur_LCD\Horloge_RTC_DS1307_plus_afficheur_LCD.ino:28:0:D:\Arduino Mes Prog\libraries\RTClib-master\src/RTClib.h:25:10: fatal error: Adafruit_I2CDevice.h: No such file or directory #include ^~~~~~~~~~~~~~~~~~~~~~compilation terminated.exit status 1Erreur de compilation pour la carte Arduino NanoImpossible de trouver boards.txt dans C:\Users\Gerard\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6. Version pre-1.5 ?Ce rapport pourrait être plus détaillé avecl'option "Afficher les résultats détaillés de la compilation"activée dans Fichier -> Préférences.

    RépondreSupprimerRéponses
      Répondre
Ajouter un commentaireCharger la suite... Article plus récent Article plus ancien Accueil Inscription à : Publier les commentaires (Atom)

Rechercher dans ce blog

Archives du blog

  • ▼  2013 (56)
    • ▼  juin (13)
      • Lecture de fichiers mp3 avec Arduino et VS1053
      • Saisie de données (data logging) avec un Arduino
      • Contrôle d'un moteur pas à pas au moyen d'un L6205...
      • En kiosque ce mois-ci
      • Une horloge pour votre Arduino (Real Time Clock)
      • Contrôler deux moteurs cc avec un L6205 (et un Ard...
      • Construction d'une base de robot à 2 roues motrices
      • Moteur électrique alimenté par énergie solaire (3)...
      • Modification d'une alimentation ATX (version 3)
      • Livre: Getting started with the MSP430 Launchpad
      • Futurlec: à éviter!
      • Bricoler son propre moto-réducteur
      • Cours en ligne: Fundamentals of Audio and Music E...

Pages d'index

  • Accueil
  • Électronique
  • Arduino
  • Raspberry Pi
  • ESP8266 / ESP32
  • STM32
  • Autres microcontrôleurs
  • Moteurs et robotique
  • Son et Musique
  • Expériences scientifiques
  • Logiciels
  • À propos...

Articles les plus consultés

  • Utilisation d'un écran tactile TFT SPI 240 X 320 (ILI9341) avec un ESP32 Dans ce tuto, nous branchons à un ESP32 un écran tactile SPI 240 X 320 comportant le contrôleur ILI9341. L'ESP32 sera  programmé au moye...
  • ESP32: Utilisation des entrées analogiques La mesure d'une tension analogique a toujours été un point faible de l'ESP8266: le premier module (ESP-01) ne donnait accès à aucu...
  • Fabriquons notre propre pont en H Jusqu'à maintenant, dans chaque projet impliquant le contrôle d'un ou deux moteurs DC par un microcontrôleur, j'ai utilisé un ci...
  • Fabrication d'un anémomètre (Arduino) Un anémomètre est un appareil qui permet de mesurer la vitesse du vent.  C'est très facile de construire un anémomètre à coupelle, et d...
  • Explorons les portes logiques Lorsqu'on a l'habitude d'utiliser des microcontrôleurs, on a trop facilement tendance à snober les portes logiques.  Il est tell...
  • ESP32: production d'un signal analogique L'ESP32 comporte deux convertisseurs numérique / analogique (DAC) à 8 bits, ce qui permet de produire un véritable signal analogique, c...
  • Écran OLED SH1106 I2C et Arduino Je me suis récemment procuré un petit écran OLED de 128 X 64 pixels et. bien entendu, je me suis empressé de le faire fonctionner  en le bra...
  • Communication RF 433 MHz avec RadioHead (Arduino, ESP32, ESP8266) Dans cet article, nous établissons une communication radio à une fréquence de 433 MHz entre cartes Arduino , ESP8266 et ESP32. Il peut s...
  • Programmation d'une carte STM32 avec l'IDE Arduino Maintenant que le " STM32Duino Core " de Roger Clarke a été remplacé par " l'official STM32 Core " mis au point par ...
  • Programmer l'ESP32 avec l'IDE Arduino (premiers pas) Puisque je me suis beaucoup amusé avec l'ESP8266 au cours des derniers mois, il était inévitable que je fasse un jour ou l'autre la ...

Article récent

Mini-Piano Arduino

Dans cet article, je présente la réalisation d'un mini-clavier musical réalisé au moyen d'un Arduino Uno, d'un shield TFT (écran...

Abonnement flux RSS

Articles Atom Articles Commentaires Atom Commentaires

Libellés

  • Afficheur (60)
  • App Inventor (5)
  • Arduiino (1)
  • Arduino (223)
  • Arduino; (2)
  • ATTiny (8)
  • Blogs (22)
  • Capteur (94)
  • Circuit sans microcontrôleur (69)
  • Communication (47)
  • ESP32 (52)
  • ESP8266 (43)
  • Étude de CI (25)
  • Instruments (18)
  • Kit (6)
  • Livre (34)
  • Logiciels (28)
  • Micro:Bit (7)
  • MSP430 (31)
  • PIC (19)
  • Pico (35)
  • Raspberry Pi (61)
  • Réparation (6)
  • Robotique (69)
  • Science (57)
  • Son et musique (73)
  • STM32 (42)
  • Trouver des composants (16)

Nombre total de pages vues

Tag » Arduino Horloge Lcd I2c