Arduino & Horloge DS3231 (RTC = Real Time Clock) - /dev/tbo

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

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

Télécharger

Tag » Arduino Zs-042 Example