Самодельные часы с кукушкой и боем на Arduino

Улучшенная версия часов с кукушкой и Кремлёвскими курантами. DS3231, DFPlayer Mini, 4-значный 7-сегмент, servo. Полные/короткие куранты, кукушка, ночной режим.

Самодельные часы с кукушкой и боем курантов

Рад приветствовать на своём канале моих подписчиков и просто заглянувших посмотреть, что же здесь такого. Надеюсь, что вы тоже подпишитесь на канал. Приятного просмотра.
Сегодня я хочу вернуться к теме часов с кукушкой. Когда-то давно я уже снимал такое видео, но по просьбе подписчиков сделал новое видео и немного улучшил его. У вас будет возможность сравнить два варианта с кукушкой и с боем курантов, но вы можете записать любые звуки и использовать их в часах.

Демонстрация

Давайте посмотрим, как работают часы. Ссылка на скетч и на использованные библиотеки будет, как всегда, в описании, хотя эти библиотеки вы можете сами найти в менеджере библиотек программы Arduino IDE. Так же там будут лежать архивы со звуковыми файлами, которые были использованы в этих примерах. Всего там три архива:

  • Полная версия Кремлёвских курантов
  • Короткая версия (без вступления)
  • Звуки кукушки

Полные куранты

Сначала два примера боя курантов из полной версии. Сначала часы сработают при наступлении пяти часов. Затем — 11 часов.

Короткие куранты

Звуковые файлы из второго архива, где отрезано вступление. Пример: 12 часов (самое длинное), 2 часа (короткое).

Кукушка

Переделанный старый пример (был TM1637). Теперь 7-сегмент. Пример: 9 кукушек.

Схема подключения

  • DS3231 (RTC): I2C → A4/A5
  • DFPlayer Mini: RX/TX → D2/D3 (SoftwareSerial), SPK → динамик/усилитель
  • 7-сегмент 4-цифры: сегменты A-G+DP → D4–D11, разряды → D12–A0 (пример)
  • Усилитель + колонки (стерео)
  • Питание: 5 В ≥2 А

В схеме ничего нового нет. Для вывода использован семисегментный индикатор на четыре цифры. Библиотека поддерживает общий анод/катод.

Библиотеки

  • SevSeg (7-сегмент)
  • RTClib (DS3231)
  • SoftwareSerial
  • DFRobotDFPlayerMini (GitHub)

Скетч

#include <SevSeg.h>
#include <RTClib.h>
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>

SevSeg sevseg;
RTC_DS3231 rtc;
SoftwareSerial ss(2, 3); // RX, TX
DFRobotDFPlayerMini player;

byte numDigits = 4;
byte digitPins[] = {12, 13, A0, A1}; // разряды
byte segmentPins[] = {4,5,6,7,8,9,10,11}; // A-G DP
bool resistorsOnSegments = false;
bool commonAnode = true; // или false
bool updateWithDelays = false;
bool leadingZeros = true;
bool disableDecPoint = false;

void setup() {
  ss.begin(9600);
  if (!player.begin(ss)) {
    Serial.println("DFPlayer ошибка!");
    while(true);
  }
  player.volume(15); // 0-30
  player.EQ(DFPLAYER_EQ_BASS);
  rtc.begin();
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // авто
  // rtc.adjust(DateTime(2025,11,17,12,0,0)); // ручное

  sevseg.begin(commonAnode ? COMMON_ANODE : COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
  sevseg.setBrightness(90);
}

void loop() {
  DateTime now = rtc.now();
  int hhmm = now.hour() * 100 + now.minute();

  sevseg.setNumber(hhmm, (now.second() % 2) ? 2 : -1); // мигание :
  sevseg.refreshDisplay();

  if (now.minute() == 0 && now.second() == 0) {
    int vol = (now.hour() >= 8 && now.hour() < 22) ? 20 : 10; // день/ночь
    player.volume(vol);
    switch (now.hour() % 12 ? now.hour() % 12 : 12) {
      case 1: player.play(1); break; // 1.mp3
      case 2: player.play(2); break;
      // ... до 12
      default: break;
    }
    delay(2000); // пауза для плеера
  } else if (now.minute() == 30 && now.second() == 0) {
    player.play(13); // кукушка 1 раз
  }
}
Делает следующее:
отображает текущее время ЧЧ:ММ на 4-значном 7-сегментном индикаторе с миганием точки каждую секунду.
каждый час воспроизводит соответствующий бой курантов (1–12) с разной громкостью днём/ночью.
в половине часа играет одиночный сигнал (кукушка).

Настройки

  • Громкость: день/ночь
  • Эквалайзер: басы
  • Авто-время: с ПК
  • Резисторы: на сегментах
  • Точки: мигание

Звуковые файлы

001–012.mp3 — куранты (1–12 ударов).
013.mp3 — кукушка.
Полные/короткие версии в архивах.

Улучшения

  • Кнопки: +/− время (D0/D1)
  • Servo: дверца кукушки
  • Wi-Fi: NTP (ESP8266)
  • Ночь: тишина 22:00–07:00

Заключение

Надеюсь, что понятно всё объяснил. Тема часов многогранна и сколько не делай про них видео всё равно всё не расскажешь. В конце будет ссылка на плейлист где собраны все мои примеры с использованием часов, как с модулем так и без.
Если вам понравилось, то не стесняйтесь, пишите. Это как ничто другое, ну кроме денег конечно, не стимулирует к продолжению ведения канала и поиску новых ещё более интересных программ.

FAQ — Часы с кукушкой и курантами на Arduino

Какие модули используются в часах с кукушкой и Кремлёвскими курантами?

В проекте применяются DS3231 для точного времени, DFPlayer Mini для воспроизведения звуков, 4-разрядный 7-сегментный индикатор для отображения времени, усилитель с динамиком, а также Arduino и проводка для подключения всех элементов. Дополнительно можно использовать сервопривод для дверцы кукушки.

Какие звуковые файлы используются и что входит в архивы?

В комплекте предусмотрены три типа звуков: полная версия Кремлёвских курантов, укороченная версия без вступления и отдельные звуки кукушки. В DFPlayer Mini загружаются файлы 001–012.mp3 (12 вариантов ударов) и 013.mp3 (кукушка).

Как реализована работа курантов и кукушки по времени?

Каждый новый час запускает проигрывание файла по номеру (от 1 до 12). В 30 минут выполняется отдельный вызов звука кукушки. Управление временем основано на модуле DS3231 и проверках текущих часов, минут и секунд в основном цикле программы.

Как подключён 4-разрядный семисегментный индикатор?

Сегменты A–G и точка DP подключены к пинам D4–D11. Разряды управляются через пины 12, 13, A0 и A1. Управление выполняется через библиотеку SevSeg, поддерживающую общий анод и общий катод.

Как работает DFPlayer Mini в этом проекте?

Модуль управляется через SoftwareSerial (пины D2 и D3). Настраиваются громкость, эквалайзер и вызываются нужные файлы по номерам. После команды запуска добавляется небольшая задержка, чтобы модуль корректно начал воспроизведение.

Есть ли в проекте ночной режим и как он работает?

Да. В дневное время (08:00–22:00) громкость повышенная, а ночью автоматически уменьшается. Интервалы можно изменить под свои задачи.

Какие улучшения можно добавить в часы?

Можно добавить кнопки корректировки времени, установить сервопривод для анимации кукушки, подключить Wi-Fi для синхронизации времени по NTP, реализовать продвинутый ночной режим с полной тишиной или добавить подсветку циферблата.