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

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

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

Рад приветствовать на своём канале моих подписчиков и просто заглянувших посмотреть что же здесь такого. Надеюсь, что вы тоже подпишитесь на канал. Приятного просмотра.
Давайте посмотрим, как работают часы. Ссылка на скетч и на использованные библиотеки будет, как всегда, в описании, хотя эти библиотеки вы можете сами найти в менеджере библиотек программы ARDUINO IDE. Так же там будут лежать архивы со звуковыми файлами, которые были использованы в этих примерах. Всего там три архива. Один с файлами боя Кремлёвских курантов, полная версия. В другом я отрезал вступление перед боем часов и оставил только самое основное. Ну а в третьем архиве будут звуки кукушечного пения. Куда же без него, всё таки часы с кукушкой это самое основное, так сказать классика.

Сначала будут два примера боя курантов из полной версии. Возможно они поначалу покажутся вам немного затянутыми, но через некоторое время привыкаешь. Сначала часы сработают при наступлении пяти часов.

Регулировать громкость возможно из скетча или в моём примере я использовал дополнительный усилитель звука и у я могу менять громкость простым поворотом регулятора громкости. А ещё в скетче я прописал что в ночные часы звук будет тише, а в дневные громче.  Кому интересно, могут досмотреть видео до конца, там я расскажу как работает этот скетч.
Следующий пример из той же оперы. Я изменил время на часах и теперь часы покажут нам как они сработают в 11 часов. Кто не верит может сам посчитать количество ударов. Что бы не ждать целый час, ч просто изменяю время на часах и выставляю на без одной минуты час. Приготовимся слушать.

А теперь послушаем звуковые файлы из второго архива, где я отрезал вступление перед боем и теперь можно сразу слышать который час, а не ждать пока проиграет вступление. Сейчас будет самое долгое звучание. Оно будет в 12 часов дня и в ноль часов ночи.

Теперь послушаем что-нибудь коротенькое, например выставим время без одной минуты два. И послушаем два удара гонга, а потом перейдём к кукушке.
Про часы с кукушкой у меня уже было видео, правда очень давно и с другим дисплеем. Там я использовал LED индикатор TM1637. Но так как видео очень старое и у многих оно вызывало сложности в сборке, то я решил переделать этот пример. К слову сказать, сложности  были не коде, а в том, что библиотека которая была использована в примере устарела и хотя я в архиве сохранил старую версию, всё равно у небольшого числа пользователей это вызывало затруднения. Короче я всё переделал, но звуковые файлы кукушки взяты от туда.
Ну и что бы не затягивать видео посмотрим ещё один пример с кукушкой и перейдём к рассмотрению схемы и работы скетча. Прокукуем девять раз и пойдём дальше.

В схеме ничего нового нет.
Для вывода я использовал семи сегментный индикатор на четыре цифры. В скетче я использовал библиотеку в которой есть очень много разных возможностей. Одна из многих – это подключение индикатора с общим анодом или общим  катодом. Вам всего лишь надо будет указать какой вы используете.
Для этого примера вам понадобятся 16 выходов Ардуино и останется ещё два если вы захотите добавить пару кнопок, например для изменения времени. Как это сделать я уже неоднократно рассказывал.

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

Всё это питается от источника 5 вольт. Желательно взять достаточно мощный источник, тогда у вас во время работы не будет просадок и звук будет громким и чётким.
Контакты RX и TX плеера я подключил к выходам 2 и 3 Ардуино использовав для этого библиотеку SoftwareSerial которая позволяет реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств.

Теперь рассмотрим скетч.
Я как всегда его прокомментировал, поэтому расскажу вкратце. Для работы нам понадобятся 4 библиотеки.
Первая для работы с семи сегментным индикатором.
Вторая для часов DS3231.
Третья для программного UART что бы можно было передавать и получать данные с MP3 плеера не через контакты 0 и 1 Ардуино, а использовать любые. В нашем случае 2 и 3.
И четвёртая библиотека – для работы с DF ПЛЕЕРОМ. Её надо скачать с гитхаба или из моего архива.
В сетапе идут проверки и только если всё работает правильно скетч будет работать дальше.
В начале идёт проверка DF плеера. Все ответы я перевёл, так что всё вроде понятно.

