🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


⏰ Проект: часы-будильник на DS1302, TM1637 и зуммере

Схема часов-будильника на DS1302, TM1637 и зуммере

Модуль часов реального времени DS1302 хранит точное время даже при перезагрузке Arduino, индикатор TM1637 показывает его, а активный зуммер включается в заданный час будильника.

Как это работает

DS1302 — это отдельная микросхема часов реального времени (RTC) со своей батарейкой-таблеткой CR2032: она продолжает отсчитывать секунды, минуты и часы даже когда Arduino обесточен или перепрошивается. Без такого модуля Arduino "забывает" время при каждом отключении от питания, потому что у неё самой нет встроенных часов — только счётчик миллисекунд с момента включения. DS1302 общается с Arduino не по I2C, а по собственному трёхпроводному протоколу (поэтому в коде используется библиотека ThreeWire, а не Wire).

Индикатор TM1637 — это 4-разрядный семисегментный дисплей со встроенным драйвером: он сам занимается "зажиганием" нужных сегментов нужных цифр, а Arduino лишь посылает ему готовое число по двум проводам (CLK и DIO), что намного проще, чем управлять голыми семисегментными индикаторами напрямую. Активный зуммер в этой связке — самый простой компонент: на нём уже есть собственный генератор звука, поэтому достаточно просто подать на сигнальный пин высокий уровень (HIGH), и он сразу начнёт пищать на фиксированной частоте.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Подключите DS1302: CLK → D5, DAT → D4, RST → D2, VCC → 5V, GND → GND.
  2. Подключите TM1637: CLK → D3, DIO → D6, VCC → 5V, GND → GND.
  3. Подключите активный зуммер: сигнальный контакт (обычно подписан «S» или «+») → D7, второй контакт → GND. Если зуммер с двумя одинаковыми выводами без полярности — не перепутайте активный зуммер с пассивным: активный пищит сам при подаче питания, пассивному для звука нужен отдельный сигнал нужной частоты.
  4. При первой прошивке скетч сам запишет в DS1302 текущее время компьютера (строка с `__DATE__`/`__TIME__`) — после этого модуль держит время от своей батарейки, и повторная заливка скетча время не собьёт, пока в коде не поменять эту логику.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

#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: Электронные модули.

← 🌡️ термометр на DS18B20 с выводом на LCD1602🌱 автополив по датчику влажности почвы YL-69 →

🎁 Купить весь комплект со скидкой 10%

Все 3 товара сразу в корзину: 237 ₽ 213 ₽ (экономия 24 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA