DS3231 Module Horloge RTC

Disponibilité:

362 en stock

Comparer
UGS : 0121 Catégories : ,

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é

  1. Inclusion des bibliothèques : Les bibliothèques Wire.h et RTClib.h sont incluses pour permettre la communication avec le module RTC DS3231 via l’interface I2C.
  2. Définition des constantes : La constante DELAY_TIME définit le délai entre les lectures de l’horloge RTC et l’affichage.
  3. Création de l’objet RTC :
    • RTC_DS3231 rtc : Création de l’objet pour interagir avec le module RTC DS3231.
  4. 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 avec rtc.adjust(DateTime(F(__DATE__), F(__TIME__))).
  5. Fonction loop() :
    • Obtenir l’heure actuelle du module RTC avec rtc.now() et stocker la valeur dans l’objet DateTime 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).

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é

  1. Inclusion des bibliothèques : Les bibliothèques Wire.h, RTClib.h et SevSeg.h sont incluses pour permettre la communication avec le RTC et l’affichage 7 segments.
  2. Définition des constantes : La constante DELAY_TIME définit le délai entre les lectures de l’horloge RTC et l’affichage.
  3. 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.
  4. 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.
  5. 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.
  6. 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().

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.

  1. Ouvrez l’IDE Arduino.
  2. Allez dans le menu Sketch -> Include Library -> Manage Libraries…
  3. Recherchez RTClib et SevSeg, 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.