Publié le

Module RTC et Arduino

Aujourd’hui je vais me pencher sur les modules RTC (Real Time Clock) et voir ce qu’on peut en faire avec un Arduino (Méga dans mon cas).

 

Matériel requis :

 

  • Un Arduino MEGA;
  • Un module RTC DS3231;

Description du module RTC :

 

Le module que j’ai choisit dispose d’une batterie Lithium pour nous permettre de de sauvegarder l’heure et la date si on le débranche (plus pratique qu’un module RTC sans pile).

IMG_2461

Dans cet exemple, nous n’allons utiliser que les entrée SDA et SCL (Nous verrons plus tard à quoi servent 32K et SQW).

Nous allons avoir besoin de deux librairies pour faire fonctionner le programme :

  • Wire.h qui est inclue dans les librairies Arduino
  • RTClib.h que vous pouvez trouver ici : RTClib.h

Pour connecter le module RTC sur un Arduino MEGA, il suffit juste de raccorder SCL sur le pin 21 et SDA sur le pin 20 ainsi que l’alimentation évidement !

RTC_bb

 

Programmation :

Premier test : 

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 RTC; // Avec cette librairie on déclare le DS3231 comme un DS1307

void setup() {
 Serial.begin(9600);
 Wire.begin();
 RTC.begin();
}

void loop() {
  //Affichage de l'heure
  DateTime now = RTC.now(); // Lit l'heure du module
  Serial.print(now.day(), DEC); // Affiche le jour
  Serial.print('/');
  Serial.print(now.month(), DEC); // Affiche le mois
  Serial.print('/');
  Serial.print(now.year(), DEC);  //Affiche l'année
  Serial.print(' ');
  Serial.print(now.hour(), DEC); //Affiche les heures
  Serial.print(':');
  Serial.print(now.minute(), DEC); // Affiche les minutes
  Serial.print(':');
  Serial.print(now.second(), DEC); // Affiche les secondes
  Serial.println();
  delay(3000);

}

Résultat :

Progr1

Ah non, nous ne sommes pas le 1er Janvier 2000 à minuit !

 

Mise à l’heure du module :

Nous allons ouvrir un nouvel onglet pour créer une fonction qui va mettre notre module à l’heure par rapport à l’heure de compilation du programme. Assez pratique même si nous aurons quelques secondes de décalage par rapport à l’heure de notre PC.

On modifie juste le « void setup » pour ajouter la fonction « reglageheure() »

void setup() {
 Serial.begin(9600);
 Wire.begin();
 RTC.begin();
reglageheure();
}

On ouvre un onglet pour la fonction avec le code suivant :

void reglageheure()
{
  Serial.println("Mise a l'heure");
  RTC.adjust(DateTime(__DATE__, __TIME__));
  DateTime now = RTC.now();
  Serial.print(now.day(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.year(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  delay(5000);
}

On compile et on ouvre le moniteur série :

mise à l'heure

Heure de mon iMac : 16:45:06

Heure du module RTC : 16:44:52

Nous avons donc 14 secondes d’écart entre les deux ce qui reste convenable.