Если с плеером всё в порядке вы увидите сообщение, что плеер онлайн. Дальше идёт настройка звука. Можно установить приветственный звуковой файл, который будет всегда запускаться при перезагрузке Ардуино. Небольшая пауза, что бы плеер успел включиться, затем устанавливаем эквалайзер на басы, но эту строчку можно спокойно убрать, она не несёт никакой полезной нагрузки.

Дальше идут строчки кода отвечающие за настройку даты и время. Есть возможность установить время автоматически при каждой загрузке скетча в Ардуино. Дата и время будут взяты с компьютера. Или можно установить эти параметры в ручную. Как вам больше нравится.
В первой строчке указано количество цифр на индикаторе. Библиотека поддерживает как большее, так и меньшее количество цифр.
Во второй строчке сказано куда подключены аноды или катоды всех сегментов.
В третьей строчке расписано к каким выводам Ардуино подключены сегменты индикатора. Они располагаются в порядке увеличения от A до G. Ну и последним идёт точка. Более подробно смотрите в моих уроках.

В следующих пяти строчках значения переменных используемых в библиотеки.

  • В первой – это подключение резисторов к сегментам. Более правильный это установить на каждый сегмент по резистору, как и сделано в примере. Второй менее правильный установить всего четыре резистора на каждый катод индикатора. Тогда надо поменять значение с false на true.
  • Во второй сказано какой у вас индикатор. С общим катодом или анодом.
  • В третьей – используете ли вы в примере delay.
  • В четвёртой, - надо ли дополнять недостающие цифры нулями.
  • И В последней, пятой будете ли вы использовать в примере точки. Будут ли они включены или отключены.

Сюда записываем какие из переменных мы будем использовать в примере.
Дальше идут настройки яркости, звука и очистки экрана, вдруг там остались гореть какие-нибудь сегменты.
Здесь мы создаём массив и помещаем сюда значения из часов в формате часы и минуты, без всяких разделителей.
Это условие работы с центральными точками. В библиотеке есть возможность гореть только одной точкой, верхней или нижней. Вот я и сделал условие, что они меняются с периодичностью в одну секунду.

Эта строка отвечает за вывод на экран значений и точки. Есть возможность сделать вывод на в десятиричной системе, а в шестнадцатиричной, вдруг кому-то понадобится. Ну и в конце обновляем экран.

Эти строчки можно использовать только в режиме настройки. Если их оставить в рабочем коде, то на индикаторе будет мерцание.
Дальше идёт большой кусок однотипного текста, поэтому я расскажу только про его часть.
Создаём условие, что если сейчас минуты и секунды равны нулю, то условие верно и переходим внутрь. А дальше просто. Всем будет управлять оператор SWITCH.

Switch – оператор, который сравнивает последовательно значение переменной, находящейся в скобках со всеми вариантами значений, находящимися после каждого ключевого слова case.

Посмотрим что мы имеем.
Если сейчас минуты и секунды равны нулю, то переходим в оператор и смотрим который час и если сейчас один час ночи или 13 часов дня, то устанавливаем нужную громкость и включаем первый трек, а там записан звуковой файл для этого случаю. У меня в архивах это один раз кукукнуть или один раз сказать бом. Дальше небольшая пауза. Она нужна для плеера и можете сами установить её для своей модели. Без неё плеер не успевает сработать. Ну и последняя строчка это выход из оператора и из условия и ожидание нового часа.
Всё сказанное выше применяется и для двух часов и остального времени. Меняется только звуковой файл. Вы можете менять громкость воспроизведения в зависимости от текущего времени. Ночью делать тише, а днём громче.

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

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

Спасибо и до встречи.

По просьбам подписчиков, я теперь буду размещать ссылки на продавцов с которыми работал и где есть модули применяемые в примерах.
Arduino NANO
Модуль часов DS3231
DFPlayer Mini MP3
Семисегментный индикатор