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

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

Garder du temps sur les projets Arduino n'est pas aussi facile qu'on pourrait le penser: une fois que la connexion à l'ordinateur n'est pas établie, votre Arduino non alimenté cesse tout simplement de fonctionner, y compris son ticker interne..

Pour que votre Arduino soit synchronisé avec le monde qui l'entoure, vous aurez besoin de ce que l'on appelle un “Module d'horloge temps réel”. Voici comment utiliser un.

Quel est l'intérêt d'une horloge temps réel (RTC)?

Il est fort probable que votre ordinateur synchronise son heure avec Internet, mais il possède toujours une horloge interne qui continue de fonctionner même sans connexion Internet ou si l'alimentation est coupée. Lorsque vous utilisez un Arduino branché sur un ordinateur, celui-ci a accès à l'heure précise fournie par l'horloge de votre 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-là, chaque fois que l'alimentation est débranchée ou que l'Arduino est redémarré, il n'a absolument aucune idée de l'heure qu'il est. L'horloge interne sera réinitialisée et recommencera à compter de zéro à la prochaine mise sous tension.

Si votre projet a quelque chose à voir avec le besoin de temps - tel que ma veilleuse et mon réveil lever du soleil Projet Arduino Night Light et Sunrise Alarm Le projet Arduino Veilleuse et Sunrise Alarm Project Aujourd réveillez-vous lentement sans avoir recours à une machine à bruit offensive. Lire la suite - cela va clairement être un problème. Dans le cadre de ce projet, nous avons contourné le problème en réglant manuellement l'heure de nuit de façon plutôt grossière: l'utilisateur appuyait sur le bouton de réinitialisation juste avant d'aller au lit, fournissant une synchronisation manuelle de l'heure. Clairement, ce n'est pas une solution idéale à long terme.

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

TinyRTC

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

Voici le module que j'ai:

Il possède même un capteur de température intégré, même si la batterie durera 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 appropriées de chaque côté du module RTC. Vous parlez à l'horloge à l'aide du protocole I2C, ce qui signifie que seules deux broches sont utilisées - une pour le “l'horloge” (une horloge de communication série, rien à voir avec le temps) et une pour les données. En fait, vous pouvez même relier jusqu'à 121 périphériques I2C sur les mêmes deux broches. Consultez cette page Adafruit pour consulter une sélection d'autres périphériques I2C que vous pouvez ajouter, car ils sont nombreux!

Commencer

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

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

Quittez et relancez l'environnement Arduino pour charger les bibliothèques et les exemples.

Vous trouverez deux exemples dans le menu DS1307RTC: télécharger et exécuter le Régler le temps exemple en premier - cela va régler le RTC à la bonne heure. Le code lui-même 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 initiale..

Ensuite, regardez l'exemple d'utilisation avec Test de lecture.

 #comprendre  #comprendre  #comprendre  void setup () Serial.begin (9600); while (! série); // attente du délai en série (200); Serial.println ("Test de lecture DS1307RTC"); 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 (J / M / A) ="); 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 ("Le DS1307 est arrêté. Veuillez exécuter SetTime"); Serial.println ("exemple pour initialiser l'heure et commencer à courir."); Serial.println ();  else Serial.println ("Erreur de lecture DS1307! Veuillez vérifier le circuit."); Serial.println ();  délai (9000);  delay (1000);  void print2digits (int number) if (number> = 0 && number 

Notez que nous avons également inclus le noyau Wire.h bibliothèque - cela vient avec Arduino et est utilisé pour communiquer sur 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 - c'est un structure que nous peuplerons avec l'heure actuelle; et le RTC.read (tm) fonction, qui obtient l'heure actuelle du module RTC, le met dans notre tm structure, et retourne vrai si tout s’est bien passé. Ajoutez votre code de débogage ou logique à l'intérieur de cette instruction "if", telle que l'affichage de l'heure ou sa réaction.

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

Crédits d'image: Snootlab via Flickr

En savoir plus sur: Arduino.