Comment fabriquer une horloge Arduino Infinity à l'aide du module RTC

Comment fabriquer une horloge Arduino Infinity à l'aide du module RTC

Dans les circuits de synchronisation mondiale électronique modernes, sont très importants. Il en va de même pour Arduino, Arduino a une horloge de minuterie intégrée qui compte à environ 49 jours mais après cela, il réinitialise. Deuxièmement, l'horloge interne Arduino n'est pas précise à 100%; Il y a toujours un certain pourcentage de retard de temps entre l'horloge Arduino et une horloge externe. Donc, si l'on veut créer une horloge précise en utilisant Arduino, nous devons compter sur un module externe appelé RTC (horloge en temps réel). Voyons comment interfacer ce module RTC avec Arduino et créer une horloge numérique précise.

Module RTC avec Arduino

Parfois, travailler sur des projets Arduino a besoin d'une horloge de temps précise pour faire fonctionner Arduino et exécuter des instructions et des commandes spéciales sur une période spécifique. Arduino a une horloge intégrée, mais nous ne pouvons pas compter sur elle à cause des deux raisons suivantes:

    • L'horloge Arduino est inexacte avec une erreur en pourcentage de 0.5-1%.
    • L'horloge Arduino se réinitialise automatiquement une fois la carte réinitialisée.
    • Les horloges Arduino n'ont pas de sauvegarde d'alimentation si Arduino perd l'énergie, son horloge se réinitialise automatiquement.

Compte tenu des raisons susmentionnées, les utilisateurs préfèrent utiliser une horloge matérielle externe ou un module RTC. Ainsi, un module très bon marché et super précis largement utilisé est DS1307. Voyons comment connecter ce RTC à Arduino.

Configuration de la bibliothèque Arduino du module RTC

Pour interfacer Arduino avec le module RTC, nous devons installer certaines bibliothèques nécessaires qui peuvent lire les données du module RTC. Suivez les étapes pour installer les bibliothèques RTC:

    1. Ouvrir IDE
    2. Aller à Section de bibliothèque
    3. Recherche «RTCLIB»
    4. Installer le Ds3231_rtc et Rtclib par Adafruit.

Module DS1307 RTC

Le module DS1307 RTC est basé sur la petite puce d'horloge DS1307 qui prend également en charge le protocole de communication I2C. À l'arrière du module RTC, nous avons une batterie de cellules au lithium. Ce module peut donner des informations précises sur les secondes, les minutes, les heures, le jour, la date, le mois et l'année. Il a également la capacité d'ajustement en temps automatique pendant 31 jours par mois, ainsi que le support d'erreur de l'année du leap. L'horloge peut fonctionner dans un temps d'horloge de 12 heures ou 24 heures sur 24.


Quelques points forts principaux de ce module RTC:

    • Peut travailler sur l'alimentation DC 5V
    • Sortie d'onde carrée qui peut être programmée
    • Détection de rupture de puissance
    • Consommer très moins de courant (500mA)
    • RAM non volatile de 56 octets
    • Sauvegarde de la batterie

Pinout du module RTC

Nom de broche Description
SCL Pin d'entrée d'horloge pour l'interface de communication I2C
SDA Sortie d'entrée de données pour la communication série I2C
VCC POWER PIN varie de 3.3V à 5V
GND Broche
Ds Utilisation de l'entrée du capteur de température
SQW Cette broche peut générer quatre vagues carrées avec une fréquence 1Hz, 4KHz, 8 kHz ou 32 kHz
CHAUVE SOURIS Pin pour la batterie de la batterie si l'alimentation principale interrompue

Schéma

Connectez la carte Arduino avec le module RTC comme indiqué dans le diagramme ci-dessous. Ici, les broches A4 et A5 d'Arduino seront utilisées pour la communication I2C avec les modules RTC tandis que les broches 5V et GND donneront la puissance requise au module RTC.

DS 1307 RTC Pin Épingle arduino
Vin 5V
GND GND
SDA A4
SCL A5

Code

#inclure
#inclure
Rtc_ds3231 real_time_clock;
Temps de charbon [32]; / * Le tableau char est défini * /
void setup()

En série.commencer (9600); / * La communication série commence * /
Fil.commencer(); / * Fichier de bibliothèque pour commencer la communication * /
Real_time_clock.commencer();
Real_time_clock.ajuster (datetime (f (__ date __), f (__ time__)));
/ * real_time_clock.ajuster (DateTime (2022, 09, 26, 1, 58, 0)) * /

VOID LOOP ()

DateTime Now = Real_time_clock.maintenant();
sprintf (temps, "% 02d:% 02d:% 02d% 02d /% 02d /% 02d", maintenant.heure (), maintenant.minute (), maintenant.deuxième (), maintenant.day (), maintenant.mois (), maintenant.année());
En série.print (f ("date / heure:")); / * Cela imprimera la date et l'heure * /
En série.println (temps);
retard (1000); / * Retard de 1 sec * /


Au début du code d'abord, nous avons inclus fil.H & Rtclib pour la communication avec les appareils. Nous avons ensuite créé un objet RTCLIB avec le nom Real_time_clock. Ensuite, nous avons défini un tableau char temps de la longueur 32, qui stockera les informations de date et d'heure.

Dans la fonction de configuration et de boucle, nous avons utilisé la commande suivante pour nous assurer que la communication I2C est établie entre les modules Arduino et RTC.

Fil.commencer et Real_time_clock.commencer assurera et vérifiera la connexion RTC.

ajuster() est une fonction surchargée qui définit la date et l'heure.

DateTime (F (__ Date__), F (__ Time__))


Cette fonction définira la date et l'heure à laquelle Sketch a été compilé.

Le maintenant() Fonctions Retour Date et heure, et sa valeur se stockera en variable "temps".

Heure, minute, deuxième, jour, mois, année, l'année calculera la date exacte et l'imprimera sur le moniteur en série avec un délai de 1 seconde.

Matériel

Sortir

Serial Monitor commencera à imprimer l'heure et la date à laquelle le code est téléchargé à la carte Arduino.

Conclusion

Arduino lui-même a des fonctions liées au temps comme Millis (), Micros (). Cependant, ces fonctions ne donnent pas de temps exact; Il y a toujours une chance de retard de quelques millisecondes. Pour éviter cela pendant l'utilisation de modules externes Arduino RTC sont utilisés. Ces modules tels que DS1307 nous donnent du temps exact avec une sauvegarde de batterie qui peut durer pendant de nombreuses années. Ce guide couvre comment interfacer ces modules RTC avec une carte Arduino.