Самодельные часы с кукушкой и боем на 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, реализовать продвинутый ночной режим с полной тишиной или добавить подсветку циферблата.