Часы на Ардуино без модуля часов

Часы на ардуино без модуля часов

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

Для работы мне не нужно было выводить время на экран и этот индикатор, я уже подключил после, только для этого видео. Я стоял перед выбором какой подключать, TM1637, про который у меня уже много видео. Посмотреть можете по ссылке, или использовать что-то новое. Я пошёл вторым путём, тем более, что у меня были такие индикаторы, и они в несколько раз больше TM1637.
Нам сегодня понадобятся только 3 кнопки, индикатор и 8 резисторов, на номинал от 200 Ом.
Давайте посмотрим, что получилось, а потом, как это собрать.

Принцип работы.
Индикаторы бывают с общим Катодом и общим Анодом. У меня установлен с общим Катодом, поэтому и в скетче прописаны команды для этого варианта. Я встречал много схем, где подключают индикатор к микроконтроллеру без токоограничивающих резисторов. Это неправильно. Поэтому у меня к каждому сегменту подключен резистор. Всего их 8. Семь сегментов и точки. Схему подключения и как работает скетч я покажу и расскажу позже.
При включении Ардуино индикатор устанавливает все сегменты в ноль, и с этой секунды начинается отсчёт времени. Для того чтобы настроить время, вам надо нажать кнопку 1 и не отпускать её до окончания установки времени. Эту кнопку можно заменить на тумблер или на кнопку с фиксатором.
Если текущее время меньше 1 часа, то предыдущий ноль не показывается, а то было бы странным видеть два нуля.
Чтобы не заслонять камеру для нажатия на кнопки я использовал авторучки, поэтому нажатие, не всегда происходили плавными, но у вас всё будет нажиматься хорошо.
Про что здесь ещё рассказывать я не знаю, смотрите сами как работает.
Нажимая на кнопку установки, можно устанавливать отдельно часы и минуты. Длительное нажатие позволяет быстро перемещаться по времени, а одиночное, не промахнуться, так как уменьшение времени я не делал, сделал только плюс.
Ещё надо помнить, что при сбрасывании питания, время не будет сохранено, мне просто это не было нужно, у меня было условие, что Ардуино будет работать непрерывно.

Вот схема подключения.
У индикатора 12 выводов, по 6 с каждой стороны. Выводы 12, 8, 9, и 6 это катоды для каждого из 4 индикаторов.

  • 12 – отвечает за первый индикатор,
  • 9 - за второй,
  • 8 – за третий,
  • 6 - за четвёртый.
  • За вывод точки отвечает 3 контакт.

Как подключить каждый контакт к Ардуино, показано в этой таблице. Так же здесь показано за какой из сегментов отвечает тот или иной контакт.

А теперь давайте посмотрим, как эти контакты загораются. Я буду менять катоды, и мы увидим, что одни и те же контакты отвечают за такие же сегменты, но на разных индикаторах. За верхнюю и нижнюю точки отвечают 2 и 3 индикатор.

Ну и осталось рассмотреть кнопки.
Кнопки подключены к аналоговым входам Ардуино, так как все цифровые уже заняты, но это никак не повлияет на работы. Аналоговые входы, можно использовать как цифровые и обращаться к ним как к А0 так и D14 и D19

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

Для работы вам надо установить библиотеку Time. Как ни странно, но её нельзя установить из менеджера библиотек и вам надо будет скачать её с гитхаба, или скачать из моего архива. Архив как и всегда будет на моём сайте, ссылка на который будет в описании. Там же будет лежать и скетч этого примера.

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

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

В этоу переменную мы сохранять значения которые будут выводиться на дисплей.
Это выглядит вот так.
Например надо вывести 5 часов 10 минут. Это значит на дисплее должно быть 510.

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

А в таком состоянии находятся сегменты при определённых цифр. Например при нуле все сегменты кроме G включены.
При единице, включены только B и C, и так далее.

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


Примеры использования Модуля часов DS3231
Самодельные часы с кукушкой и боем курантов
Мир удивительных часов. Часы с кукушкой или с боем.
DS3231 Подключение к Arduino, настройка и установка времени.
часы на ардуино с дисплеем tft и ds3231
Часы на Ардуино без модуля часов
Время и дата без часов. Вывод на разные дисплеи.
Точное время и дата без часов. NTP сервер точного времени.
DS3231 Подключение к Arduino, настройка и установка времени.
DS3231 Настройка даты и времени. Управление энкодером.
часы на светодиодах ws2812
DS3231 подключение
Точное Время. Проекты с модулем часов DS3231 на Arduino и ESP8266


Примеры использования Индикатора TM1637
Индикатор tm1637 Подключение к Ардуино
tm1637 индикатор
Точное время и дата без часов. NTP сервер точного времени.
Самодельные часы с кукушкой и боем курантов
Часы на Ардуино без модуля часов
Время и дата без часов. Вывод на разные дисплеи.
Таймер на ардуино со звуком и обратным отсчетом
"Модуль часов RTC DS3231" Урок № 7
Мир Цифр: Создаем Проекты с Индикатором TM1637 на Arduino