
Интернет-магазин «Неглупый Дом»
Модуль часов реального времени DS1302 хранит точное время даже при перезагрузке Arduino, индикатор TM1637 показывает его, а активный зуммер включается в заданный час будильника.
DS1302 — это отдельная микросхема часов реального времени (RTC) со своей батарейкой-таблеткой CR2032: она продолжает отсчитывать секунды, минуты и часы даже когда Arduino обесточен или перепрошивается. Без такого модуля Arduino "забывает" время при каждом отключении от питания, потому что у неё самой нет встроенных часов — только счётчик миллисекунд с момента включения. DS1302 общается с Arduino не по I2C, а по собственному трёхпроводному протоколу (поэтому в коде используется библиотека ThreeWire, а не Wire).
Индикатор TM1637 — это 4-разрядный семисегментный дисплей со встроенным драйвером: он сам занимается "зажиганием" нужных сегментов нужных цифр, а Arduino лишь посылает ему готовое число по двум проводам (CLK и DIO), что намного проще, чем управлять голыми семисегментными индикаторами напрямую. Активный зуммер в этой связке — самый простой компонент: на нём уже есть собственный генератор звука, поэтому достаточно просто подать на сигнальный пин высокий уровень (HIGH), и он сразу начнёт пищать на фиксированной частоте.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <ThreeWire.h> // трёхпроводный протокол, которым DS1302 общается с Arduino
#include <RtcDS1302.h> // библиотека конкретно под часы реального времени DS1302
#include <TM1637Display.h> // библиотека для 4-разрядного индикатора TM1637
ThreeWire myWire(4, 5, 2); // пины DAT, CLK, RST модуля DS1302
RtcDS1302<ThreeWire> Rtc(myWire); // объект часов, работающий поверх этой шины
TM1637Display display(3, 6); // пины CLK, DIO индикатора TM1637
const int buzzerPin = 7; // пин зуммера
const int alarmHour = 7; // час срабатывания будильника
const int alarmMinute = 0; // минута срабатывания будильника
void setup() {
Rtc.Begin(); // запускаем модуль часов
pinMode(buzzerPin, OUTPUT); // зуммер — выход
if (!Rtc.IsDateTimeValid()) {
// если часы ещё не были настроены (первая прошивка) — берём время компьютера на момент компиляции
Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__));
}
}
void loop() {
RtcDateTime now = Rtc.GetDateTime(); // читаем текущее время из модуля
int h = now.Hour();
int m = now.Minute();
// показываем часы и минуты на индикаторе с двоеточием посередине (0b01000000 — бит двоеточия)
display.showNumberDecEx(h * 100 + m, 0b01000000, true);
// зуммер включается только в момент совпадения часа и минуты будильника
digitalWrite(buzzerPin, (h == alarmHour && m == alarmMinute) ? HIGH : LOW);
delay(1000); // обновляем раз в секунду
}
Библиотеки RtcDS1302 (от Makuna) и TM1637Display ставятся через Менеджер библиотек Arduino IDE (Скетч → Подключить библиотеку → Управлять библиотеками).
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 3 товара сразу в корзину: 237 ₽ 213 ₽ (экономия 24 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.