Comment et pourquoi ajouter une horloge en temps réel à un Arduino
Maintenir un projet Arduino en vie n’est pas aussi simple qu’on pourrait le penser : dès que la connexion à l’ordinateur n’est plus là, votre Arduino non alimenté cesse de fonctionner, y compris son code interne.
Pour garder votre Arduino en synchronisation avec le monde qui vous entoure, vous aurez besoin de ce qu’on appelle un « module d’horloge en temps réel ». Voici comment en utiliser un.
A quoi sert une horloge temps réel (RTC) ?
Votre ordinateur synchronisera très probablement l’heure avec Internet, mais il possède toujours une horloge interne qui continuera de fonctionner même sans connexion Internet ou lorsque l’alimentation est coupée. Lorsque vous utilisez un Arduino branché sur votre ordinateur, il a accès à l’heure exacte fournie par l’horloge système. C’est très utile, mais la plupart des projets Arduino sont conçus pour être utilisés loin de l’ordinateur – à ce stade, chaque fois que vous débranchez ou redémarrez l’Arduino, il n’a absolument aucune idée de l’heure qu’il est. L’horloge interne sera réinitialisée et recommencera à compter à partir de zéro à la prochaine mise sous tension.
Si votre projet est lié au besoin de temps – comme ma veilleuse et mon réveil au lever du soleil – ce sera évidemment un problème. Dans ce projet, nous avons résolu ce problème en réglant manuellement l’heure nocturne d’une manière plutôt grossière – l’utilisateur appuyait sur le bouton de réinitialisation avant d’aller se coucher, fournissant une synchronisation manuelle de l’heure. Évidemment, ce n’est pas une solution idéale à long terme.
Le module RTC est un circuit supplémentaire qui nécessite une petite pile bouton qui continuera à compter le temps même lorsque votre Arduino est éteint. Une fois réglé, il conservera ce temps pendant toute la durée de vie de la batterie, généralement environ un an.
Faire une vidéo du jour
horloge miniature en temps réel
L’Arduino RTC le plus populaire s’appelle TinyRTC et peut être acheté sur eBay pour environ 5 à 10 $. Vous devrez très probablement fournir vos propres batteries (il est illégal de les expédier à l’étranger dans de nombreux endroits) et quelques en-têtes (broches qui vont dans des trous, vous devrez les souder vous-même).
Voici le module que j’ai :
Il a même un capteur de température intégré, mais la batterie durera plus longtemps si vous ne l’utilisez pas.
Les trous dans cette chose semblent effrayants, 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 utilisez le protocole I2C pour communiquer avec l’horloge, ce qui signifie que vous n’utilisez que deux broches – une pour « l’horloge » (horloge de données de communication série, indépendante du temps) et l’autre pour les données. En fait, vous pouvez même relier jusqu’à 121 appareils I2C sur les deux mêmes broches – consultez cette page Adafruit pour d’autres appareils I2C que vous pouvez ajouter, car il y en a beaucoup !
commencer
Connectez votre module TinyRTC selon le schéma ci-dessous – le fil DS rose n’est pas nécessaire car c’est le cas pour le capteur de température.
Ensuite, téléchargez les bibliothèques Time et DS1307RTC et placez les dossiers résultants dans votre /bibliothèque dossier.
Quittez et redémarrez l’environnement Arduino pour charger la bibliothèque et les exemples.
Vous trouverez deux exemples dans le menu DS1307RTC : Upload et Run régler le temps Premier exemple – cela réglera le RTC sur 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 initiale de l’heure.
Jetons un coup d’œil à l’exemple d’utilisation test de lecture.
#inclure
#inclure <时间.h>
#inclure
void set() {
série.start(9600);
while(!serial); // attend le numéro de série
retard(200);
Serial.println(« Test de lecture DS1307RTC »);
Serial.println(« ——————-« );
}
boucle vide() {
tmElements_t tm ;
si (RTC.lire(tm)) {
Serial.print(« OK, heure = « );
print2digits(tm.Heure);
Serial.write(‘:’);
print2digits(tm.Minute);
Serial.write(‘:’);
print2digits(tm.Second);
Serial.print(« , date(J/M/A) = « );
Serial.print(tm.Day);
Serial.write(« https://www.ledigitalpost.com/ »);
Serial.print(tm.Month);
Serial.write(« https://www.ledigitalpost.com/ »);
Serial.print(tmYearToCalendar(tm.Year));
numéro de série.println();
} autre {
si (RTC.chipPresent()) {
Serial.println(« DS1307 s’est arrêté. Veuillez exécuter SetTime »);
Serial.println(« Initialisation de l’heure et lancement de l’exemple. »);
numéro de série.println();
} autre {
Serial.println(« Erreur de lecture DS1307 ! Veuillez vérifier le circuit. »);
numéro de série.println();
}
retard (9000);
}
retard(1000);
}
annuler print2digits (entier) {
si (nombre >= 0 && nombre < 10) {
Serial.write(‘0’);
}
numéro de série.print(nombre);
}
Notez que nous incluons également le noyau fil.h Bibliothèques – Cela vient avec l’Arduino et est utilisé pour communiquer via I2C. Téléchargez le code, ouvrez la console série à 9600 bauds et regardez votre Arduino sortir l’heure actuelle toutes les secondes. formidable!
Le code le plus important dans l’exemple consiste à créer un tmElements_t tm – C’est structure nous remplirons l’heure actuelle ; et RTC.lire(tm) Une fonction pour obtenir l’heure actuelle du module RTC, mettez-la dans notre Valeur Tm struct, qui renvoie vrai si tout s’est bien passé. Ajoutez votre code de débogage ou de logique dans l’instruction « if », comme imprimer l’heure ou y réagir.
Maintenant que vous savez comment obtenir l’heure exacte avec un Arduino, vous pouvez essayer de réécrire un projet d’alarme de lever de soleil ou de créer une horloge de mots LED – les possibilités sont infinies ! que vas-tu faire?
Crédit d’image: Snootlab via Flickr
A propos de l’auteur