Publicité
Garder du temps sur les projets Arduino n'est pas aussi simple qu'on pourrait le penser: une fois que la connexion à l'ordinateur n'est pas là, votre Arduino non alimenté s'arrête simplement de fonctionner, y compris son ticker interne.
Pour garder votre Arduino en phase avec le monde qui l’entoure, vous aurez besoin de ce que l’on appelle un «module d’horloge en temps réel». Voici comment en utiliser un.
Quel est l'intérêt d'une horloge en temps réel (RTC)?
Votre ordinateur synchronise très probablement son heure avec Internet, mais il a toujours une horloge interne qui continue de 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 l'horloge de votre système. C'est assez utile, mais la plupart des projets Arduino sont conçus pour être utilisés loin d'un ordinateur - sur lequel point, chaque fois que l'alimentation est débranchée ou que l'Arduino redémarre, il n'a absolument aucune idée de l'heure c'est. L'horloge interne sera réinitialisée et recommencera à compter à partir de zéro la prochaine fois qu'elle sera mise sous tension.
Si votre projet a quelque chose à voir avec le besoin de temps - comme mon réveil veilleuse et lever de soleil Projet Arduino Night Light et Sunrise AlarmAujourd'hui, nous allons fabriquer un réveil au lever du soleil, qui vous réveillera doucement et lentement sans avoir recours à une machine à bruit offensante. 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 de manière assez grossière manière - l'utilisateur appuierait sur le bouton de réinitialisation juste avant d'aller se coucher, fournissant une heure manuelle synchroniser. De toute évidence, ce n'est pas une solution idéale à long terme.
Un module RTC est un peu plus de circuits, 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 pendant toute la durée de 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 $ sur eBay. Vous devrez probablement fournir votre propre batterie (il est illégal de les expédier à l'étranger dans de nombreux endroits) et certains en-têtes (les broches qui s'insèrent dans les trous, que vous devrez souder en vous-même).
Voici le module que j'ai:
Il a même un capteur de température intégré, bien que la batterie durera plus longtemps si vous ne l'utilisez pas.
Le nombre de trous sur cette chose semble assez effrayant, mais vous n'en avez besoin que de quatre; GND, VCC, SCL et SDA - vous pouvez utiliser les broches appropriées de chaque côté du module RTC. Vous parlez à l'horloge en utilisant Protocole I2C, ce qui signifie que seules 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 chaînez même jusqu'à 121 appareils I2C sur les deux mêmes broches - consultez cette page Adafruit pour une sélection d'autres appareils 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 c'est le cas pour le capteur de température.
Ensuite, téléchargez le Temps et DS1307RTC bibliothèques et placez les dossiers résultants dans votre /libraries dossier.
Quittez et relancez l'environnement Arduino pour le charger dans les bibliothèques et les exemples.
Vous trouverez deux exemples dans le menu du DS1307RTC: téléchargez et exécutez le Régler le temps exemple en premier - cela mettra le RTC à l'heure correcte. Le code réel ne vaut pas la peine d'être détaillé, sachez simplement que vous devez l'exécuter une fois pour effectuer la synchronisation horaire initiale.
Ensuite, regardez l'exemple d'utilisation avec ReadTest.
#comprendre
#comprendre
#comprendre void setup () {Serial.begin (9600); while (! Serial); // attendre le délai 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. Heure); Serial.write (':'); print2digits (tm. Minute); Serial.write (':'); print2digits (tm. Seconde); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Journée); Serial.write ('/'); Serial.print (tm. Mois); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. An)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("Le DS1307 est arrêté. Veuillez exécuter le SetTime "); Serial.println ("exemple pour initialiser l'heure et commencer à courir."); Serial.println (); } else {Serial.println ("DS1307 erreur de lecture! Veuillez vérifier les circuits. "); Serial.println (); } retard (9000); } délai (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (nombre); }
Notez que nous avons également inclus le noyau Wire.h bibliothèque - fournie avec Arduino et utilisée pour communiquer sur I2C. Téléchargez le code, ouvrez la console série à 9600 bauds et regardez et votre Arduino sort l'heure actuelle chaque seconde. Merveilleux!
Le code le plus important de l'exemple est la création d'un tmElements_t tm - c'est un structure que nous remplirons avec l'heure actuelle; et le RTC.read (tm), qui obtient l'heure actuelle du module RTC, la place dans notre tm structure, et renvoie vrai si tout s'est bien passé. Ajoutez votre code de débogage ou logique à l'intérieur de cette instruction «si», 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 du lever du soleil ou créer une horloge Word LED - les possibilités sont infinies! Que ferez-vous?
Crédits image: Snootlab Via Flickr
James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.