Le DS3231 est une horloge temps réel (RTC) qui compte les secondes, les minutes, les heures, la date et l’année, puis les rend sur le bus I2C sous forme de valeurs déjà décodées : la carte qui l’interroge n’a pas à gérer de calendrier ni de mois de longueurs différentes. Sa particularité est le soin apporté à la base de temps : l’oscillateur à quartz est enfermé dans le boîtier du circuit avec un condensateur compensé en température, ce qui limite la dérive à environ une minute par an, là où un simple quartz non compensé en perd plusieurs par mois.
Sur le module de la photo, le circuit est accompagné de tout ce qui rend la mise en œuvre immédiate : un support de pile bouton qui maintient l’heure lorsque l’alimentation principale est coupée, les résistances de tirage du bus I2C, une EEPROM AT24C32 pour stocker des données sur le même bus, et deux rangées de broches sérigraphiées. La pile de sauvegarde n’est pas fournie : le module fonctionne sans, mais il repart de la date du programme à chaque mise sous tension.
Caractéristiques techniques
| Circuit | DS3231, horloge temps réel à oscillateur compensé en température (TCXO) |
|---|---|
| Tension d’alimentation | 3,3 V à 5,5 V, entrées compatibles logique 3,3 V et 5 V |
| Interface | I2C, adresse fixe 0x68 (non modifiable) |
| Précision | ± 2 ppm de 0 °C à + 40 °C, soit environ une minute par an ; ± 3,5 ppm sur toute la plage industrielle |
| Mémoire associée | EEPROM AT24C32 de 32 kbit (4 Ko), adresse 0x57 |
| Alarmes | deux alarmes programmables, la première à la seconde près, la seconde à la minute près |
| Sorties | SQW : onde carrée ou signal d’interruption, de 1 Hz à 8,192 kHz ; 32K : sortie permanente à 32,768 kHz ; deux sorties à drain ouvert |
| Capteur de température | intégré, résolution de 0,25 °C, précision de l’ordre de ± 3 °C, lu sur le bus |
| Sauvegarde | support pour pile bouton de 20 mm, pile non fournie |
| Broches | connecteur de 6 broches et connecteur de 4 broches, au pas de 2,54 mm |
| Dimensions | environ 38 mm x 22 mm, hauteur d’environ 14 mm avec le support de pile |
Brochage
Chaque broche est sérigraphiée sur la carte, à côté de son picot : se fier à ces inscriptions plutôt qu’à la position, car les deux rangées ne sont pas orientées de la même façon sur tous les lots.
- VCC : alimentation, à relier au 5 V ou au 3,3 V de la carte ;
- GND : masse, commune avec celle de la carte ;
- SDA : ligne de données I2C, à relier à la broche SDA de la carte (A4 sur un Uno, D2 sur un Nano) ;
- SCL : ligne d’horloge I2C, à relier à la broche SCL de la carte (A5 sur un Uno, D3 sur un Nano) ;
- SQW : sortie d’onde carrée ou d’interruption, à utiliser seulement si le programme attend un signal régulier ou une alarme ;
- 32K : sortie permanente à 32,768 kHz, rarement utilisée en dehors d’un étalonnage.
Le connecteur de 4 broches reprend SDA, SCL, VCC et GND : il permet de chaîner un autre module I2C derrière l’horloge au lieu de cumuler les câbles sur les mêmes broches de la carte.
Le port I2C et les adresses
Le DS3231 occupe l’adresse 0x68, qui lui est imposée par le fabricant. Un afficheur LCD en I2C se place en général à 0x27 ou 0x3F, et l’EEPROM du module à 0x57 : ces trois périphériques cohabitent sans difficulté sur les deux mêmes fils. La seule adresse réellement conflictuelle est celle de l’accéléromètre MPU-6050, qui répond lui aussi à 0x68 et ne peut donc pas partager le bus sans qu’un des deux modules soit modifié.
Les résistances de tirage nécessaires au bus sont déjà soudées sur la carte (repérées 472, soit 4,7 kΩ). Sur un montage qui cumule plusieurs cartes déjà tirées, le bus devient trop raide et les échanges deviennent instables : c’est un cas où l’on retire les tirage d’un seul module.
La pile de sauvegarde : LIR2032 ou CR2032
Sans pile, l’horloge s’arrête avec l’alimentation et consomme le courant de veille de la carte. Avec une pile bien choisie, elle continue de compter pendant des mois et le montage retrouve la bonne date à chaque rallumage, sans rien resynchroniser.
Le support accepte une pile bouton de 20 mm, mais les deux types ne sont pas interchangeables :
- LIR2032, rechargeable : elle est faite pour ce support et se recharge tant que le montage est alimenté ;
- CR2032, non rechargeable et bien plus courante : elle convient aussi, mais à une condition décrite ci-dessous.
Le circuit de charge, à neutraliser avec une pile non rechargeable
Le module porte une petite branche composée d’une diode et d’une résistance, placée entre l’alimentation et le support de pile : c’est un circuit de charge prévu pour une LIR2032. Alimenté en 5 V, il fait circuler un courant dans la pile ; sur une CR2032 non rechargeable, ce courant la dégrade et peut aller jusqu’à la faire fuir. Deux solutions simples : retirer la résistance de 200 Ω, retirer la diode, ou couper la piste qui les relie, ce qui n’affecte en rien la tenue de l’heure. Alimenté en 3,3 V, ce circuit reste inactif et la CR2032 n’est pas sollicitée.
Applications
- horodater chaque relevé d’un enregistreur de température, d’humidité ou de tension ;
- horloge ou réveil autonome, à afficheur LCD ou à afficheur sept segments ;
- programmateur d’éclairage, d’arrosage ou de chauffage à heures fixes ;
- déclenchement échelonné de plusieurs appareils, grâce aux deux alarmes ;
- réveil périodique d’un montage sur batterie, la sortie à 1 Hz servant de signal d’interruption ;
- gestion de tickets, de durées ou de sessions dans un projet enregistré sur carte mémoire.
Mini-projet : horloge sur afficheur LCD
L’heure et la date sont affichées sur deux lignes et se rafraîchissent chaque seconde. C’est le montage qui sert de base à tout projet horodaté : une fois l’affichage juste, les mêmes valeurs alimentent un relevé sur carte mémoire ou une commande d’appareil.
Matériel nécessaire
- une carte Arduino Uno R3 et son câble USB ;
- le module DS3231 ;
- un afficheur LCD 16×02 en I2C ;
- une plaque d’essai de 830 points ;
- quatre câbles de prototypage mâle-mâle ;
- une pile bouton, si l’on veut que l’heure survive à la coupure.
Câblage
- VCC du DS3231 vers la sortie 5 V de la carte, GND vers une masse ;
- SDA du DS3231 vers la broche A4, SCL vers la broche A5 ;
- VCC de l’afficheur vers la sortie 5 V, GND vers une masse ;
- SDA de l’afficheur vers A4, SCL vers A5 : les deux modules partagent les mêmes deux fils ;
- SQW et 32K laissées libres pour ce montage.
Programme
/*
* Horloge temps reel DS3231 et afficheur LCD 16x02 en I2C
* Composants, brochage et fiche complete : www.marocproduits.com
* Bibliotheques requises : RTClib (Adafruit) et LiquidCrystal I2C
*/
#include "Wire.h"
#include "RTClib.h"
#include "LiquidCrystal_I2C.h"
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
char ligne[17];
void setup() {
Wire.begin();
lcd.init();
lcd.backlight();
/* Premiere mise en service, ou pile absente : on part de la date de compilation. */
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime maintenant = rtc.now();
sprintf(ligne, "%02d:%02d:%02d", maintenant.hour(), maintenant.minute(), maintenant.second());
lcd.setCursor(0, 0);
lcd.print(ligne);
sprintf(ligne, "%02d/%02d/%04d", maintenant.day(), maintenant.month(), maintenant.year());
lcd.setCursor(0, 1);
lcd.print(ligne);
delay(1000);
}Mise en route
Installer les deux bibliothèques depuis le gestionnaire de bibliothèques de l’IDE Arduino, téléverser, puis laisser la carte branchée une nuit si l’on utilise une pile rechargeable : elle se charge pendant ce temps. La fonction qui compare la date de compilation s’exécute une seule fois, au tout premier démarrage. Pour affiner l’heure, le plus simple est de régler une seconde avant l’heure exacte et de téléverser : le décalage du téléversement est ainsi absorbé.
Variante sans afficheur : les mêmes appels se remplacent par un envoi sur le moniteur série, ou par l’envoi vers un serveur dans un projet connecté.
Ce que l’on doit observer
Les secondes défilent, et l’heure reste juste après avoir débranché puis rebranché la carte si une pile est en place. Si l’écran reste vide, chercher d’abord l’adresse de l’afficheur : la bibliothèque demande 0x27, mais certains modèles répondent à 0x3F. Si l’écran affiche la date de compilation à chaque démarrage, c’est que la pile est absente ou déchargée.
Questions fréquentes
La pile est-elle fournie ?
Non. Le module est livré sans pile : il fonctionne immédiatement, mais repart de la date inscrite dans le programme à chaque coupure d’alimentation. Pour conserver l’heure, prévoir une pile bouton de 20 mm, rechargeable ou non, en tenant compte du circuit de charge décrit plus haut.
Quelle différence avec le DS1307 ?
Le DS1307 est un circuit plus ancien et moins cher, dont l’oscillateur externe n’est pas compensé en température : sa dérive se compte en minutes par mois et varie avec la saison, ce qui oblige à le remettre à l’heure régulièrement. Le DS3231 intègre la compensation et sonde sa propre température ; il tient l’année sans correction. Pour un réveil d’agrément, l’ancien suffit ; dès qu’une mesure est horodatée, l’écart se justifie.
Peut-on l’alimenter en 5 V sans risque ?
Oui, la plage va de 3,3 V à 5,5 V et les entrées du circuit tolèrent les deux niveaux. C’est le cas du montage ci-dessus, sur un Uno. Avec une carte en logique 3,3 V, l’alimentation se prend sur la sortie 3,3 V et le bus reste au même niveau, sans adaptation.
Comment remettre l’horloge à l’heure sur un montage déjà en service ?
Sans retirer la carte de son boîtier, deux méthodes : un court programme qui appelle la fonction de réglage avec la date courante sur le moniteur série, ou, sur un montage relié au réseau, une synchronisation sur une référence de temps puis un arrêt de la synchronisation, l’horloge gardant ensuite sa propre base. La pile n’a pas besoin d’être retirée pour régler l’heure.
Le capteur de température intégré peut-il remplacer un capteur d’ambiance ?
Non, et c’est volontaire : sa température est celle de la carte, réchauffée par l’électronique voisine et par le montage lui-même. Ses valeurs servent d’abord au circuit pour corriger son oscillateur. Elles sont utiles pour suivre la dérive interne du module, mais pour connaître la température d’une pièce, il faut un capteur dédié, placé à l’écart de la carte.
Que se passe-t-il si le module est mal alimenté ou mal câblé ?
Le symptôme courant est une lecture qui renvoie toujours la même valeur, ou une valeur aberrante comme 2165 : cela signifie que le bus ne répond pas. Vérifier dans l’ordre la masse commune entre tous les modules, l’alimentation, puis les deux fils du bus, en les reprenant un par un. Un câble inversé entre SDA et SCL ne détruit rien mais donne exactement le même résultat.
À combiner avec
- Arduino Uno R3 avec câble USB — la carte qui interroge l’horloge et traite la date.
- Carte Nano avec câble — la même fonction dans un format qui tient dans un boîtier réduit.
- Afficheur LCD 16×02 en I2C — l’affichage du mini-projet, sur les deux mêmes fils de bus.
- Câbles de prototypage mâle-mâle — les quatre liaisons du montage.
- Plaque d’essai 830 points — le support du module et de l’afficheur, sans soudure.
- DHT22, capteur de température et d’humidité — pour horodater des relevés d’ambiance avec une base de temps sûre.
- Horloge temps réel DS1307 — l’alternative économique, pour un montage où l’heure n’a pas besoin d’être précise.










