Description
Module Horloge RTC DS3231:
Le module DS3231 est un module RTC (Real-Time Clock) de haute précision utilisé pour maintenir l’heure et la date avec une grande exactitude. Il est doté d’un oscillateur à cristal compensé en température intégré (TCXO) et d’une batterie de secours pour assurer la continuité de l’horloge en cas de coupure de courant.
Caractéristiques en détail
- Tension de fonctionnement : 2.3V à 5.5V
- Consommation de courant: < 300µA en fonctionnement, 500nA en mode de secours batterie
- Température de fonctionnement : -45ºC à +80ºC
- Précision : ±2ppm de 0ºC à +40ºC (±1 minute/an)
- Batterie de secours : CR2032 avec une durée de vie de 2 à 3 ans
- Batterie: CR2032 (non inclus). Lien
- Interface : I2C à 400kHz
- Fonctions : Mesure des secondes, minutes, heures, jours, dates, mois, et années, gestion des années bissextiles, deux alarmes, sortie onde carrée programmable
- Dimensions: 38 x 22 x 14 mm
- Poids: 8g (avec batterie)
Fonctionnement
Le DS3231 maintient un suivi précis de l’heure et de la date en utilisant une interface I2C pour communiquer avec un microcontrôleur. Lorsqu’une alimentation principale est disponible, il utilise cette source et passe automatiquement à la batterie de secours en cas de panne de courant, garantissant ainsi une continuité dans le suivi du temps.
Applications
- Horloges digitales
- Systèmes de gestion de l’énergie
- Périphériques informatiques
- Systèmes GPS
- Automatismes industriels
Brochage
- VCC : Alimentation (2.3V – 5.5V)
- GND : Masse
- SDA : Données série (I2C)
- SCL : Horloge série (I2C)
- SQW : Sortie onde carrée
- 32K : Sortie oscillateur 32kHz
Comment l’utiliser
Pour utiliser le DS3231 avec un Arduino, connectez les broches VCC, GND, SDA et SCL du module aux broches correspondantes de l’Arduino. Utilisez les bibliothèques dédiées comme RTClib
pour une communication simplifiée.
Comment l’utiliser avec Arduino Uno
Exemple de code Arduino de base
#include <Wire.h> // Inclusion de la bibliothèque Wire pour I2C
#include "RTClib.h" // Inclusion de la bibliothèque RTClib pour le module RTC DS3231
RTC_DS3231 rtc; // Création de l'objet RTC pour le module DS3231
// Constantes
const int DELAY_TIME = 1000; // Délai entre les lectures en millisecondes
void setup() {
Serial.begin(9600); // Initialiser la communication série à 9600 bauds
// Vérification de la connexion du module RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC"); // Afficher un message d'erreur si le module RTC n'est pas trouvé
while (1); // Arrêter le programme si le RTC n'est pas trouvé
}
// Vérification de la perte d'alimentation du RTC
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!"); // Afficher un message si le RTC a perdu l'alimentation
// Initialiser l'heure avec la date et l'heure de compilation (ajuster pour le fuseau horaire si nécessaire)
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now(); // Obtenir l'heure actuelle du RTC
// Vérification de la validité de la date/heure actuelle
if (!now.isValid()) {
Serial.println("Error: Invalid date/time"); // Afficher un message d'erreur si la date/heure est invalide
return;
}
// Affichage de l'heure et de la date actuelles sur le moniteur série
Serial.print(now.year(), DEC); // Afficher l'année
Serial.print('/');
Serial.print(now.month(), DEC); // Afficher le mois
Serial.print('/');
Serial.print(now.day(), DEC); // Afficher le jour
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); // Afficher le jour de la semaine
Serial.print(") ");
Serial.print(now.hour(), DEC); // Afficher l'heure
Serial.print(':');
Serial.print(now.minute(), DEC); // Afficher les minutes
Serial.print(':');
Serial.print(now.second(), DEC); // Afficher les secondes
Serial.println();
delay(DELAY_TIME); // Attendre avant la prochaine lecture
}
But du code
Ce code initialise le module DS3231 et affiche l’heure et la date actuelles sur le moniteur série. En cas de perte de puissance, il réinitialise l’heure en utilisant la date et l’heure de la compilation du sketch.
Composants nécessaires pour le code de base
- Arduino Uno
- Module RTC DS3231
- Câbles de connexion
Explication détaillée du code amélioré
- Inclusion des bibliothèques : Les bibliothèques
Wire.h
etRTClib.h
sont incluses pour permettre la communication avec le module RTC DS3231 via l’interface I2C. - Définition des constantes : La constante
DELAY_TIME
définit le délai entre les lectures de l’horloge RTC et l’affichage. - Création de l’objet RTC :
RTC_DS3231 rtc
: Création de l’objet pour interagir avec le module RTC DS3231.
- Fonction
setup()
:- Initialiser la communication série à 9600 bauds avec
Serial.begin(9600)
. - Vérifier la connexion du module RTC avec
rtc.begin()
et afficher un message d’erreur si le RTC n’est pas trouvé. - Vérifier si le RTC a perdu l’alimentation avec
rtc.lostPower()
et réinitialiser l’heure en utilisant la date et l’heure de compilation du sketch avecrtc.adjust(DateTime(F(__DATE__), F(__TIME__)))
.
- Initialiser la communication série à 9600 bauds avec
- Fonction
loop()
:- Obtenir l’heure actuelle du module RTC avec
rtc.now()
et stocker la valeur dans l’objetDateTime now
. - Vérifier si la date/heure actuelle est valide avec
now.isValid()
. - Afficher l’heure et la date actuelles sur le moniteur série.
- Utiliser un délai avant la prochaine lecture avec
delay(DELAY_TIME)
.
- Obtenir l’heure actuelle du module RTC avec
Fonction pour afficher les jours de la semaine
Pour afficher les jours de la semaine, vous pouvez ajouter une fonction de conversion comme suit :
const char* daysOfTheWeek[7] = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"};
Brochage détaillé des connexions du code de base
- VCC : Connecter à la broche 5V de l’Arduino
- GND : Connecter à la broche GND de l’Arduino
- SDA : Connecter à la broche A4 de l’Arduino
- SCL : Connecter à la broche A5 de l’Arduino
Exemple de code Arduino avancé pour affichage sur écran 7 segments avec gestion d’erreurs et améliorations
#include <Wire.h>
#include <RTClib.h>
#include <SevSeg.h>
// Constantes
const int DELAY_TIME = 1000; // Délai entre les lectures en millisecondes
RTC_DS3231 rtc; // Définir l'objet RTC
SevSeg sevseg; // Définir l'objet pour l'écran 7 segments
void setup() {
// Initialisation de la communication série
Serial.begin(9600);
// Initialisation de l'écran 7 segments
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
bool resistorsOnSegments = true;
bool updateWithDelays = false;
bool leadingZeros = true;
bool disableDecPoint = false;
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
// Initialisation du RTC
if (!rtc.begin()) {
Serial.println("Erreur : RTC non trouvé");
while (1); // Arrêter le programme si le RTC n'est pas trouvé
}
if (rtc.lostPower()) {
Serial.println("Le RTC a perdu l'alimentation, réglons l'heure !");
// Définir l'heure avec la date et l'heure de compilation
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
// Lecture de l'heure actuelle
DateTime now = rtc.now();
// Format de l'affichage : HHMM
int displayTime = now.hour() * 100 + now.minute();
sevseg.setNumber(displayTime, 2); // Afficher le temps sur 4 chiffres avec 2 chiffres après le point
// Afficher l'heure et la date sur le moniteur série
Serial.print("Heure : ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" Date : ");
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.println();
sevseg.refreshDisplay(); // Rafraîchir l'affichage 7 segments
delay(DELAY_TIME); // Attendre avant la prochaine lecture
}
But du code
Ce code utilise le module RTC DS3231 pour lire l’heure et la date actuelles, puis affiche ces informations sur un écran 7 segments.
Explication détaillée du code amélioré
- Inclusion des bibliothèques : Les bibliothèques
Wire.h
,RTClib.h
etSevSeg.h
sont incluses pour permettre la communication avec le RTC et l’affichage 7 segments. - Définition des constantes : La constante
DELAY_TIME
définit le délai entre les lectures de l’horloge RTC et l’affichage. - Initialisation de la communication série et de l’écran 7 segments :
- La communication série est initialisée à une vitesse de 9600 bauds.
- L’écran 7 segments est initialisé avec les broches correspondantes et configuré pour un affichage à cathode commune.
- Initialisation du module RTC :
- Le module RTC est initialisé et la connexion est vérifiée.
- En cas de perte de puissance, l’heure est réglée en utilisant la date et l’heure de compilation du sketch.
- Lecture et affichage des valeurs :
- L’heure actuelle est lue à partir du module RTC et formatée pour être affichée sur l’écran 7 segments.
- L’heure et la date actuelles sont également affichées sur le moniteur série.
- Affichage sur écran 7 segments :
- Le temps est affiché au format HHMM sur l’écran 7 segments, et l’affichage est rafraîchi à chaque itération de la boucle
loop()
.
- Le temps est affiché au format HHMM sur l’écran 7 segments, et l’affichage est rafraîchi à chaque itération de la boucle
Composants nécessaires pour le code avancé
- Arduino Uno
- Module RTC DS3231
- Écran 7 segments (12 broches, cathode commune, 4 chiffres avec 2 points)
- Câbles de connexion
Brochage détaillé des connexions pour le module RTC DS3231 et l’écran 7 segments
Pour connecter correctement le module RTC DS3231 et un écran 7 segments à un Arduino Uno, suivez le brochage ci-dessous. Ce guide détaille les connexions entre les différentes broches de chaque composant.
Connexions pour le module RTC DS3231 :
- VCC : Connecter à la broche 5V de l’Arduino Uno
- GND : Connecter à la broche GND de l’Arduino Uno
- SDA : Connecter à la broche A4 de l’Arduino Uno (bus I2C pour les données série)
- SCL : Connecter à la broche A5 de l’Arduino Uno (bus I2C pour l’horloge série)
Connexions pour l’écran 7 segments (cathode commune, 4 chiffres avec 2 points) :
- Digit 1 (Broche 1) : Connecter à la broche 2 de l’Arduino Uno
- Digit 2 (Broche 2) : Connecter à la broche 3 de l’Arduino Uno
- Digit 3 (Broche 6) : Connecter à la broche 4 de l’Arduino Uno
- Digit 4 (Broche 8) : Connecter à la broche 5 de l’Arduino Uno
- Segment A (Broche 14) : Connecter à la broche 6 de l’Arduino Uno
- Segment B (Broche 16) : Connecter à la broche 7 de l’Arduino Uno
- Segment C (Broche 13) : Connecter à la broche 8 de l’Arduino Uno
- Segment D (Broche 3) : Connecter à la broche 9 de l’Arduino Uno
- Segment E (Broche 5) : Connecter à la broche 10 de l’Arduino Uno
- Segment F (Broche 11) : Connecter à la broche 11 de l’Arduino Uno
- Segment G (Broche 15) : Connecter à la broche 12 de l’Arduino Uno
- Point (DP) (Broche 9) : Connecter à la broche 13 de l’Arduino Uno (optionnel)
Remarques :
- Assurez-vous de vérifier les spécifications de votre écran 7 segments car les broches peuvent varier en fonction du modèle.
- Utilisez des résistances appropriées pour limiter le courant à travers les segments de l’écran 7 segments, typiquement de 220Ω à 330Ω.
- Vérifiez la polarité correcte des connexions pour éviter tout dommage aux composants.
Installation de Drivers/bibliothèques
Codes de base et avancé Pour utiliser le module RTC DS3231, installez la bibliothèque RTClib
via le gestionnaire de bibliothèques de l’IDE Arduino. Pour le code avancé utilisant un écran 7 segments, installez également la bibliothèque SevSeg
.
- Ouvrez l’IDE Arduino.
- Allez dans le menu Sketch -> Include Library -> Manage Libraries…
- Recherchez
RTClib
etSevSeg
, puis cliquez sur Installer.
Liens
Mots clés: temps réel, RTC, I2C, précision horloge, sauvegarde batterie, module DS3231, horodatage, température compensée, clock, time, temps.