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