Projet de réveil avec thermomètre sur Arduino avec module tm1637 et capteur de température DHT11 ou DHT22. Vous trouverez également sur notre site un projet similaire pour un thermomètre et un réveil sur LCD 1602. Ce projet de réveil est implémenté sans le module ds1302 real time clock. Les boutons-poussoirs permettent de régler l’heure actuelle et l’heure de l’alarme. La fréquence du buzzer et la luminosité de l’écran sont réglées dans le code.
Ce dont vous aurez besoin
- Arduino Uno / Arduino Nano / Arduino Pro Mini
- module display TM1637
- capteur DHT22 ou DHT11
- boutons-poussoirs
- passif ou actif buzzer
- breadboard
- librairies TM1637Display.h et DHT.h
Matériel supplémentaire sur ce sujet:
Thermomètre Arduino sur afficheur TM1637
Le premier bouton (connecté à la broche 8 Arduino) est utilisé pour entrer dans le mode de réglage, l’heure actuelle est d’abord réglée, le deuxième clic sur le bouton règle l’heure de l’alarme. Un troisième clic sur le bouton permet de quitter le mode de réglage et de sauvegarder les données saisies. En mode réglages, le deuxième bouton (connecté à la broche 9) règle l’horloge, le troisième bouton (connecté à la broche 10) règle les minutes.

Lorsque le programme n’est pas en mode réglage, une pression sur le deuxième bouton (connecté à la pin 9) active/désactive l’alarme et affiche l’état actuel de l’alarme ON/OFF sur l’écran à quatre chiffres du tm1637. En appuyant sur le troisième bouton (connecté à la pin 10), la température de l’air s’affiche. Après avoir assemblé le projet de réveil sur l’Arduino Uno avec la température, chargez le programme suivant dans le microcontrôleur.
Programme Arduino reveil/horloge sur tm1637
#include "TM1637Display.h" TM1637Display display(3, 2); // CLC, DIO #include "DHT.h" DHT dht(7, DHT11); // paramètres de l'horloge et de l'alarme byte HOUR = 13; byte MIN = 21; byte SEC = 0; byte HOUR_A = 13; byte MIN_A = 55; #define HZ 100 // fréquence du son du buzzer byte s = 2; // secondes d'affichage de la température boolean button1WasUp = true; boolean button2WasUp = true; boolean button3WasUp = true; boolean button1IsUp; boolean button2IsUp; boolean button3IsUp; boolean alarm = true; unsigned long timer; byte w, i; const uint8_t C[] = { SEG_B | SEG_A | SEG_F | SEG_G, SEG_A | SEG_D | SEG_E | SEG_F }; const uint8_t ON[] = { SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, SEG_A | SEG_B | SEG_C | SEG_E | SEG_F }; const uint8_t OFF[] = { SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, SEG_A | SEG_G | SEG_E | SEG_F, SEG_A | SEG_G | SEG_E | SEG_F }; void setup() { pinMode(10, INPUT_PULLUP); // boutons pinMode(9, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(5, OUTPUT); // zummer dht.begin(); display.setBrightness(2); // luminosité de l'écran de 0 à 7 timer = millis(); } void loop() { noTone(5); int t = dht.readTemperature(); // fonction de décompte des secondes et de l'heure if (millis() - timer > 1000) { timer = millis(); SEC++; if (SEC > 59) { SEC = 0; MIN++; } if (MIN > 59) { MIN = 0; HOUR++; } if (HOUR > 23) { HOUR = 0; } display.showNumberDecEx(MIN, 0b01000000, true, 2, 2); } button1IsUp = digitalRead(8); button2IsUp = digitalRead(9); button3IsUp = digitalRead(10); // si le bouton 1 est pressé, aller aux réglages (while) if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(8); if (!button1IsUp) { w = 1; } } button1WasUp = button1IsUp; // si le bouton 2 est pressé, activer/désactiver l'alarme if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(9); if (!button2IsUp) { alarm = !alarm; i = 0; display.clear(); if (alarm == true) { display.setSegments(ON, 2, 2); } if (alarm == false) { display.setSegments(OFF, 3, 1); } while (i < s) { if (millis() - timer > 1000) { timer = millis(); SEC++; i++; } } } } button2WasUp = button2IsUp; // si le bouton 3 est pressé, affichage de la température if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(10); if (!button3IsUp) { i = 0; display.clear(); while (i < s) { if (millis() - timer > 1000) { timer = millis(); SEC++; i++; } display.showNumberDecEx(t, 0b00000000, false, 2, 0); display.setSegments(C, 2, 2); } } } button3WasUp = button3IsUp; // activation de l'alarme if (alarm == true && HOUR == HOUR_A && MIN >= MIN_A) { tone(5, HZ); delay(50); } display.showNumberDecEx(HOUR, 0b00000000, true, 2, 0); while (w == 1) { button1IsUp = digitalRead(8); button2IsUp = digitalRead(9); button3IsUp = digitalRead(10); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(8); if (!button1IsUp) { w = 2; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(9); if (!button2IsUp) { HOUR++; if (HOUR > 23) HOUR = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(10); if (!button3IsUp) { MIN++; if (MIN > 59) MIN = 0; } } button3WasUp = button3IsUp; display.showNumberDecEx(HOUR, 0b01000000, true, 2, 0); display.showNumberDecEx(MIN, 0b01000000, true, 2, 2); if (millis() - timer > 1000) { timer = millis(); SEC++; if (SEC > 59) { SEC = 0; MIN++; } if (MIN > 59) { MIN = 0; HOUR++; } if (HOUR > 23) { HOUR = 0; } } } while (w == 2) { button1IsUp = digitalRead(8); button2IsUp = digitalRead(9); button3IsUp = digitalRead(10); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(8); if (!button1IsUp) { w = 0; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(9); if (!button2IsUp) { HOUR_A++; if (HOUR_A > 23) HOUR_A = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(10); if (!button3IsUp) { MIN_A++; if (MIN_A > 59) MIN_A = 0; } } button3WasUp = button3IsUp; display.showNumberDecEx(HOUR_A, 0b00000000, true, 2, 0); display.showNumberDecEx(MIN_A, 0b00000000, true, 2, 2); if (millis() - timer > 1000) { timer = millis(); SEC++; if (SEC > 59) { SEC = 0; MIN++;} if (MIN > 59) { MIN = 0; HOUR++; } if (HOUR > 23) { HOUR = 0; } } } }
Explication du code pour réveil Arduino sur tm1637:
- la variable byte s = 2; est responsable de la durée d’affichage de la température en secondes;
- en savoir plus sur le fonctionnement du module tm1637 sur notre site web.
Conclusion. Cette version du réveil Arduino tm1637 n’utilise pas le module d’horloge en temps réel. Ainsi, lorsque vous réinitialisez ou éteignez le Arduino, les valeurs de l’heure d’origine sont rétablies au début du programme. Si vous avez des questions sur le fonctionnement du code ou le montage du circuit du projet – laissez-les dans les commentaires de ce post.








petite erreur de pin DHT11,c’est Pin 7 , je pense que tout le monde a du rectifier!
Merci. Correction du circuit de réveil sur le TM1637