Arduino réveil avec un thermomètre

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:

  1. Thermomètre Arduino sur display TM1637
  2. Branchement module display TM1637 Arduino
  3. Comment connecter capteur DHT11 à Arduino

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.

Fabrication réveil avec un thermomètre Arduino et tm1637
Fabrication d’un réveil avec un thermomètre Arduino et tm1637

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:

  1. la variable byte s = 2; est responsable de la durée d’affichage de la température en secondes;
  2. 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.





2 Replies to “Fabrication d’un réveil Arduino sur tm1637”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.