Horloge RTC Arduino Nano : Chronométrage Précis avec DS1307
Composants et fournitures
| Arduino Nano R3 | × | 1 |
| Module Horloge Temps Réel (RTC) DS1307 | × | 1 |
| Afficheur 7 segments 4 digits | × | 1 |
| Connecteurs femelle rangée simple | × | 3 |
| Plaque à trous (perforated board) | × | 1 |
| Fils de câblage (jumper wires) | × | 25 |
| Connecteur mâle 40 positions 1 rangée (2,54 mm) | × | 1 |
Outils et machines nécessaires
| Fer à souder |
| Multimètre – Indispensable pour vérifier la connectivité des soudures et le courant consommé. Investissez dans un modèle correct, il durera au moins 4 ans, voire plus si vous savez le réparer. |
Applications et services en ligne
| Arduino IDE |
| Arduino Fritzing |
À propos de ce projet
Voici une horloge numérique vraiment simple à assembler, créée avec le circuit intégré RTC DS1307. Elle affiche l'heure sur un afficheur 7 segments 4 digits. Le code peut facilement être modifié pour ajouter des fonctionnalités comme une alarme – il suffit d'un peu d'imagination et d'ingéniosité. Ce projet a été réalisé comme étape vers des réalisations plus complexes, et aussi pour avoir un bel objet à exposer dans ma chambre.
Je vais inclure tous les détails, y compris les problèmes rencontrés lors du soudage sur le PCB et comment je les ai résolus.
ÉTAPE 1 : Composants
Module RTC
La puce DS1307 est formidable : elle garde l'heure même hors tension. Facile à interfacer avec l'Arduino, de nombreuses bibliothèques existent. La communication se fait via le protocole I2C – les broches A4 et A5 de l'Arduino Nano sont utilisées :
- SDA → A4
- SCL → A5
La broche DS n'est pas nécessaire ici.
Inconvénient : pas aussi précise qu'on le souhaiterait. La puce est sensible à la dérive temporelle et s'éloigne facilement de l'heure réelle selon la température.
NOTE IMPORTANTE : Vérifiez bien le branchement GND et Vcc. Sur le module, le Vcc est placé avant le GND. Je l'ai branché en polarité inversée plusieurs fois – il chauffe très vite. Si vous craignez l'inversion, touchez la pile bouton à la mise sous tension et coupez immédiatement si vous sentez de la chaleur.
Registre à décalage (74HC595)
C'est la puce qui a tout rendu possible grâce à la technique du multiplexage. Débutants, n'ayez pas peur de ce terme impressionnant – c'est amusant et vous serez ravi de l'apprendre.
- Le 74HC595 a 16 broches. Nous en utilisons deux pour piloter l'afficheur 4 digits 7 segments.
- Le premier registre allume les segments, le second sélectionne quel digit afficher.
- Grâce au multiplexage, la commutation entre digits est si rapide qu'on a l'impression que tous s'affichent simultanément.
NOTE : Ces puces sont généralement fiables, mais j'en ai eu plusieurs défectueuses. Sur certaines, Q0 et Q1 ne fonctionnaient pas. D'autres avaient Q3 mis à la masse internement (erreur de fabrication). Celles utilisées dans le projet ne sont pas parfaites non plus : l'une a Q7 défaillant. J'ai dû vérifier mes connexions au multimètre (mode continuité). Tout cela fait partie de l'apprentissage pour surmonter les petits obstacles.
Afficheur 7 segments 4 digits
J'ai utilisé un afficheur générique 4 digits Anode Commune. Il a 12 broches, numérotées en partant du bas à gauche jusqu'en haut à gauche. Chaque segment affiche un chiffre et un point décimal. N'ayant pas les deux points typiques des horloges digitales, j'ai utilisé le point décimal du deuxième digit. Ces afficheurs sont excellents pour afficher des nombres.
NOTE : Ils peuvent dérouter les débutants car les segments a-g ne sont pas alignés. Attention : ne les connectez jamais directement au 5V sans résistance de limitation de courant.
J'ai inclus un schéma explicite. Comme le schéma ne correspond pas exactement à mon afficheur, voici les correspondances broches :
| Segment | Broche afficheur | Broche registre |
|---|---|---|
| A | 11 | 15 (1er 595) |
| B | 7 | 1 (1er 595) |
| C | 4 | 2 (1er 595) |
| D | 2 | 3 (1er 595) |
| E | 1 | 4 (1er 595) |
| F | 10 | 5 (1er 595) |
| G | 5 | 6 (1er 595) |
| Décimal | 3 | 7 (1er 595) |
| D1 (digit 1) | 12 | 15 (2e 595) |
| D2 | 9 | 1 (2e 595) |
| D3 | 8 | 2 (2e 595) |
| D4 | 6 | 3 (2e 595) |
Ce projet est bon marché et facile, mais demande un peu de patience et de persévérance (surtout pour le soudage sur PCB). Pour un simple test sur plaque d'essai, ça prend à peine 2 heures.
Vos retours sont bienvenus pour améliorer ce tutoriel ou combler d'éventuelles lacunes.
Code
Plusieurs fichiers sont fournis :
- Code Horloge (Arduino) – Programme principal pour afficheur Anode Commune. Utilise les bibliothèques RTC et I2C (Wire). Inclut une fonction d'alarme.
- Régler l'heure (Arduino) – Permet de régler l'heure via le Moniteur Série (le DS1307 dérive). Branchez le module, téléversez ce programme, ouvrez le Moniteur Série, entrez date/heure correctes, puis téléversez le programme principal.
- Bibliothèque RealTimeClockDS1307 – Fichiers .cpp, .h, Readme, mots-clés. Créez un dossier « RealTimeClockDS1307 » et copiez-y ces fichiers. Ajoutez via Croquis → Inclure une bibliothèque → Ajouter bibliothèque .ZIP.
- Bibliothèque RTClib (fork JeeLab/Adafruit) – Fichiers RTClib.cpp, RTClib.h, README.md, library.properties. Compatible DS1307, DS3231, PCF8523. Tableau de compatibilité MCU inclus (Uno, Mega, Leonardo, ESP8266, Due, Zero, Trinket, Gemma, etc.).
Code principal de l'horloge (extrait)
#include
#include
#include
RTC_DS1307 RTC;
int latchPin = 3; // Pin 12 du 595
int dataPin = 4; // Pin 14 du 595
int clockPin = 2; // Pin 11 du 595
int shift = 256;
const int alarmHour = 17;
const int alarmMinute = 26;
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(13, OUTPUT); // LED alarme
Wire.begin();
RTC.begin();
if (!RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop() {
DateTime now = RTC.now();
int HOUR = now.hour();
int MINUT = now.minute();
// ... extraction unités/dizaines/centaines/milliers pour heures et minutes
// ... multiplexage via shiftOut sur les deux 74HC595
// ... gestion alarme sur pin 13
}
Bibliothèque RealTimeClockDS1307 – Fichiers clés
RealTimeClockDS1307.h – En-tête principal avec classe complète (lecture/écriture registres, getters/setters, formatage, square wave, conversion BCD).
RealTimeClockDS1307.cpp – Implémentation (I2C address 0x68, gestion registres, activation/arrêt oscillateur, square wave, RAM batterie).
Readme – Documentation, exemples, changelog, crédits (John Waters, Maurice Ribble), licence LGPL.
Mots-clés (syntax highlighting) – Fichier pour coloration syntaxique dans l'IDE.
Bibliothèque RTClib – Fichiers clés
RTClib.h – Classes DateTime, TimeSpan, RTC_DS1307, RTC_DS3231, RTC_PCF8523, RTC_Millis. Énumérations modes square wave.
RTClib.cpp – Implémentation complète : conversion dates, I2C, ajustement, lecture NVRAM, square wave, compatibilité multi-plateformes (AVR, SAMD, ESP8266, etc.).
README.md – Guide d'installation, tableau de compatibilité MCU détaillé, lien vers guide Adafruit DS1307.
Schéma
Schéma Fritzing du projet : 7segmentClock.fzz
Processus de fabrication
- Fabrication des planches à repasser : conception, matériaux et processus de production
- L'Horloge à Coucou : Histoire, Artisanat et Évolution Moderne
- Circuits imprimés : conception, fabrication et tendances futures
- Construction et design des planches de surf : des racines polynésiennes à l'innovation moderne
- Construire un robot Arduino piloté par Raspberry Pi – Guide pas à pas
- RasPiRobot Board V2 : Transformez votre Raspberry Pi en contrôleur robot puissant
- Horloge Miroir Infini : Élégance Infinie et Précision Temporelle
- L'Importance d'un Circuit Imprimé Sans Défaut
- Configuration moteur : guide complet des types et caractéristiques