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 €

Arduino DS1307 : branchement et code du module RTC

Arduinomis à jour le 2 mars 2026

Le module RTC Arduino DS1307 apporte une horloge temps réel matérielle à vos projets, même après coupure de courant. Entre câblage I2C, gestion de la pile CR2032 et choix de la bonne bibliothèque, chaque détail influence la précision et la fiabilité de la mesure du temps.

En comprenant exactement comment brancher le DS1307, configurer son adresse I2C, manipuler ses registres et optimiser le code, vous gagnez un contrôle très fin sur la date, l’heure et les alarmes. Les possibilités pour vos dataloggers, systèmes domotiques ou projets de contrôle d’accès prennent rapidement une autre dimension.

Élément clé Description utile Intérêt pour le projet Arduino
Précision du DS1307 Environ ±2 minutes par mois selon la qualité du quartz. Important si ton projet nécessite une mesure temporelle fiable.
Batterie de sauvegarde Fonctionne avec une pile CR2032, permet de conserver l’heure même hors tension. Indispensable pour éviter de reprogrammer l’heure après chaque redémarrage.
Protocole I2C Adresse par défaut : 0x68. Permet une connexion simple avec Arduino via SDA/SCL.
Alternative au DS1307 DS3231 : beaucoup plus précis (±1 à 2 minutes par an). À privilégier pour un suivi du temps critique ou longue durée.
Applications typiques Horloges, data-logging, automatisations quotidiennes. Donne une horloge interne robuste à tes projets.

Principe de fonctionnement du module RTC Arduino DS1307

Le DS1307 est un circuit d’horloge temps réel (RTC) qui garde l’heure et la date en permanence, même lorsque la carte Arduino est éteinte. Il s’appuie sur un oscillateur à quartz externe et une pile de sauvegarde (CR2032 ou CR1220 en 3 V) pour continuer à compter le temps hors alimentation principale.

ArduinoArduino et domotique : automatiser sa maison pour pas cher

Le module gère les secondes, minutes, heures, jour, date, mois, année et jour de semaine. Il fonctionne en format 12 h ou 24 h selon la configuration des registres. La communication avec Arduino utilise le bus I2C bidirectionnel, ce qui limite le câblage à deux lignes principales : SDA et SCL.

Un autre avantage pratique réside dans la présence d’une sortie SQW (Square Wave). Cette broche fournit un signal carré programmable (par exemple 1 Hz) utile pour synchroniser des mesures, générer des interruptions ou vérifier la dérive temporelle. Le DS1307 intègre aussi une petite mémoire RAM de 56 octets, sauvegardée par la batterie, pour stocker quelques paramètres personnalisés.

« Le DS1307 assure une précision typique de ±20 ppm entre 0 et 40°C, soit environ 2 secondes de dérive par jour. Une calibration logicielle ou une référence externe améliore sensiblement ce comportement dans un montage soigné. »

Caractéristiques techniques détaillées du DS1307

Pour choisir correctement un module RTC et écrire un code robuste, il convient de maîtriser les spécifications techniques du DS1307. Ces valeurs orientent le schéma électrique, la gestion énergétique et la structure logicielle.

Le tableau ci‑dessous récapitule les paramètres clés du DS1307 et leur impact pratique dans un projet Arduino.

Caractéristique Valeur (DS1307) Impact dans un projet Arduino
Alimentation principale 5 V DC (4,5 à 5,5 V) Connexion directe sur le 5 V de l’Arduino Uno ou Mega.
Tension logique Compatible 3,3 V et 5 V Interface possible avec des cartes 3,3 V via conversion ou module adapté.
Consommation normale < 1,5 mA Impact limité sur la consommation globale, même en usage continu.
Consommation sur batterie < 500 nA (oscillateur actif) Autonomie d’environ un an sur une pile CR2032 en bon état.
Précision ±20 ppm (0 à 40°C) Dérive d’environ 2 s/jour, à compenser pour des mesures longues durées.
Calendrier Jusqu’en 2100, années bissextiles Gestion automatique des jours du mois et des années bissextiles.
Mémoire RAM 56 octets sauvegardés par batterie Stockage de petits paramètres (config, état, index) persistant hors secteur.
Mémoire EEPROM externe 4 Ko (selon module) Selon les modules, ajout d’une EEPROM I2C intégrée sur la même carte.
Adresse I2C 0x68 Adresse fixe, simplifie la configuration sur le bus I2C.
Signal de sortie Sortie 1 Hz programmable (SQW) Horloge de référence ou interruption régulière pour Arduino.
Format horaire 12 h ou 24 h Affichage adapté aux préférences utilisateurs ou aux contraintes d’interface.

