mardi 14 novembre 2017

Horloge temps réel (RTC) DS3231 et Arduino

Une horloge temps réel (ou RTC pour Real Time Clock) est un circuit intégré spécialement conçu pour permettre à un microcontrôleur de connaître en tout temps la date et l'heure.

Dans le passé, j'ai déjà eu quelques occasions d'utiliser le modèle DS1307, qui est conçu pour fonctionner à un niveau logique de 5 V.  Le DS3231 dont il est question aujourd'hui s'accommode aussi bien des niveaux logiques de 5 V ou de 3,3 V; il est donc facile de l'utiliser avec Arduino, Raspberry Pi, Nucleo, etc.

Je me suis donc procuré à très bas prix un module DS3231 sur eBay.  Côté face:  le circuit intégré, deux résistances pull-up de 4,3 kΩ pour la connexion I2C, et un condensateur pour stabiliser l'alimentation.


Côté pile:  5 connecteurs femelles pour l'alimentation du module et la communication I2C, et un espace prévu pour la pile qui permet à votre horloge de continuer de tenir le temps pendant que votre Arduino n'est pas alimenté.

Petite surprise:  mon module était vendu sans support pour la pile: on doit utiliser les deux connecteurs pour y souder un support de pile, ou encore bricoler son propre support de pile.


Avantage intéressant:  vous pouvez donc choisir vous-mêmes le modèle de pile de 3 V qui vous convient le mieux, plutôt qu'être obligé de vous procurer le modèle exact dont les dimensions correspondraient à un support de pile pré-installé.

En concordance avec mon tempérament pressé et peu perfectionniste, je me suis contenté de souder un court fil conducteur à chacun des deux connecteurs.  Sur la photo ci-dessous, le fil rouge est pour la borne positive de la pile, alors que le fil noir est pour la borne négative.  C'est important de ne pas inverser la polarité...


Ensuite, un petit bout de ruban gommé pour tenir les deux fils sur la pile, et voilà:  j'ai fabriqué mon support de pile!



Le circuit

Voyons maintenant comment brancher l'horloge à une carte Arduino Uno.

Le connecteur "+" du DS3231 se branche à la sortie 5 V de l'Arduino
Le connecteur "-" du DS3231 se branche à une des broches GND de l'Arduino
Le connecteur "D" (data) se branche à la broche A4 de l'Arduino*
Le connecteur "C" (clock) se branche à la broche A5 de l'Arduino*
Le connecteur "NC" (no connect) ne se branche nulle part!

* Attention: si vous utilisez un modèle d'Arduino autre que le Uno, les connecteurs réservés pour l'I2C ne sont pas nécessairement les mêmes.



Si par hasard vous vous interrogez sur la pertinence du connecteur "NC", c'est que ce module DS3231 a été spécialement conçu pour être inséré directement sur les broches GPIO du Rasbperry Pi.  Les broches du Raspberry Pi qui sont réservées à l'I2C sont adjacentes à une des sorties 3,3 V du Raspberry Pi (broches 1, 3 et 5), mais la masse est située sur la broche 9.  Le connecteur "NC" est donc là pour accueillir la broche 7, qui ne peut donc pas être utilisée.


Installation de la bibliothèque

Si ce n'est pas déjà fait, vous devez installer la bibliothèque RTCLib.  La version proposée par Adafruit est probablement la meilleure.

Résultats

Il s'agit ensuite d'ouvrir un des exemples fournis avec la bibliothèque:  la version d'Adafruit comporte un exemple intitulé "ds3231".  Si vous avez une autre version (probablement plus ancienne) de la bibliothèque, vous pouvez très bien utiliser l'exemple intitulé "ds1307", il devrait fonctionner sans le moindre problème.

Il ne reste plus qu'à modifier le sketch en fonction de vos besoins.



Yves Pelletier   (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire