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 cherLe 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. »

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.

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.
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.het la bibliothèque RTC (par exempleRTClib). - 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
timeutilisée sans déclaration ou en conflit avec une structure de la bibliothèque. Déclarer correctement les objets de typeDateTimeou 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.
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.
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.
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_SSD1306ou appeler directementWirepour 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.
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é.