Gestion du calendrier et format BCD

Le DS1307 stocke tous les champs de temps en BCD (Binary Coded Decimal). Chaque chiffre décimal (0–9) occupe un quartet de bits. Par exemple, 23 secondes se codent en 0x23. Les bibliothèques Arduino gèrent cette conversion de manière transparente, mais un code bas niveau doit manipuler cette représentation avec précision.

Le calendrier prend en charge les années bissextiles et avance correctement jusqu’en 2100. Les champs année se codent sur deux chiffres (00–99). Le logiciel d’application doit donc interpréter la plage (par exemple 2000–2099) en cohérence avec l’usage du projet. Les champs jour de semaine suivent une indexation 1–7 définie par le programmeur.

Différences entre DS1307, DS3231, Chronodot et MCP7940N

De nombreux développeurs hésitent entre plusieurs modules RTC. Le DS1307 reste courant, mais d’autres références offrent des performances ou des prix différents. Une comparaison claire permet de sélectionner la bonne horloge pour chaque scénario.

RTC Précision typique Alimentation Points forts Usage conseillé
DS1307 ±20 ppm (~10 min/an) 5 V (compatible 3,3 V avec adaptation) Très répandu, adresse I2C 0x68, nombreux exemples Arduino. Projets généraux, horloge simple, datalogging non critique.
DS3231 ≈ ±2 ppm (~1 min/an) 3 V Oscillateur TCXO intégré, dérive faible, même interface I2C que DS1307. Applications nécessitant une dérive limitée sur plusieurs mois.
Chronodot Haute précision (basé sur DS3231) 3 V Composants triés, stabilité thermique renforcée. Horloges de référence, installations extérieures, projets exigeants.
MCP7940N Comparable au DS1307 3 V ou 5 V selon carte Coût réduit, remplaçant fonctionnel, gestion batterie de secours. Projets en série, réduction du coût matériel.

Le DS3231, intégré dans de nombreux modules compatibles, partage l’adresse I2C 0x68 et accepte souvent le même code Arduino initialement prévu pour DS1307. Cette compatibilité facilite les migrations vers une horloge plus stable sans réécriture profonde de la logique logicielle.

« Pour un enregistreur de données autonome qui fonctionne plusieurs mois sans synchronisation réseau, un DS3231 ou un Chronodot limite la dérive temporelle par rapport au DS1307 tout en restant compatible avec l’écosystème Arduino. »

Conseil pratique : lors d’un prototype, commencer avec un DS1307 reste confortable grâce aux exemples nombreux. Pour un produit final, envisager un passage vers un module basé sur DS3231 réduit la dérive annuelle et évite une compensation logicielle trop lourde.

Branchement du module DS1307 sur Arduino : schéma et câblage

Le DS1307 utilise le bus I2C, ce qui réduit le nombre de fils à connecter. Une fois les broches SDA et SCL reliées, plusieurs périphériques I2C peuvent partager les mêmes lignes, chacun avec sa propre adresse.

Brochage standard du DS1307 sur Arduino Uno / Nano

Sur un Arduino Uno ou Nano, l’I2C se trouve sur les broches analogiques A4 (SDA) et A5 (SCL), ainsi que sur les broches marquées SDA et SCL en haut à gauche sur certains modèles récents. Le branchement basique se présente ainsi :

