SOMMAIRE ►
Horloge Arduino sans RTC module d’horloge en temps réel (Real Time Clock) avec sortie vers un afficheur LCD 1602 i2c – ce projet permet de régler l’heure (heures et minutes) et l’heure de l’alarme. Pour cela, on utilise deux boutons-poussoir d’horloge (pour changer les modes de réglage) et le buzzer de l’Arduino pour le signal sonore. Le projet contient un schéma de l’assemblage du dispositif ainsi qu’un programme de la carte Arduino de travail.
Ce dont vous aurez besoin
- Arduino Uno / Arduino Nano / Arduino Mega;
- afficheur LCD 1602 i2c
- boutons-poussoirs
- passif ou actif buzzer
- breadboard
- fils de connexion
- le librairie LiquidCrystal_I2C.h
Matériel supplémentaire sur ce sujet:
Horloge Arduino LCD 16×02 sans module RTC
Ce projet nécessite un minimum de pièces: un écran 1602 avec module i2c (vous pouvez connecter un écran sans i2c si vous le souhaitez), deux boutons d’horloge et un haut-parleur piézo. Les boutons sont connectés aux broches du microcontrôleur Arduino configuré en mode INPUT_PULLUP – avec cette méthode de connexion, vous pouvez lire le nombre de pressions sur le bouton, et aucune résistance n’est nécessaire pour l’assemblage.
Schéma de câblage horloge sans module RTC

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Si vous utilisez un Arduino Mega, sur cette carte, les ports SDA et SCL pour la connexion de l’écran sont situés sur les broches 20 et 21. La carte Arduino Nano a le même brochage que l’Uno et le LCD 1602 est connecté aux broches A4 (SDA) et A5 (SCL). Le réveil émet un bip pendant 1 minute et vous pouvez appuyer sur le bouton connecté au port 8 pour l’éteindre. Après avoir assemblé le schéma de câblage, chargez le programme suivant dans la carte.
Programme Arduino pour horloge sans module RTC
#include "Wire.h" #include "LiquidCrystal_I2C.h" LiquidCrystal_I2C LCD(0x27, 20, 2); // valeurs initiales de l'heure et du réveil byte SEC = 0; byte MIN = 34; byte HOUR = 12; byte MIN_A = 35; byte HOUR_A = 12; unsigned long timer; boolean button1WasUp = true; boolean button2WasUp = true; boolean button1IsUp; boolean button2IsUp; boolean alarm = true; byte c1, c2, c3, w, i; // icône d'alarme byte bell [8] = { 0b11000, 0b11110, 0b01100, 0b01000, 0b00000, 0b00000, 0b00000, 0b00000, }; void setup() { pinMode(9, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(5, OUTPUT); LCD.init(); LCD.backlight(); LCD.createChar(1, bell); timer = millis(); } void loop() { button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) { SEC = 0; w = 1; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) { alarm = false; } } button2WasUp = button2IsUp; if (millis() - timer > 1000) { timer = millis(); SEC++; if (SEC > 59) { SEC = 0; MIN++; } if (MIN > 59) { MIN = 0; HOUR++; } if (HOUR > 23) { HOUR = 0; } if (alarm == true && HOUR == HOUR_A && MIN == MIN_A && i < 60) { tone(5, 50); i++; } if (i >= 60) { noTone(5); alarm == false; i = 0; } if (HOUR < 10) { c1 = 5; } if (HOUR >= 10) { c1 = 4; } if (MIN < 10) { c2 = 8; } if (MIN >= 10) { c2 = 7; } if (SEC < 10) { c3 = 11; } if (SEC >= 10) { c3 = 10; } LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("0"); LCD.setCursor(c3, 0); LCD.print(SEC); if (alarm == true) { LCD.print(char(1)); } if (alarm == false) { LCD.print(" "); } noTone(5); } while (w == 1) { if (HOUR > 23) { HOUR = 0; } if (HOUR < 10) { c1 = 5; } if (HOUR >= 10) { c1 = 4; } if (MIN < 10) { c2 = 8; } if (MIN >= 10) { c2 = 7; } LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) { LCD.print(char(1)); } if (alarm == false) { LCD.print(" "); } LCD.setCursor(2, 1); LCD.print("HOUR SETTING"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) { LCD.clear(); w = 2; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) { HOUR++; } } button2WasUp = button2IsUp; } while (w == 2) { if (MIN > 59) { MIN = 0;} if (HOUR < 10) { c1 = 5; } if (HOUR >= 10) { c1 = 4; } if (MIN < 10) { c2 = 8; } if (MIN >= 10) { c2 = 7; } LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) { LCD.print(char(1)); } if (alarm == false) { LCD.print(" "); } LCD.setCursor(1, 1); LCD.print("MINUTE SETTING"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) { LCD.clear(); w = 3; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) { MIN++; } } button2WasUp = button2IsUp; } while (w == 3) { if (MIN_A > 59) { MIN_A = 0; HOUR_A++; } if (HOUR_A > 23) { HOUR_A = 0; } if (HOUR_A < 10) { c1 = 5; } if (HOUR_A >= 10) { c1 = 4; } if (MIN_A < 10) { c2 = 8; } if (MIN_A >= 10) { c2 = 7; } LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR_A); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN_A); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) { LCD.print(char(1)); LCD.setCursor(4, 1); LCD.print("ALARM ON "); } if (alarm == false) { LCD.print(" "); LCD.setCursor(4, 1); LCD.print("ALARM OFF"); } button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) { LCD.clear(); w = 4; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) { alarm = !alarm; } } button2WasUp = button2IsUp; } while (w == 4) { if (MIN_A > 59) { MIN_A = 0; HOUR_A++; } if (HOUR_A > 23) { HOUR_A = 0; } if (HOUR_A < 10) { c1 = 5; } if (HOUR_A >= 10) { c1 = 4; } if (MIN_A < 10) { c2 = 8; } if (MIN_A >= 10) { c2 = 7; } LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR_A); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN_A); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) { LCD.print(char(1)); } if (alarm == false) { LCD.print(" "); } LCD.setCursor(1, 1); LCD.print("ALARM SET HOUR"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) { LCD.clear(); w = 5; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) { HOUR_A++; } } button2WasUp = button2IsUp; } while (w == 5) { if (MIN_A > 59) { MIN_A = 0; HOUR_A++; } if (HOUR_A > 23) { HOUR_A = 0; } if (HOUR_A < 10) { c1 = 5; } if (HOUR_A >= 10) { c1 = 4; } if (MIN_A < 10) { c2 = 8; } if (MIN_A >= 10) { c2 = 7; } LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR_A); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN_A); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) { LCD.print(char(1)); } if (alarm == false) { LCD.print(" "); } LCD.setCursor(0, 1); LCD.print("ALARM SET MINUTE"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) { LCD.clear(); w = 0; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) { MIN_A++; } } button2WasUp = button2IsUp; } }
Explication du code pour horloge sans RTC:
- pendant le réglage de l’horloge et du réveil, la minuterie s’arrête;
- les variables c1 et c2 sont responsables de la position du curseur lorsque l’heure et les minutes sont affichées à l’écran, selon qu’un nombre à deux ou à un chiffre est stocké dans la variable.
Conclusion. Une horloge sans module RTC (Real Time Clock) remettra l’heure aux valeurs d’origine lorsque l’alimentation est coupée, c’est pourquoi des boutons ont été ajoutés au projet. Ils peuvent être utilisés pour régler l’horloge sans avoir à recharger le croquis – un projet Arduino simple pour les débutants en programmation. Vous pouvez également ajouter un capteur DHT22 ou BMP180 pour afficher la température à l’écran LCD 1602 i2c.








Bonjour,
comme il etait ecris sur cette page et il etait ecris que cela allait pour les cartes uno mais moi j’ai une carte uno mais ca a ecris ca au moment du televersement: exit status 1
Merci de me dire pourquoi…
Écrivez le message d’erreur qui apparaît dans l’IDE Arduino
Après avoir assemblé le schéma de câblage, chargez le programme suivant dans la carte.
ok mais comment
merci
Pour charger (téléverser) un programme dans un arduino il faut :
– Le logiciel (IDE arduino) que vous trouverez ici gratuitement:
https://arduino.cc/en/software
(au jour ou j’écris ces lignes on en est à la version 2.0.3)
– Brancher votre carte sur un port usb
– Choisir « le type de carte » et le « port » dans l’IDE onglet « Outils »
– Copier/écrire du code
– Dans l’onglet « Croquis » choisir téléverser
– Et si tout a été fait correctement votre carte va faire ce que vous lui avez demandé