Une carte Arduino sait compter les millisecondes, mais elle oublie tout dès que l’alimentation est coupée : impossible de dater un relevé, de déclencher une action à heure fixe ou d’afficher l’heure au bon moment après un redémarrage. Le module DS1302 comble ce manque. Le circuit DS1302 compte les secondes, les minutes, les heures, le jour du mois, le mois, l’année et le jour de la semaine, et il continue de compter sur sa pile quand le reste du montage est hors tension.
Trois fils de commande suffisent pour dialoguer avec lui — une horloge, une ligne de données et une validation — et la lecture comme l’écriture tiennent en quelques lignes de programme. C’est la solution la plus simple et la moins chère de la famille des horloges temps réel, et celle qu’on retrouve dans la plupart des montages d’atelier pour horodater des mesures.
Caractéristiques techniques
| Circuit | DS1302 (Maxim / Analog Devices), boîtier DIP-8 soudé sur la carte — circuit d’horloge temps réel à charge d’appoint, datasheet du fabricant |
|---|---|
| Fonctions comptées | Secondes, minutes, heures, jour du mois, mois, jour de la semaine et année ; format 24 h ou 12 h avec indicateur AM/PM, tous deux gérés par le circuit |
| Fin de mois et année bissextile | Ajustement automatique : les mois de moins de 31 jours sont corrigés par le circuit, et la compensation des années bissextiles est valable jusqu’en 2100 |
| Mémoire sauvegardée | 31 octets de RAM statique, alimentés par la pile comme l’heure : de quoi y ranger un seuil, un numéro de recette ou un compteur qui doit survivre à la coupure |
| Alimentation du circuit | 2,0 V à 5,5 V (fiche technique). Le module se branche en 5 V sur une carte Arduino ; une carte en 3,3 V convient également, l’ensemble de la plage étant couverte |
| Consommation | Moins de 300 nA sous 2,0 V en fonctionnement horloger, annoncé par le fabricant : une pile bouton tient plusieurs années |
| Base de temps | Quartz 32,768 kHz soudé sur la carte, associé au circuit |
| Interface | Série sur 3 fils : validation (CE), données (I/O), horloge (SCLK) ; niveaux compatibles TTL sous 5 V |
| Broches du module | 5 broches mâles sérigraphiées : VCC, GND, CLK, DAT, RST — les libellés du circuit sont rappelés entre parenthèses CLK (SCLK), DAT (I/O), RST (CE) |
| Réserve de marche | Support de pile bouton CR2032 soudé sur la carte. La photo produit montre le support vide : la pile est un consommable à prévoir |
| Bibliothèque Arduino | DS1302 (Henning Karlsen), installable depuis le gestionnaire de bibliothèques de l’IDE |
Brochage : cinq fils vers la carte
Le module se branche directement sur la carte : il embarque son quartz et son support de pile, rien n’est à ajouter entre les deux. Les trois lignes de commande sont libres, elles peuvent occuper n’importe quelles broches numériques tant que le programme les déclare aux mêmes numéros.
Module VCC | → Arduino 5V |
|---|---|
Module GND | → Arduino GND — masse commune indispensable, sinon le module reste muet |
Module CLK | → Arduino D2 (horloge série, SCLK du circuit) |
Module DAT | → Arduino D3 (ligne de données, I/O du circuit) |
Module RST | → Arduino D4 (validation de l’échange, CE du circuit) |
Le point à ne pas manquer : la validation (RST ou CE) doit être câblée. C’est la ligne qu’on oublie parce qu’elle ne transporte aucune donnée : sans elle, le circuit ne répond jamais, et le programme lit une date figée ou des zéros. Vérifiez aussi que VCC et GND ne sont pas inversés — suivez la sérigraphie de la carte que vous avez en main, l’ordre des libellés pouvant varier d’un lot à l’autre.
Ce que le circuit fait — et ce qu’il ne fait pas
- Il tient l’heure tout seul : une fois l’heure réglée, le comptage se poursuit dans le circuit et la carte n’a plus qu’à demander la valeur quand elle en a besoin.
- Il garde 31 octets de mémoire sur la même pile, ce qui évite de rajouter une EEPROM pour deux ou trois réglages à conserver.
- Il propose une charge d’appoint programmable, prévue pour une source rechargeable. Avec la pile bouton CR2032 de ce module, qui n’est pas rechargeable, cette fonction doit rester désactivée.
- Il n’a pas d’alarme ni de sortie d’onde carrée. Un réveil, un déclenchement périodique ou une sortie 1 Hz se programment donc côté carte, en comparant l’heure lue aux valeurs voulues.
- Il ne mesure pas la température, et n’a donc aucune compensation thermique du quartz. La dérive reste faible mais réelle : pour une horloge qui ne doit pas s’écarter sur une année, un circuit à oscillateur compensé est préférable.
Applications
- Enregistreur de mesures — datation de chaque relevé sur une carte SD, avec l’heure réelle plutôt qu’un compteur reparti de zéro à chaque coupure.
- Éclairage ou arrosage programmé — comparaison de l’heure lue à une plage horaire, la lampe ou la pompe suivant le calendrier réel.
- Horloge d’atelier — affichage heure et date sur un écran LCD ou un afficheur à segments, sans ordinateur connecté.
- Automatisme à horaires — ouverture d’un portail, marche d’un ventilateur ou d’un chauffage sur créneaux fixes.
- Compteur qui survit à la panne — utilisation des 31 octets de mémoire pour repartir du bon chiffre après une coupure de courant.
Mini-projet : mettre le module à l’heure, puis la relire
C’est le premier programme à faire tourner sur un module neuf : il règle le circuit, puis relit l’heure seconde par seconde sur le moniteur série. Une fois cette étape passée, la même lecture alimente un écran, une carte SD ou une comparaison horaire.
Ce qu’il faut
| L’horloge | Le module DS1302 de cette page |
|---|---|
| Le cerveau | Uno R3 + cable usb |
| Le support | Plaque d’essai 400 points — cinq fils seulement, la plaque sert surtout à tenir le module |
| Les liaisons | 10 × fil mâle-mâle 10 cm |
| La pile | Une pile bouton CR2032, à mettre en place pour que l’heure survive à la coupure d’alimentation |
Le câblage
Module VCC | → Arduino 5V |
|---|---|
Module GND | → Arduino GND |
Module CLK | → Arduino D2 |
Module DAT | → Arduino D3 |
Module RST | → Arduino D4 |
Le programme
À copier dans l’IDE Arduino après avoir installé la bibliothèque DS1302 (Croquis → Inclure une bibliothèque → Gérer les bibliothèques), puis à téléverser. Le réglage ne sert qu’une fois : après le premier passage, mettez les trois lignes de réglage en commentaire et téléversez de nouveau, sinon l’heure repart à chaque redémarrage de la carte.
/*
* Horloge temps reel DS1302 : reglage du circuit, puis lecture de l'heure
* Carte : Arduino Uno -- l'heure et la date s'affichent sur le moniteur serie
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "DS1302.h"
// La bibliotheque attend les broches dans cet ordre : CE (RST), I/O (DAT), SCLK (CLK)
const byte BROCHE_RST = 4;
const byte BROCHE_DAT = 3;
const byte BROCHE_CLK = 2;
DS1302 rtc(BROCHE_RST, BROCHE_DAT, BROCHE_CLK);
void setup() {
Serial.begin(9600);
// A la mise sous tension, l'oscillateur est arrete et les registres proteges
rtc.halt(false); // demarre l'oscillateur du circuit
rtc.writeProtect(false); // ouvre l'ecriture des registres
// Reglage initial : a commenter apres le premier televersement
rtc.setDOW(SUNDAY); // jour de la semaine
rtc.setTime(18, 30, 0); // heures, minutes, secondes (format 24 h)
rtc.setDate(27, 9, 2026); // jour, mois, annee
}
void loop() {
Serial.print(rtc.getDOWStr()); // jour de la semaine en clair
Serial.print(" ");
Serial.print(rtc.getDateStr()); // date au format jj.mm.aaaa
Serial.print(" - ");
Serial.println(rtc.getTimeStr()); // heure au format hh:mm:ss
delay(1000); // une ligne par seconde
}
Comment ça marche
- Le constructeur
DS1302 rtc(BROCHE_RST, BROCHE_DAT, BROCHE_CLK)reçoit les broches dans l’ordre validation, données, horloge. Cet ordre est celui de la bibliothèque : il ne suit pas celui de vos fils sur la plaque, c’est le premier piège du montage. rtc.halt(false)démarre l’oscillateur. À la sortie d’usine, le circuit est arrêté pour économiser la pile : tant que cette instruction n’a pas été exécutée, le compteur ne bouge pas et l’heure reste figée.rtc.writeProtect(false)lève la protection en écriture des registres. Sans elle, les instructions de réglage sont ignorées en silence — le programme se téléverse, mais l’heure ne change pas.rtc.setDOW(),rtc.setTime()etrtc.setDate()règlent la semaine, l’heure et la date. Le circuit ne déduit pas le jour de la semaine de la date : c’est une valeur à part entière qu’il faut lui donner, iciSUNDAYpour un dimanche.- Dans la boucle,
rtc.getTimeStr()etrtc.getDateStr()renvoient le texte déjà mis en forme, ce qui évite de recomposer les nombres à la main. La lecture est faite en rafale : les sept registres sont lus d’un seul échange, donc aucune seconde ne peut changer au milieu de la lecture. - Le
delay(1000)règle la cadence d’affichage. Ce n’est pas lui qui fait avancer l’heure — le circuit compte en parallèle, indépendamment de ce que fait la carte.
Variante : une horloge qui s’affiche sans ordinateur
Le même programme alimente un écran dès qu’on remplace les lignes d’affichage série : un afficheur LCD 16 × 02 en I2C tient sur deux lignes et affiche l’heure en haut, la date en bas, avec deux fils seulement pour sa part. Sur quatre chiffres, un module TM1637 donne une horloge compacte en heures et minutes, plus lisible à distance qu’un LCD. Dans les deux cas, la valeur lue est la même ; seule change la façon de l’écrire à l’écran.
Questions fréquentes
Le module garde-t-il l’heure quand je débranche la carte ?
Oui, à condition qu’une pile bouton soit en place dans le support. Le circuit est alimenté par deux sources et bascule automatiquement sur la pile dès que l’alimentation principale disparaît. Sans pile, tout est remis à zéro à chaque coupure : c’est le symptôme le plus fréquent des montages qui « perdent l’heure » alors que le programme est correct.
Quelle pile faut-il mettre, et faut-il activer la charge d’appoint ?
Une pile bouton CR2032, montée face marquée vers le haut dans le support soudé sur la carte. Elle n’est pas rechargeable, et la fonction de charge d’appoint du circuit ne doit donc pas être activée : elle est réservée aux accumulateurs. La bibliothèque ne l’active pas, il n’y a rien à faire — sauf si vous ajoutez volontairement une pile rechargeable, auquel cas relisez la fiche technique du DS1302 avant de toucher à cette fonction.
Pourquoi mon programme lit-il une heure fausse ou des zéros ?
Trois causes couvrent presque tous les cas. La ligne de validation (RST) n’est pas câblée, et le circuit ne répond à aucune requête. La masse n’est pas commune entre le module et la carte. Ou l’oscillateur n’a jamais été démarré par rtc.halt(false) : l’heure reste celle du dernier réglage et n’avance plus. Vérifiez dans cet ordre, en regardant le moniteur série à 9600 bauds.
DS1302, DS1307 ou DS3231 : quelle différence ?
Le DS1302 de cette page est le plus économique et le plus simple à câbler : il dialogue sur trois fils, sans bus partagé. Le module DS1307 passe, lui, par le bus I2C, ce qui libère des broches dès qu’un écran et un capteur utilisent déjà ce bus. Le module DS3231 va plus loin : son oscillateur est compensé en température, ce qui lui vaut une précision bien supérieure, avec en plus une alarme et une sortie d’onde carrée. Pour horodater des relevés, le DS1302 suffit ; pour une horloge que personne ne remet à l’heure, visez le DS3231.
Faut-il des résistances ou des composants en plus ?
Non. Le quartz, les condensateurs de charge et les résistances de tirage sont déjà soudés sur la carte : cinq fils entre le module et l’Arduino, et rien d’autre. C’est l’intérêt d’un module par rapport au circuit intégré seul, qui réclame en plus le quartz, les condensateurs et la pile câblée à la main.
À combiner avec
Le Kit Arduino Uno maroc apporte la carte, la plaque d’essai et les fils : avec ce module en plus, le montage de cette page tourne sans rien commander d’autre. Pour une horloge qui reste branchée en permanence, une alimentation 5V 2A évite de mobiliser un port USB d’ordinateur. Et si vous voulez régler l’heure sans repasser par un ordinateur, deux mini boutons poussoirs suffisent : un pour les heures, un pour les minutes, reliés à des broches libres et lus dans le programme. Côté affichage, les écrans cités plus haut complètent l’ensemble — le LCD 16 × 02 pour l’heure et la date, le module TM1637 pour une horloge à quatre chiffres.