Broche DS1307 Connexion Arduino Uno / Nano Fonction
SDA A4 ou SDA Ligne de données I2C (Data).
SCL A5 ou SCL Ligne d’horloge I2C (Clock).
VCC 5 V Alimentation principale du module.
GND GND Référence commune de masse.
SQW / OUT Entrée numérique au choix Sortie onde carrée ou signal 1 Hz, selon configuration.

La pile CR2032 ou CR1220 se place dans le support prévu sur la carte. Elle alimente le DS1307 lorsque le 5 V disparaît. Sans cette pile, l’horloge perd l’heure à chaque coupure d’alimentation et repart à zéro au prochain démarrage.

Point de vigilance : un module sans pile ou avec une pile déchargée donne une heure incorrecte à chaque redémarrage. Toujours vérifier la tension de la pile de sauvegarde avant de conclure à une panne d’horloge.

Branchement sur Arduino Mega, Leonardo et cartes 3,3 V

Sur les autres cartes, la position des broches SDA et SCL diffère. Il reste préférable de se baser sur les marquages SDA et SCL présents sur la carte plutôt que sur les numéros de broches.

  • Arduino Mega 2560 : SDA sur D20, SCL sur D21 (et duplicata sur le connecteur 2×3).
  • Arduino Leonardo / Micro : SDA et SCL sur les broches dédiées et sur le connecteur ICSP.
  • Cartes 3,3 V (ex. ESP8266, ESP32) : souvent I2C logiciel sur des broches configurables, vérifier la documentation et ajouter un convertisseur de niveau si le module DS1307 fonctionne exclusivement en 5 V.

Pour un rappel détaillé du protocole, des lignes SDA/SCL et des résistances de tirage, le tutoriel dédié sur le bus I2C Arduino SCL SDA I2C fournit un complément utile.

Résistances de tirage (pull‑up) et bus I2C stable

Le bus I2C nécessite des résistances de tirage reliant SDA et SCL à la tension d’alimentation. De nombreux modules DS1307 possèdent déjà ces résistances intégrées. En ajouter d’autres en parallèle diminue la résistance équivalente et dérange parfois la communication.

Une valeur typique se situe autour de 4,7 kΩ. Pour un bus court, cette valeur fonctionne correctement dans la majorité des cas. En présence de plusieurs périphériques I2C ou d’un câble long, un ajustement vers 3,3 kΩ ou 10 kΩ se discute selon les capacités et la vitesse de transmission.

« Une erreur fréquente consiste à relier Arduino et le module DS1307 sans masse commune. Le bus I2C nécessite impérativement une référence de masse partagée entre l’horloge et le microcontrôleur. »

Adresse I2C 0x68 et communication avec Arduino

Le DS1307 répond à l’adresse I2C 0x68. Cette adresse reste fixe et ne se modifie pas via des cavaliers. En présence d’un DS3231 ou d’un module mixte (DS1307 + EEPROM), plusieurs composants I2C partagent parfois une adresse proche sur la même carte, ce qui demande une attention particulière lors du scan du bus.

La bibliothèque Wire.h pilote l’échange de trames I2C côté Arduino. L’API standard utilise Wire.beginTransmission(0x68) pour initier une communication avec le DS1307, puis envoie ou lit les octets souhaités. Les bibliothèques haut niveau RTC masquent souvent ce détail.

Méthode de diagnostic : en cas d’horloge silencieuse, lancer un sketch de scan I2C qui parcourt toutes les adresses disponibles et affiche celles qui répondent. Si 0x68 n’apparaît pas, vérifier les branchements SDA/SCL, la masse, le 5 V et les résistances de tirage.

Code Arduino pour le module RTC DS1307 : bases et bonnes pratiques

Plusieurs bibliothèques facilitent l’accès au DS1307. Les plus courantes offrent un ensemble de fonctions pour régler l’heure, lire la date, gérer le format 12/24 h et manipuler la RAM interne. Le choix de la bibliothèque influence la clarté du code et la compatibilité avec d’autres modules.

Structure générale d’un sketch DS1307

Un code type pour DS1307 suit généralement la structure suivante :

  • Inclure Wire.h et la bibliothèque RTC (par exemple RTClib).
  • Initialiser le bus I2C via Wire.begin().
  • Vérifier la présence de l’horloge à l’adresse 0x68.
  • Régler l’heure si nécessaire (au premier upload ou via un bouton de configuration).
  • Dans loop(), lire régulièrement la date et l’heure et les afficher sur le moniteur série, un LCD ou une interface web.

Certains exemples utilisent un réglage automatique à partir de la date de compilation du sketch (__DATE__ / __TIME__). Ce procédé reste commode pour un prototype, mais ne remplace pas un réglage spécifique via une interface utilisateur dans une application finale.

Gestion des erreurs de compilation courantes

Plusieurs difficultés réapparaissent lorsqu’un débutant connecte un DS1307 à Arduino. Les erreurs ci‑dessous reviennent souvent lors de la configuration du code :

  • « time not declared » : une variable time utilisée sans déclaration ou en conflit avec une structure de la bibliothèque. Déclarer correctement les objets de type DateTime ou renommer les variables ambiguës.
  • Bibliothèque non trouvée : la bibliothèque RTC n’apparaît pas dans l’IDE Arduino. Installer ou réinstaller la bibliothèque via le gestionnaire de bibliothèques ou en copiant le dossier dans libraries.
  • Affichage bloqué sur 00 / Sam 2000 : le sketch adresse un DS3231 avec un code DS1307 ou l’inverse. Vérifier que la bonne classe (DS1307 ou DS3231) est instanciée dans le code et que le module physique correspond.

« Un module DS1307 déclaré en DS3231 dans la bibliothèque renvoie souvent une date absurde, typiquement samedi 1er janvier 2000. Le simple fait de corriger le type d’objet dans le code résout aussitôt le problème. »

Branchement avancé : sortie SQW, interruptions et LCD

Au‑delà de la simple récupération de l’heure, le DS1307 fournit plusieurs possibilités avancées. La broche SQW/OUT, par exemple, émet une onde carrée à 1 Hz ou une autre fréquence configurable. Reliée à une entrée numérique d’Arduino, cette sortie pilote une interruption externe pour cadencer des tâches.

Ce mécanisme offre un déclenchement régulier indépendant du millis() interne d’Arduino. Une horloge externe devient alors la référence de timing principale, ce qui favorise la stabilité à long terme lorsque le microcontrôleur exécute d’autres tâches intensives.

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

En parallèle, de nombreux montages associent un DS1307 et un écran LCD I2C. Les deux modules partagent les broches SDA et SCL, chacun avec son adresse distincte. On rencontre parfois un conflit de bibliothèques entre un écran OLED (par exemple sur ESP8266) et le DS1307. Dans ce cas, utiliser une bibliothèque telle qu’Adafruit_SSD1306 ou manipuler directement Wire résout souvent la situation.

Astuce d’intégration : lorsque plusieurs périphériques I2C partagent le même bus, tester séparément chaque composant avec un sketch minimal, puis intégrer progressivement les bibliothèques dans le projet complet. Ce pas à pas aide à isoler un conflit éventuel.

Projets pratiques avec DS1307 : datalogging, domotique, accès et alarmes

Une fois le câblage et le code mis en place, le DS1307 s’insère naturellement dans différents projets Arduino. Les exemples ci‑dessous montrent comment exploiter l’horloge dans des scénarios concrets.

Datalogging avec horodatage précis

Un enregistreur de données environnementales (température, humidité, pression, luminosité) génère beaucoup plus d’informations utiles lorsque chaque mesure inclut un horodatage. Le DS1307 fournit une date et une heure cohérentes à chaque enregistrement sur carte SD, EEPROM ou serveur distant.

Pour un datalogger autonome, la dérive de quelques minutes par an reste souvent acceptable, surtout si une resynchronisation manuelle intervient périodiquement. Dans le cas contraire, un DS3231 ou un module de type Chronodot offre une stabilité accrue pour les séries temporelles étendues.

Domotique et programmation horaire

En domotique, le DS1307 pilote des scénarios basés sur l’heure réelle :

  • Allumage progressif d’un éclairage au lever du soleil approximé.
  • Activation d’un chauffage d’appoint à des créneaux définis.
  • Simulation de présence par séquences lumineuses étalées dans la soirée.

