Comment et pourquoi ajouter une horloge en temps réel à Arduino

Afin de garder votre Arduino en phase avec le monde qui l'entoure, vous aurez besoin de ce qu'on appelle un module Real Time Clock. Voici comment en utiliser un.

Afin de garder votre Arduino en phase avec le monde qui l'entoure, vous aurez besoin de ce qu'on appelle un module Real Time Clock.  Voici comment en utiliser un.
Publicité

Garder le temps sur les projets Arduino n'est pas aussi simple que vous pourriez le penser: une fois que la connexion de l'ordinateur n'est pas là, votre Arduino non alimenté s'arrête simplement de fonctionner, y compris son ticker interne.

Afin de garder votre Arduino en phase avec le monde qui l'entoure, vous aurez besoin de ce qu'on appelle un "module Real Time Clock". Voici comment en utiliser un.

Quel est le point d'une horloge temps réel (RTC)?

Votre ordinateur synchronise très probablement son heure avec Internet, mais il a toujours une horloge interne qui continue à fonctionner même sans connexion Internet ou l'alimentation est coupée. Lorsque vous utilisez un Arduino branché sur un ordinateur, il a accès à l'heure précise fournie par votre horloge système. C'est très utile, mais la plupart des projets Arduino sont conçus pour être utilisés loin d'un ordinateur - à ce moment, à chaque fois que l'alimentation est débranchée, ou l'Arduino redémarré, il n'aura absolument aucune idée de l'heure. L'horloge interne sera réinitialisée et recommencera à zéro à la prochaine mise sous tension.

Si votre projet a quelque chose à voir avec le besoin de temps - comme ma veilleuse et mon réveil Sunrise Arduino Night Light et Sunrise Alarm Project Arduino Night Light et Sunrise Alarm Project Aujourd'hui, nous allons faire un réveil au lever du soleil, qui va doucement et lentement vous réveiller sans recourir à une machine de bruitage offensive. Lire la suite - cela va clairement être un problème. Dans ce projet, nous avons contourné le problème en réglant manuellement l'heure chaque nuit d'une manière plutôt grossière - l'utilisateur appuyait sur le bouton de réinitialisation juste avant de se coucher, fournissant une synchronisation manuelle de l'heure. De toute évidence, ce n'est pas une solution idéale à long terme.

Un module RTC est un circuit supplémentaire, nécessitant une petite pile bouton, qui continue de compter l'heure, même lorsque votre Arduino est éteint. Après avoir été réglé une fois - il va garder ce temps pour la vie de la batterie, généralement une bonne année ou deux.

TinyRTC

Le RTC le plus populaire pour Arduino est appelé TinyRTC et peut être acheté pour environ 5 $ - 10 $ sur eBay. Vous aurez probablement besoin de fournir votre propre batterie (il est illégal d'expédier ces batteries à l'étranger vers de nombreux endroits), et certains en-têtes (les broches qui s'insèrent dans les trous, que vous aurez besoin de souder en vous-même).

C'est le module que j'ai:

rtc-module

Il a même un capteur de température intégré, bien que la batterie dure plus longtemps si vous ne l'utilisez pas.

Le nombre de trous sur cette chose semble assez effrayant, mais vous n'avez besoin que de quatre d'entre eux; GND, VCC, SCL et SDA - vous pouvez utiliser les broches correspondantes de chaque côté du module RTC. Vous parlez à l'horloge en utilisant le protocole I2C, ce qui signifie que seulement deux broches sont utilisées - une pour l'horloge (une horloge de données de communication série, rien à voir avec le temps) et une pour les données. En fait, vous pouvez même enchaîner jusqu'à 121 périphériques I2C sur les deux mêmes broches - consultez cette page Adafruit pour une sélection d'autres périphériques I2C que vous pourriez ajouter, car il y en a beaucoup!

Commencer

Raccordez votre module TinyRTC selon le schéma ci-dessous - la ligne DS rose n'est pas nécessaire, comme pour le capteur de température.

câblage

Ensuite, téléchargez les bibliothèques Time et DS1307RTC et placez les dossiers résultants dans votre dossier / libraries .

Quittez et relancez l'environnement Arduino pour le charger dans les bibliothèques et les exemples.
ds1307rtc-example-menu

Vous trouverez deux exemples dans le menu DS1307RTC: téléchargez et exécutez d' abord l' exemple SetTime - cela définira le RTC à l'heure correcte. Le code actuel ne vaut pas la peine d'entrer dans les détails, sachez simplement que vous devez l'exécuter une fois pour effectuer la synchronisation horaire initiale.

Ensuite, regardez l'exemple d'utilisation avec ReadTest .

#include #include #include void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(200); Serial.println("DS1307RTC Read Test"); Serial.println("-------------------"); } void loop() { tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); print2digits(tm.Hour); Serial.write(':'); print2digits(tm.Minute); Serial.write(':'); print2digits(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number 

Notez que nous avons également inclus la bibliothèque de base Wire.h - fournie avec Arduino et utilisée pour communiquer via I2C. Téléchargez le code, ouvrez la console série à 9600 bauds et regardez et votre Arduino affiche l'heure actuelle toutes les secondes. Merveilleux!

Le code le plus important dans l'exemple est la création d'un tmElements_t tm - une structure que nous allons remplir avec l'heure actuelle; et la fonction RTC.read (tm), qui récupère l'heure actuelle du module RTC, la place dans notre structure tm et renvoie true si tout s'est bien passé. Ajoutez votre code de débogage ou logique à l'intérieur de cette instruction "if", comme imprimer l'heure ou y réagir.

Maintenant que vous savez comment obtenir le bon moment avec Arduino, vous pouvez essayer de réécrire le projet d'alarme sunrise ou créer une horloge à LED - les possibilités sont infinies! Que ferez-vous?

Crédits image: Snootlab Via Flickr

In this article