Objectif du projet
L’objectif de ce projet est de créer une horloge numérique précise en utilisant la carte Arduino UNO, le module DS1302 RTC Module et un afficheur LCD I2C 20x4 Display. Cette horloge permet d’afficher l’heure et la date en temps réel sur l’écran LCD. Le projet aide à apprendre la communication entre un microcontrôleur, un module d’horloge temps réel et un afficheur, ainsi que la gestion du temps dans un système embarqué.
Fonctionnement du projet
Le module RTC DS1302 est utilisé pour garder l’heure et la date exactes, même lorsque la carte Arduino est éteinte, grâce à sa pile intégrée. La carte Arduino UNO communique avec le module RTC pour lire les informations de temps, comme les heures, les minutes, les secondes, le jour, le mois et l’année.
Ensuite, la carte Arduino traite ces données et les envoie à l’afficheur LCD I2C. L’écran LCD affiche clairement l’heure et la date, ce qui permet à l’utilisateur de visualiser les informations en temps réel.
Le programme Arduino s’exécute en boucle continue. Il lit régulièrement l’heure depuis le module RTC et met à jour l’affichage sur l’écran LCD, assurant ainsi que l’horloge reste toujours précise et à jour.
1- Carte Arduino UNO

La carte Arduino UNO est le composant principal du projet. C’est un microcontrôleur qui permet de contrôler tous les autres composants. Elle lit les informations envoyées par le module RTC DS1302 et envoie les données de l’heure et de la date vers l’afficheur LCD I2C. Elle exécute le programme qui gère le fonctionnement de l’horloge.
2. Module RTC DS1302

Le module RTC DS1302 est un composant électronique qui permet de garder et de fournir l’heure et la date en temps réel. Il est souvent utilisé avec des cartes programmables comme la Micro:bit, Arduino UNO ou ESP32 pour créer des horloges numériques, des réveils ou des systèmes automatisés.
3. Afficheur LCD I2C

L’afficheur LCD I2C sert à afficher les heures, minutes, secondes et la date
4. Câbles de Connexion (Jumper Wires)

Les fils de connexion assurent la liaison entre la carte Arduino UNO, le module RTC DS1302 et l’afficheur LCD. Ils permettent de relier les broches d’entrée/sortie et d’alimentation.
6- Breadboard (Plaque d'essai) :

Une breadboard est utile pour créer un circuit temporaire et connecter facilement les composants entre eux.


1- Connexion du module RTC DS1302 à la carte Arduino UNO
| RTC DS1302 | Arduino UNO |
|---|---|
| CLK | pin 5 |
| DAT | pin 6 |
| RST | pin 7 |
| GND | GND |
| VCC | 3.3V |
2- Connexion de l’afficheur LCD I2C à la carte Arduino UNO
| Afficheur LCD I2C | Arduino UNO |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | pin A4 |
| SCL | pin A5 |
Ce programme permet de :
1- lire l’heure et la date depuis le module RTC DS1302.
2- afficher l’heure, la date et le jour de la semaine sur un écran LCD I2C 20x4.
3- Fournir une horloge digitale fiable fonctionnant en temps réel.
On commence par l’importation de ces bibliothèques:
LiquidCrystal_I2C → pour afficher les informations sur l’écran LCD I2C
ErriezDS1302-master → pour contrôler le module RTC DS1302
Voici le code en Arduino qui implémente le fonctionnement du système :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
// Inclusion de la bibliothèque pour le module RTC DS1302 #include <ErriezDS1302.h> // Inclusion de la bibliothèque pour l'écran LCD I2C #include <LiquidCrystal_I2C.h> // =============================== // Configuration RTC DS1302 // =============================== // Définition des broches utilisées pour le module RTC #define CLK_PIN 5 // Broche CLK (horloge) #define IO_PIN 6 // Broche IO (données) #define CE_PIN 7 // Broche CE (activation) // Création de l'objet RTC avec les broches définies ErriezDS1302 rtc(CLK_PIN, IO_PIN, CE_PIN); // =============================== // Configuration LCD I2C 20x4 // =============================== // Adresse I2C = 0x27 // 20 colonnes et 4 lignes LiquidCrystal_I2C lcd(0x27, 20, 4); // Tableau contenant les noms des jours de la semaine const char* jours[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; // =============================== // Fonction setup (exécutée une seule fois) // =============================== void setup() { // Initialisation de la communication série Serial.begin(9600); // Initialisation de l'écran LCD lcd.init(); // Démarrer le LCD lcd.backlight(); // Allumer le rétroéclairage lcd.clear(); // Effacer l'écran // Initialisation du module RTC if (!rtc.begin()) { // Afficher un message d'erreur si le RTC n'est pas détecté lcd.setCursor(0, 0); lcd.print("RTC not detected"); // Bloquer le programme while (1); } // Activer l'horloge du RTC rtc.clockEnable(true); // ⚠️ Régler l'heure UNE SEULE FOIS puis commenter cette ligne // Format : // heure, minute, seconde, jour, mois, annee, jour_semaine rtc.setDateTime(14, 30, 0, 8, 2, 2026, 1); // Exemple : Lundi // Message de confirmation lcd.setCursor(0, 0); lcd.print("RTC initialise"); delay(2000); // Effacer l'écran lcd.clear(); } // =============================== // Fonction loop (exécutée en boucle) // =============================== void loop() { // Déclaration des variables pour stocker la date et l'heure uint8_t hour, min, sec, day, mon, wday; uint16_t year; // Lire la date et l'heure depuis le module RTC if (rtc.getDateTime(&hour, &min, &sec, &day, &mon, &year, &wday)) { // Afficher le titre lcd.setCursor(0, 0); lcd.print("Arduino Clock"); // =============================== // Affichage de la date // =============================== lcd.setCursor(0, 1); lcd.print("Date: "); // Ajouter un 0 si le jour < 10 if (day < 10) lcd.print("0"); lcd.print(day); lcd.print("/"); // Ajouter un 0 si le mois < 10 if (mon < 10) lcd.print("0"); lcd.print(mon); lcd.print("/"); // Afficher l'année lcd.print(year); // =============================== // Affichage du jour // =============================== lcd.setCursor(0, 2); lcd.print("Day: "); // Afficher le nom du jour depuis le tableau lcd.print(jours[wday]); // =============================== // Affichage de l'heure // =============================== lcd.setCursor(0, 3); lcd.print("Hour: "); // Ajouter un 0 si l'heure < 10 if (hour < 10) lcd.print("0"); lcd.print(hour); lcd.print(":"); // Ajouter un 0 si la minute < 10 if (min < 10) lcd.print("0"); lcd.print(min); lcd.print(":"); // Ajouter un 0 si la seconde < 10 if (sec < 10) lcd.print("0"); lcd.print(sec); } else { // Afficher un message d'erreur si la lecture échoue lcd.clear(); lcd.setCursor(0, 0); lcd.print("Error RTC"); } // Attendre 1 seconde avant la prochaine mise à jour delay(1000); } |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info