En comparant l’heure courante issue du DS1307 à des créneaux stockés en mémoire, le programme décide de déclencher ou non une sortie. La RAM sauvegardée par batterie offre un emplacement pratique pour conserver ces créneaux même en cas de coupure secteur.

Contrôle d’accès, pointeuse et mesure de durée

Le DS1307 s’intègre aussi dans des systèmes de contrôle d’accès ou de pointage. L’horloge consigne l’instant d’un badge RFID, d’une ouverture de porte ou d’un appui sur un bouton. L’analyse ultérieure des journaux mettra en relation ces instants avec les utilisateurs identifiés.

La fonction chrono de l’horloge, combinée aux capacités de stockage d’un microcontrôleur ou d’une carte SD, structure un historique fiable des événements. Dans certains projets, ce journal répond à des contraintes réglementaires ou contractuelles, d’où l’intérêt d’une dérive maîtrisée ou compensée par synchronisation périodique.

Dérive de l’horloge DS1307 : causes, effets et corrections

La dérive temporelle du DS1307 provient principalement de la stabilité du quartz et des variations de température. Une dérive typique d’environ 2 secondes par jour, soit une dizaine de minutes par an, convient à de nombreux usages. Dans les projets exigeants, plusieurs stratégies améliorent la situation.

Sources classiques de dérive

Les facteurs suivants influencent la précision obtenue :

  • Qualité du quartz utilisé sur le module.
  • Température environnementale (écarts par rapport à 25 °C).
  • Positionnement mécanique du quartz (vibrations, dilatations).
  • Éventuelles tolérances des composants passifs voisins.

Contrairement au DS3231 équipé d’un oscillateur TCXO compensé en température, le DS1307 ne réalise pas d’auto‑correction interne. Une stratégie logicielle compense toutefois partiellement cette dérive.

Stratégies de compensation logicielle

Plusieurs approches complètent les capacités matérielles du DS1307 :

  • Réglage manuel périodique de l’horloge via une interface utilisateur (bouton, écran, port série).
  • Synchronisation avec une source externe (NTP, GPS, module radio DCF77) lorsque disponible.
  • Mesure expérimentale de la dérive moyenne de l’horloge et application d’une correction logicielle (par exemple ajustement des minutes tous les X jours).

Ces méthodes nécessitent un suivi, mais suffisent largement pour des applications non critiques, comme une horloge murale, une station météo domestique ou un simple datalogger amateur.

Limite d’utilisation : pour un système qui doit respecter une précision stricte sur plusieurs années sans intervention (compteurs officiels, enregistreurs réglementés), un DS1307 seul ne fournit pas la stabilité requise. Un module plus stable ou une référence externe devient alors nécessaire.

Erreurs courantes avec le DS1307 et solutions concrètes

Certains symptômes reviennent dans les projets Arduino utilisant un DS1307. Une analyse systématique permet de les corriger sans perdre trop de temps.

Horloge qui ne s’incrémente pas

Une horloge figée sur la même heure indique souvent un problème de registre de contrôle. Un bit erroné dans le registre CONTROL désactive la mise à jour interne du temps. L’écriture correcte de ce registre via Wire ou via une fonction fournie par la bibliothèque rétablit la progression normale de l’horloge.

Heure et date incohérentes au démarrage

Un affichage fixé sur samedi 1er janvier 2000 signale généralement :

  • Un module mal identifié (code prévu pour DS3231 utilisé sur DS1307, ou l’inverse).
  • Une horloge jamais réglée et sans pile de sauvegarde fonctionnelle.

Dans ce cas, vérifier le type d’objet instancié dans la bibliothèque, puis lancer une procédure de réglage de l’heure une fois la pile remplacée ou installée.

Problèmes de communication I2C ou d’affichage

Des difficultés de communication se manifestent parfois par des valeurs aléatoires ou des erreurs d’affichage sur LCD :

  • Conflits de bibliothèques : par exemple entre une bibliothèque OLED et une bibliothèque RTC. Tester une alternative comme Adafruit_SSD1306 ou appeler directement Wire pour isoler la panne.
  • Mauvais câblage du LCD : un écran I2C mal câblé masque la présence du DS1307 sur le bus ou inversement. Vérifier le schéma de câblage, la masse commune et les adresses.
  • Problème de conversion de niveau : sur une carte à 3,3 V, relier un DS1307 5 V sans convertisseur compromet la fiabilité des signaux.

« Avant de modifier le code, s’assurer systématiquement que les liaisons SDA, SCL, VCC et GND correspondent exactement au schéma prévu. Ne jamais sous‑estimer l’impact d’un seul fil mal positionné sur un bus I2C. »

Aller plus loin : travail direct sur registres, mémoire RAM et projets complexes

Au‑delà de l’usage via une bibliothèque prête à l’emploi, le DS1307 s’ouvre aussi au travail bas niveau. Cette maîtrise approfondie donne un contrôle total sur chaque bit de configuration et chaque octet de la RAM sauvegardée.

Manipulation directe des registres I2C

Le DS1307 expose ses données de temps et de configuration sous forme de registres accessibles par I2C. En adressant explicitement chaque registre avec Wire.beginTransmission(0x68), puis en écrivant l’index de registre et les données BCD, le code ajuste manuellement :

  • Le format 12/24 h.
  • L’activation ou non de la sortie SQW.
  • La fréquence du signal d’onde carrée.
  • Les champs individuels de date et d’heure.

Cette approche demande une rigueur dans le calcul et la conversion BCD, mais elle offre une grande flexibilité lorsqu’une bibliothèque ne prévoit pas certaines fonctionnalités avancées.

Utilisation de la RAM sauvegardée par batterie

Les 56 octets de RAM interne restent souvent sous‑exploitée. Pourtant, cette mémoire sauvegardée s’avère utile pour :

  • Enregistrer des drapeaux d’état (configuration appliquée, première mise sous tension, mode actif).
  • Mémoriser quelques paramètres systèmes (seuils de température, identifiant de nœud, options utilisateur).
  • Stocker un index ou un compteur qui doit survivre aux redémarrages.

Dans un projet complexe, cette RAM complète l’EEPROM interne d’Arduino ou l’EEPROM externe intégrée à certains modules DS1307. La combinaison de ces mémoires offre un espace de stockage segmenté pour les configurations, les états temporaires et les statistiques.

Idée de projet avancé : associer un DS1307, une EEPROM I2C et un bus I2C partagé avec d’autres capteurs permet d’assembler un module temps + stockage autonome. Ce bloc gère l’horodatage, le tampon de données et les paramètres, auquel un microcontrôleur vient simplement se connecter.

Ressources complémentaires pour les projets RTC Arduino

Pour étendre un projet Arduino autour du DS1307, plusieurs pistes de travail restent pertinentes :

  • Comparer en détail la dérive et l’usage des registres entre DS1307 et DS3231 via un code commun, inspiré des exemples sur la page Arduino DS3231 code.
  • Étudier les différences de brochage et de timing sur le bus I2C en examinant des cas concrets dans la ressource Arduino SCL SDA I2C.
  • Explorer d’autres modules RTC documentés dans le guide Arduino module RTC, afin de sélectionner la référence la plus adaptée à chaque besoin.

En combinant ces informations avec une compréhension précise du câblage, de la gestion de la pile et des subtilités logicielles, le DS1307 s’intègre de manière fiable dans des montages Arduino variés, qu’il s’agisse d’une horloge simple, d’un système domotique ou d’un logger de données évolué.

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

Scène réaliste d’un établi d’électronique avec un Arduino et un module MAX7219 affichant une matrice LED rouge, dans un atelier authentique.
Arduino

Arduino MAX7219 : affichage LED matriciel

L’afficheur matriciel LED piloté par MAX7219 et Arduino ouvre la porte à des projets lumineux très variés : texte défilant, animations,…

Portrait de Inès DameronInès Dameron · 21 Fév 2026
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.