Accueil > ARDUINO > Arduino & Horloge DS3231 (RTC = Real Time Clock)

Arduino & Horloge DS3231 (RTC = Real Time Clock)

dimanche 18 décembre 2016, par thebault

JPEG - 28.7 ko
  • le composant DS3231 est une horloge temps réel (RTC) qui contient le quartz
  • compensée pour les dérives suivant la température
  • datasheet du composant,
  • la communication se fait via le bus i2C (broches SDA & SCL)
  • les dates et heures sont mémorisées grâce à une pile CR2032

Branchement

JPEG - 314.8 ko

Programme Arduino

J’utilise la bibliothèque "ds3231" développée par Petre Rodan https://github.com/rodan/ds3231 sous licence GPL.

Zip - 4.6 ko

Les variables concernant la date et l’heure sont déclarées sous la forme d’un type struct dans cette bibliothèque :

  1. struct ts {
  2. uint8_t sec; /* seconds */
  3. uint8_t min; /* minutes */
  4. uint8_t hour; /* hours */
  5. uint8_t mday; /* day of the month */
  6. uint8_t mon; /* month */
  7. int16_t year; /* year */
  8. uint8_t wday; /* day of the week */
  9. uint8_t yday; /* day in the year */
  10. uint8_t isdst; /* daylight saving time */
  11. uint8_t year_s; /* year in short notation*/
  12. #ifdef CONFIG_UNIXTIME
  13. uint32_t unixtime; /* seconds since 01.01.1970 00:00:00 UTC*/
  14. #endif
  15. };

Télécharger

Ainsi, dans les programmes suivants : , on déclare une variable t de type struct ts  :
 struct ts t.
Si on veut faire référence à la variable minute de l’heure (hh:mm), on utilisera la variable t.min.

Les fonctions que l’on utilise :

Nom de la fonctiondescription
DS3231_init(DS3231_INTCN) initialise le module DS3231
DS3231_set(t) mettre à l’heure/date le module
DS3231_get(&t) lire la date et l’heure

Lire la date et l’heure.

  1. #include <Wire.h>
  2. #include <ds3231.h>
  3.  
  4. struct ts t;
  5.  
  6. void setup() {
  7. Serial.begin(9600);
  8. Wire.begin();
  9. DS3231_init(DS3231_INTCN);
  10. }
  11.  
  12. void loop() {
  13. // put your main code here, to run repeatedly:
  14. DS3231_get(&t);
  15. Serial.print("date : ");
  16. Serial.print(t.mday);
  17. Serial.print("/");
  18. Serial.print(t.mon);
  19. Serial.print("/");
  20. Serial.print(t.year);
  21. Serial.print("\t Heure : ");
  22. Serial.print(t.hour);
  23. Serial.print(":");
  24. Serial.print(t.min);
  25. Serial.print(".");
  26. Serial.println(t.sec);
  27.  
  28. delay(500);
  29. }

Télécharger

Si on ouvre le moniteur série (loupe en haut à droite), on obtient :

JPEG - 122.6 ko

REMARQUE : si on vient de mettre la pile dans le module, alors il ne sera pas l’heure, ni à la bonne date. Il va donc falloir le programmer.

Régler l’heure et la date

Le programme suivant permet de régler le module suivant les paramètres donnés dans la fonction void setup() . A chaque fois que l’on relance le programme (téléversement ou reset) il configure à nouveau le module et ré-initialise l’heure et la date.

  1. #include <Wire.h>
  2. #include <ds3231.h>
  3.  
  4. struct ts t; //déclaration variable t
  5.  
  6. void setup() {
  7. Serial.begin(9600);
  8. Wire.begin();
  9. DS3231_init(DS3231_INTCN);
  10.  
  11. t.hour=12; // données pour mettre à l'heure l'horloge
  12. t.min=22;
  13. t.sec=0;
  14. t.mday=18;
  15. t.mon=12;
  16. t.year=2016;
  17.  
  18. DS3231_set(t); // mise à l'heure de l'horloge
  19. }
  20.  
  21. void loop() {
  22. // put your main code here, to run repeatedly:
  23. DS3231_get(&t);
  24. Serial.print("date : ");
  25. Serial.print(t.mday);
  26. Serial.print("/");
  27. Serial.print(t.mon);
  28. Serial.print("/");
  29. Serial.print(t.year);
  30. Serial.print("\t Heure : ");
  31. Serial.print(t.hour);
  32. Serial.print(":");
  33. Serial.print(t.min);
  34. Serial.print(".");
  35. Serial.println(t.sec);
  36.  
  37. delay(500);
  38. }

Télécharger

SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL