Résolu sur le forum : Borne Wallbox Pulsar Plus 7,4 kW sur abonnement 6 kVA : quel délestage avant accord copro (urgent)Ma panne diagnostiquée — réponse sous 48 h29 €

Module RTC Arduino : câblage et code horloge temps réel

Arduinomis à jour le 2 mars 2026

Un projet Arduino cesse d’être un simple prototype dès qu’il gère une heure fiable, conserve la date après coupure de courant et déclenche des actions à des moments précis. Le module RTC venu s’ajouter à la carte devient alors la pièce maîtresse qui donne du rythme à l’ensemble.

Entre DS1307 et DS3231, câblage I2C, choix de la pile, librairies et exemples de code, chaque décision influence la précision, l’autonomie et la stabilité de votre horloge temps réel. Les différences restent subtiles sur le papier, mais se traduisent très concrètement dans vos montages…

Élément clé Synthèse
Fonction du module RTC Permet de conserver l’heure et la date avec précision, même sans alimentation 🔋.
Câblage typique Connexion via I2C (SDA/SCL) à l’Arduino, nécessitant seulement 4 fils.
Composants courants Modules DS1307 ou DS3231, ce dernier offrant une bien meilleure précision.
Code Arduino Utilisation de bibliothèques dédiées pour lire ou régler l’heure rapidement.

Module RTC Arduino : rôle, principes et choix du composant

Un module RTC (Real Time Clock) pour Arduino assure la gestion de l’heure et de la date, même lorsque la carte n’est plus alimentée par l’USB ou l’alimentation principale. Le composant fonctionne grâce à un oscillateur très stable, une petite pile bouton et une interface I2C qui dialogue en continu avec votre microcontrôleur.

Arduino seul ne maintient pas l’heure lorsque l’alimentation disparaît. Sans module RTC, chaque redémarrage impose un réglage manuel ou un recours à une horloge externe (PC, serveur NTP, GPS). Dans une station météo, un enregistreur de données ou un système d’alarme, cette contrainte devient vite pénalisante.

ArduinoArduino et domotique : automatiser sa maison pour pas cher

Deux circuits dominent les projets DIY : le DS1307 et le DS3231. Le premier reste très répandu et économique, le second apporte une précision temporelle bien plus stable grâce à un oscillateur compensé en température (TCXO) et une consommation maîtrisée sur pile.

Conseil pratique : pour tout montage qui reste alimenté en continu ou installé à l’extérieur, je recommande systématiquement une base DS3231. Pour des tests rapides en atelier, un DS1307 accomplit tout à fait le travail.

DS1307 ou DS3231 : comparaison détaillée pour un projet Arduino

Avant de se lancer dans le câblage et le code, un examen approfondi des deux familles de modules RTC évite des ajustements ultérieurs. La différence majeure concerne la stabilité temporelle sur plusieurs mois, la gestion de la température et l’autonomie sur pile.

Tableau comparatif DS1307 vs DS3231 pour Arduino

Caractéristique DS1307 DS3231
Précision typique ≈ 2 s/jour (≈ 10 min/an) ± 2 min/an (2 ppm) – dérive mesurée < 1 s en 10 jours
Oscillateur Quartz externe 32,768 kHz (non compensé) TCXO interne 32 kHz avec compensation en température
Plage de température Généralement 0 à +70 °C (suivant module) 0 à +70 °C avec compensation intégrée
Interface I2C, adresse 0x68 I2C jusqu’à 400 kHz, adresse 0x68
Alimentation principale 5 V (logique 5 V ou mixte 3.3/5 V suivant carte) 2.7 à 5.5 V
Pile de sauvegarde CR1220 (3 V) CR2032 (3 V) ou LIR2032 (3.6 V)
Consommation sur VCC Non spécifiée sur le récapitulatif Repos ≈ 170 µA, I2C ≈ 300 µA, compensation ≈ 650 µA
Consommation sur pile Non optimisée, autonomie plus réduite Repos ≈ 3.5 µA, compensation ≈ 650 µA, autonomie CR2032 ≈ 6.85 ans (210 mAh)
Alarmes Fonctions plus limitées selon module 2 alarmes programmables (seconde, minute, heure, jour, mois)
Sortie onde carrée Fréquence fixe ou restreinte suivant version 1 Hz, 4 kHz, 8 kHz, 32 kHz programmable
Température intégrée Non Capteur interne ± 3 °C (lecture via I2C)
Mémoire supplémentaire Souvent absente ou faible EEPROM AT24C32 – 4 Ko (1 million de cycles) avec 32 bytes libres typiques
Dimension typique du module ≈ 26 × 22 × 5 mm, 2.3 g ≈ 34 × 23 × 18 mm, 8 g

Les deux circuits partagent le même bus I2C (adresse 0x68), ce qui simplifie le passage de DS1307 à DS3231 dans un code existant. La différence se situe surtout au niveau de la dérive temporelle, des fonctions d’alarme avancées, de la mesure de température et de l’endurance sur pile bouton.

« Dans une installation distante, un DS3231 limite largement les interventions de recalage d’horloge. Sur plusieurs années, la dérive accumulée reste contenue, même avec de fortes variations de température ambiante. »

Pour un simple affichage d’heure sur un écran LCD en intérieur, un DS1307 convient sans difficulté. Pour un projet Arduino avancé qui exige des horodatages fiables (data logging, systèmes domotiques, mini-serveur, GPS autonome), le DS3231 représente un choix plus serein.

Comprendre le câblage I2C d’un module RTC avec Arduino

Le câblage d’un module RTC DS1307 ou DS3231 repose systématiquement sur le bus I2C. Deux lignes partagées par tous les capteurs I2C du montage suffisent : SDA pour les données, SCL pour l’horloge. Arduino gère nativement ce protocole via la librairie Wire.h.

En pratique, la liaison se limite à quatre fils : alimentation, masse, SDA, SCL. Certains modules ajoutent une broche SQW/INT pour l’onde carrée de référence ou le déclenchement d’alarmes matérielles.

Connexion d’un module RTC sur Arduino Uno, Nano ou Mega

Les broches I2C diffèrent légèrement selon les cartes, même si A4/A5 restent souvent valables. Le tableau suivant récapitule un câblage typique pour un module DS3231 ou DS1307 :

Module RTC Arduino Uno / Nano Arduino Mega 2560 Commentaire
VCC 5 V (ou 3.3 V suivant module) 5 V (ou 3.3 V suivant module) Respecter la tension recommandée par le fabricant du module
GND GND GND Masse commune obligatoire
SDA A4 ou SDA dédié Broche SDA (20) Ligne de données I2C
SCL A5 ou SCL dédié Broche SCL (21) Ligne d’horloge I2C
SQW / INT (optionnel) Pin digitale (ex: D2) Pin digitale (ex: D2) Pour l’onde carrée ou les alarmes matérielles

La plupart des modules RTC intègrent déjà des résistances de tirage (pull‑up) sur SDA et SCL. Lorsque plusieurs capteurs I2C se partagent le bus, l’ensemble continue de fonctionner tant que la somme des résistances garde une valeur adaptée (souvent entre 2.2 kΩ et 10 kΩ).

Point de vigilance : certains modules DS3231 sont prévus pour une alimentation 5 V mais intègrent un régulateur 3.3 V interne. D’autres nécessitent un 3.3 V direct. Une vérification de la sérigraphie et de la fiche technique du module évite un fonctionnement instable ou une surchauffe.

Gestion de la pile de sauvegarde sur module RTC

La pile de sauvegarde CR2032 ou CR1220 maintient l’oscillateur et la mémoire de l’heure en fonctionnement lorsque VCC disparaît. Sur un DS3231, la consommation en mode sauvegarde reste de l’ordre de quelques microampères, ce qui donne une autonomie de plusieurs années avec une CR2032 standard.

Une pile au lithium 3 V non rechargeable de type CR2032 correspond à la configuration la plus répandue. Les variantes LIR2032, rechargeables 3.6 V, demandent un circuit de charge adapté. Sur de nombreux modules classiques, la présence d’une LIR à la place d’une CR entraîne une surcharge et réduit fortement la durée de vie de la batterie.

« Une CR2032 de 210 mAh associée à un DS3231 et une consommation de l’ordre de 3.5 µA repose, sur le papier, sur une autonomie théorique proche de 6.85 ans en veille. »

Un mauvais contact dans le support de pile, une soudure imparfaite ou une oxydation provoquent des pertes aléatoires de l’heure. Lorsqu’un montage redémarre avec une date incohérente (souvent 01/01/2000), un contrôle du connecteur de pile s’impose avant d’incriminer le composant RTC lui‑même.

Code Arduino pour module RTC DS3231 : lecture, écriture et formatage

Une fois le module câblé, la base du code consiste à initialiser l’interface I2C, régler l’heure une fois, puis lire régulièrement date et heure pour les afficher ou les exploiter. Les librairies facilitent grandement cette intégration en masquant les registres internes du DS3231.

Parmi les options courantes, la librairie RTClib (Adafruit) se trouve souvent dans les exemples d’Arduino DS3231 code. Elle offre une syntaxe simple pour la gestion de l’heure, des dates, des formats 12/24 h et l’horodatage.

Exemple de code minimal pour DS3231 avec RTClib

Le listing ci‑dessous illustre la structure d’un programme de base qui règle l’horloge à la compilation, puis affiche l’heure actuelle dans le moniteur série :

#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  if (!rtc.begin()) {
    Serial.println("RTC non detecte");
    while (1);
  }

  if (rtc.lostPower()) {
    // Reglage initial de l'heure : date & heure de compilation
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now();

  Serial.print(now.day());
  Serial.print('/');
  Serial.print(now.month());
  Serial.print('/');
  Serial.print(now.year());
  Serial.print("  ");

  Serial.print(now.hour());
  Serial.print(':');
  Serial.print(now.minute());
  Serial.print(':');
  Serial.println(now.second());

  delay(1000);
}

La méthode rtc.lostPower() détecte une perte d’alimentation complète du RTC. Lorsqu’elle renvoie vrai, le microcontrôleur ajuste l’heure une seule fois. Une fois la pile et l’alimentation stables, cette étape devient inutile jusqu’à une réinitialisation matérielle sérieuse ou un changement de pile.

Astuce : lors de développements répétés, l’ajustement automatique à la compilation recalera l’horloge à chaque upload. Pour éviter ce comportement, on retire l’appel à rtc.adjust() après un premier réglage ou on le conditionne à une entrée utilisateur (bouton, commande série).

Gestion du format 24 h / 12 h et des jours de la semaine

Le DS3231 gère en interne les formats d’heure 12 h ou 24 h. RTClib fournit directement l’heure au format 24 h, ce qui simplifie les calculs et les comparaisons. Pour un affichage 12 h avec AM/PM, une conversion logicielle coté Arduino reste souvent plus lisible.

Pour les jours de la semaine, la classe DateTime propose des méthodes ou permet de calculer l’index du jour à partir de la date. Cette information devient utile dans un projet d’alarme hebdomadaire, par exemple pour activer un relais uniquement du lundi au vendredi.

Exemple de code Arduino pour module RTC DS1307

Le DS1307 partage la même adresse I2C (0x68) que le DS3231. De nombreuses librairies proposent une compatibilité croisée, ce qui réduit les modifications nécessaires lorsque l’on remplace un module par l’autre.

Un code DS1307 typique utilise également RTClib ou une librairie dédiée. L’accès à l’heure reste similaire, mais les fonctions avancées de température ou d’alarmes matérielles restent absentes.

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 rtc;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  if (!rtc.begin()) {
    Serial.println("DS1307 non detecte");
    while (1);
  }

  if (!rtc.isrunning()) {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now();

  Serial.print(now.timestamp(DateTime::TIMESTAMP_FULL));
  Serial.println();

  delay(1000);
}

La méthode rtc.isrunning() vérifie l’état de l’oscillateur du DS1307. Lorsqu’il n’est pas actif, l’appel à rtc.adjust() initialise l’heure et démarre le comptage. Une fois réglée, l’horloge continue de tourner tant que la pile de sauvegarde reste opérationnelle.

Pour un tutoriel plus focalisé sur ce circuit spécifique, un guide Arduino DS1307 code détaille habituellement la structure des registres et la configuration manuelle via le protocole I2C.

Fonctions avancées : alarmes, onde carrée et température avec DS3231

Le DS3231 offre plusieurs fonctions utiles pour automatiser des tâches sans solliciter en permanence le microcontrôleur. Les alarmes internes, la sortie d’onde carrée et le capteur de température intégré fournissent une base solide pour des scénarios temporels plus évolués.

Utiliser les alarmes RTC pour déclencher des actions

Le DS3231 intègre deux alarmes programmables. Chacune se paramètre pour réagir à différents schémas : correspondance exacte de seconde, minute, heure, jour, ou répétition quotidienne, hebdomadaire ou mensuelle. Une fois configurée, l’alarme active la broche SQW/INT qui peut être reliée à une entrée d’interruption d’Arduino.

