Uhrzeit auf TM1637 Arduino mit Thermometer

Werfen wir einen Blick auf das Uhr- und Thermometer-Projekt auf dem Arduino mit dem tm1637-Modul und dem DHT11-Temperatursensor. Sie können auch den Schaltplan und die Software für ein ähnliches Weckerprojekt mit dem LCD 1602 Display auf unserer Website finden. Diese Version des Weckerprojekts ist ohne das ds1302 Echtzeituhr RTC-Modul realisiert. Die aktuelle Zeit und die Weckzeit werden mit den Drucktasten eingestellt.




Bestandteile:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • TM1637 Display Modul
  • DHT11 Temperatur- und Luftfeuchtesensor
  • Drucktaste (Button) und Buzzer
  • Breadboard
  • Dupont-Kabel
  • Bibliothek TM1637Display.h und DHT.h

Mit der ersten Taste (angeschlossen an Pin 8) gelangt man in den Einstellungsmodus der Uhr, zunächst wird die aktuelle Uhrzeit eingestellt, der zweite Klick auf die Taste stellt die Alarmzeit ein. Ein dritter Klick auf den ersten Taster verlässt den Einstellungsmodus und speichert die eingegebenen Daten im RAM. Im Einstellmodus wird mit der zweiten Taste (Pin 9) die Uhrzeit eingestellt, mit der dritten Taste (Pin 10) die Minuten.

Uhr Arduino auf TM1637-Modul mit Thermometer

Uhr Arduino auf TM1637-Modul mit Thermometer

Wenn sich das Programm außerhalb des Einstellmodus befindet, wird durch Drücken der zweiten Taste der Alarm aktiviert/deaktiviert, wobei der aktuelle Alarmstatus ON/OFF auf dem vierstelligen Display des tm1637 angezeigt wird. Wenn die dritte Taste gedrückt wird, zeigt das Display die Lufttemperatur an. Nachdem Sie das Weckerprojekt auf dem Arduino Uno mit Temperatur erstellt haben, laden Sie das folgende Programm.

Programm Arduino für Uhr auf TM1637 mit DHT11-Sensor





#include "TM1637Display.h"
TM1637Display display(3, 2); // CLC, DIO

#include "DHT.h"
DHT dht(7, DHT11);

// Variablen für die Uhr und den Wecker
byte HOUR = 13;
byte MIN = 21;
byte SEC = 0;
byte HOUR_A = 13;
byte MIN_A = 55;

#define HZ 100 // Buzzer-Frequenz
byte s = 2; // wie viele Sekunden die Temperatur angezeigt werden soll

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);
  pinMode(9, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(5, OUTPUT);
  dht.begin();
  display.setBrightness(2); // Display-Helligkeit von 0 bis 7
  timer = millis();
}

void loop() {
  noTone(5);
  int t = dht.readTemperature();

  // Timing-Funktion
  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);

  // wenn Taste 1 gedrückt wird, Einstellungen eingeben (while)
  if (button1WasUp && !button1IsUp) {
    delay(10); button1IsUp = digitalRead(8);
    if (!button1IsUp) { w = 1; }
  } button1WasUp = button1IsUp;

  // wenn Taste 2 gedrückt wird, wird der Alarmstatus geändert
  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;

  // wenn die Taste 3 gedrückt wird, wird die Temperatur angezeigt
  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;

    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; }
    }
  }
 
}
  1. Die Piepserfrequenz und die Displayhelligkeit werden in der Software eingestellt;
  2. Das Variablenbyte s = 2; ist für die Temperaturanzeigezeit in Sekunden zuständig.

Schlussfolgerung. Diese Version des tm1637 Weckers verwendet kein Echtzeituhrmodul. Wenn Sie also den Arduino Mikrocontroller zurücksetzen oder ausschalten, werden die ursprünglichen Zeitwerte, die zu Beginn des Programms angegeben wurden, eingestellt. Wenn Sie Fragen zur Funktionsweise des Programms oder zum Aufbau des Projekts haben, können Sie sie in den Kommentaren zu diesem Beitrag stellen.

5/5 - (1 vote)


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert