Проект будильника с термометром на Ардуино с модулем tm1637 и датчиком температуры DHT11. Также на нашем сайте вы можете найти похожий проект часов и будильника на LCD 1602, Данный вариант проекта будильника реализован без модуля ds1302 часов реального времени RTC. Настройка текущего времени и время срабатывания звукового сигнала производится с помощью тактовых кнопок.
Для этого проекта потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- модуль tm1637;
- датчик температуры DHT11 / DHT22;
- 3 тактовые кнопки;
- пьезодинамик;
- макетная плата;
- провода «папа-мама», «папа-папа».
Ардуино будильник на tm1637 с термометром

Первая кнопка (подключена к пину 8) служит для входа в режим настроек, сначала настраивается текущее время, при втором клике на кнопку устанавливается время включения будильника. При третьем клике на кнопку происходит выход из режима настроек с сохранением введенных данных. В режиме настроек вторая кнопка (подключена к пину 9) настраивает часы, третья кнопка (пин 10) настраивает минуты.
При нажатии на вторую кнопку, когда программа находится вне режима настроек — включается/выключается будильник, с выводом текущего состояния будильника ON/OFF на четырехразрядный дисплей tm1637. При нажатии на третью кнопку на дисплее отображается температура воздуха. После сборки проекта будильника на Arduino Uno с температурой, загрузите следующую программу в микроконтроллер.
Скетч будильника с термометром на Arduino
#include "TM1637Display.h" TM1637Display display(3, 2); // CLC, DIO #include "DHT.h" DHT dht(7, DHT11); // переменные для часов и будильника byte HOUR = 13; byte MIN = 21; byte SEC = 0; byte HOUR_A = 13; byte MIN_A = 55; #define HZ 100 // частота зуммера byte s = 2; // сколько секунд показывать температуру 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); // яркость дисплея от 0 до 7 timer = millis(); } void loop() { noTone(5); int t = dht.readTemperature(); // функция отсчета времени 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); // если кнопка 1 нажата, заходим в настройки (while) if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(8); if (!button1IsUp) { w = 1; } } button1WasUp = button1IsUp; // если кнопка 2 нажата, меняем состояние будильника 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; // если кнопка 3 нажата, выводим температуру на дисплей 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; } } } }
Пояснения к коду:
- частота звукового сигнала и яркость дисплея устанавливаются в программе;
- переменная byte s = 2; отвечает за время индикации температуры в секундах.
Заключение. В данном варианте часов с будильником на tm1637 не используется модуль часов реального времени, поэтому при перезагрузке или отключении питания микроконтроллера Ардуино будут устанавливаться первоначальные значения времени, указанные в начале программе. Если у вас есть вопросы по работе программы или сборке схемы проекта — оставляйте их в комментариях к этой записи.










Скетч выдаёт ошибку
exit status 1
Ошибка компиляции для платы Arduino Uno.
Очень хотелось бы увидеть проэкт ,похожий на этот но с выводом на экран по i2c 2×16
и как подключать дисплей?