Cette approche libère le microcontrôleur de la gestion d’une logique de timing complexe. Au lieu de vérifier l’heure à chaque boucle, Arduino attend simplement l’interruption en provenance du DS3231 et réagit instantanément à l’événement programmé.

Cas d’usage typique : activer un relais pour piloter un éclairage extérieur à heure fixe, lancer un enregistrement de données toutes les heures ou réveiller un système basse consommation uniquement lorsque l’alarme RTC se déclenche.

Sortie onde carrée 1 Hz à 32 kHz pour synchronisation

La broche SQW du DS3231 sait générer une onde carrée stable dont la fréquence se configure parmi 1 Hz, 4 kHz, 8 kHz et 32 kHz. Cette horloge de référence devient utile pour :

  • calibrer des temporisations internes sur d’autres circuits,
  • tester un compteur ou un timer externe,
  • obtenir un clignotement parfaitement régulier,
  • alimenter un système nécessitant une fréquence de base très stable.

Par rapport au quartz interne d’Arduino, l’onde du DS3231 reste beaucoup plus régulière sur la durée et moins sensible aux variations thermiques. La fréquence 1 Hz permet par exemple de gérer un affichage d’horloge analogique ou numérique extrêmement régulier.

Lecture de la température interne du DS3231

Le DS3231 mesure sa propre température avec une précision de l’ordre de ± 3 °C. La valeur se lit via l’interface I2C, souvent via une méthode simple de la librairie utilisée. Même si ce capteur ne remplace pas une sonde externe calibrée, il donne une indication thermique utile dans de nombreux montages.

Cette information offre plusieurs possibilités :

  • compensation logicielle de capteurs sensibles à la température,
  • détection de dérives thermiques dans un boîtier fermé,
  • veille sur l’environnement d’un système d’enregistrement de données,
  • ajout d’un relevé de température interne dans les logs.

« L’oscillateur du DS3231 se calibre automatiquement en fonction de la température mesurée. Cette régulation interne réduit la dérive temporelle sans aucune intervention logicielle côté Arduino. »

Stratégies d’alimentation et gestion d’énergie d’un module RTC

La fiabilité d’une horloge temps réel ne dépend pas uniquement du circuit intégré. La manière de l’alimenter joue un rôle direct sur la stabilité, la durée de vie de la pile et la robustesse globale du système.

ArduinoPiloter un relais 230 V avec Arduino en sécurité : 5 erreurs à éviter

Le DS3231 intègre une commutation automatique entre l’alimentation principale (VCC) et la pile de sauvegarde. Lorsque la tension sur VCC chute en dessous d’un seuil défini, le circuit bascule sur la pile sans interrompre le comptage de l’heure.

Consommation sur VCC vs pile de sauvegarde

En fonctionnement normal, DS3231 consomme typiquement :

  • environ 170 µA en repos sur VCC,
  • environ 300 µA pendant les échanges I2C fréquents,
  • jusqu’à 650 µA pendant une phase de compensation thermique active.

Sur pile de sauvegarde, l’oscillateur continue de tourner avec :

  • 3.5 µA environ en repos,
  • pointe jusqu’à 650 µA lors des cycles de régulation thermique.

Avec une CR2032 de 210 mAh, ces chiffres mènent à une autonomie d’environ 6.85 ans en usage purement veille. En pratique, les températures extrêmes et la qualité de la pile influencent ce chiffre, mais la réserve reste confortable pour un montage fixe.

Bonne pratique : dans un système alimenté sur batterie principale, le RTC reste en permanence sous tension. La consommation supplémentaire de quelques centaines de microampères reste modérée au regard des avantages fonctionnels liés à une horloge fiable.

Arduino, watchdog et RTC : combiner horloge et sommeil profond

Dans certains systèmes à très faible consommation, Arduino bascule régulièrement en mode sommeil profond (deep sleep) et se réveille périodiquement. Un module RTC externe joue alors le rôle de réveil en déclenchant une interruption sur la broche SQW/INT à une heure ou un intervalle défini.

Ce schéma de fonctionnement correspond à de nombreux capteurs autonomes, stations météo sur batterie, dispositifs LoRa ou enregistreurs environnementaux. Le couple « Arduino en sommeil + alarmes DS3231 » allonge significativement l’autonomie sans renoncer à une horloge stable.

Applications concrètes d’un module RTC Arduino

Une horloge temps réel ouvre un large éventail de projets dès qu’un enchaînement logique dépend d’une date précise, d’une heure, d’un jour de la semaine ou d’un calendrier annuel (gestion des années bissextiles, notamment avec le DS1307 jusqu’en 2100).

Quelques domaines tirent un avantage direct d’un module RTC DS1307 ou DS3231 :

  • Serveurs maison : enregistrement de logs, journalisation d’événements, synchronisation sur une horloge matérielle locale.
  • Robotique : planification de tâches récurrentes (tours de garde, cycles de nettoyage, activité diurne/nocturne).
  • Jeux vidéo et bornes interactives : modes jour/nuit, événements limités dans le temps, score horodaté.
  • GPS et navigation : maintien d’une heure fiable même sans signal, alignement sur les données satellites.
  • Enregistreurs de données (data loggers) : horodatage de mesures environnementales, industrielles ou domotiques.
  • Horloges et afficheurs : horloge murale, horloge à LED, horloge Nixie, horloge parlante.
  • Alarmes et domotique : scénarios d’éclairage, chauffage, irrigation, ouverture/fermeture de volets.

« L’association d’un Arduino, d’un DS3231 et d’une mémoire EEPROM intégrée 24C32 forme un noyau solide pour tout système nécessitant à la fois horodatage, stockage et déclenchement temporel. »

Sur des projets plus élaborés, un module RTC s’intègre souvent dans un écosystème comprenant afficheurs LCD/OLED, modules de communication (WiFi, LoRa, GSM), capteurs multiples et stockage sur carte SD. L’horloge offre alors un repère commun à tous les sous-systèmes.

Bonnes pratiques de développement et limites d’un module RTC

Une horloge temps réel fiable résulte autant du choix du composant que de la rigueur du développement logiciel. Certains réflexes évitent des comportements inattendus sur la durée, en particulier lorsque l’horloge devient critique pour le fonctionnement global.

Stratégie de mise à l’heure et recalage périodique

La configuration initiale de l’heure s’effectue le plus souvent depuis le PC lors de la première utilisation. Une fois la pile installée et le RTC ajusté, la dérive dépend du modèle choisi (DS1307 ou DS3231) et de l’environnement thermique.

Pour des applications exigeantes (enregistrement scientifique, synchronisation distribuée), plusieurs stratégies se complètent :

  • recalage manuel périodique via le port série ou une interface utilisateur,
  • synchronisation ponctuelle sur un serveur NTP via un module réseau,
  • alignement de l’horloge RTC sur l’heure GPS lorsque le signal est disponible.

Limite à garder en tête : même un DS3231 finit par accumuler quelques secondes de dérive sur plusieurs années. Pour des besoins de synchronisation très stricts, un recalage automatique ou manuel reste nécessaire.

Gestion des erreurs et robustesse logicielle

Les données disponibles ne mentionnent pas de statistiques quantitatives de défaillance ou d’erreur rapportée pour les DS1307/DS3231. En pratique, la plupart des problèmes rencontrés sur un projet Arduino proviennent plutôt :

  • d’un câblage SDA/SCL incorrect,
  • d’une alimentation instable,
  • d’une pile usée ou mal insérée,
  • d’une librairie mal initialisée ou d’un conflit d’adresses I2C.

Une approche robuste inclut systématiquement des vérifications :

  • test du retour de rtc.begin() et affichage d’un message clair en cas d’échec,
  • contrôle de lostPower() ou isrunning() au démarrage,
  • affichage de la date complète lors des tests pour repérer rapidement une valeur incohérente (année par défaut, jour improbable).

Avec cette structure logicielle rigoureuse et un câblage respectant les niveaux de tension, un module RTC DS1307 ou DS3231 assure une horloge stable pour toute la durée de vie du projet Arduino, qu’il s’agisse d’un prototype ponctuel ou d’une installation pérenne.

Donnez votre avis

Soyez le 1er à noter cet article


Partagez cet article maintenant !


Ça ne règle pas votre cas ?

Décrivez la panne sur le forum, avec une photo si vous pouvez : les membres qui ont eu la même répondent, et le sujet reste pour les suivants.

Avatar photoAvatar photoAvatar photoAvatar photoAvatar photoRejoindre les 54 membres — gratuit, 44 pannes résolues

Dans le même tiroir

La lettre du club

Une lettre par mois, accrochée au panneau

Les sujets du forum résolus dans le mois, un guide, un chiffre qu’on peut vérifier chez soi. Rien d’autre, jamais plus souvent — et on se désabonne d’un clic.

Ce qu’il y a dedans

Votre adresse

Une lettre par mois. Désabonnement en un clic.