Таймер на ардуино со звуком и обратным отсчетом

Таймер на ардуино со звуком и обратным отсчетом

Сегодня будем собирать простенький таймер с обратным отсчётом времени и звуковым сигналом при наступлении времени.
У меня на канале есть уже несколько таймеров, и с модулем часов и без него, но все они сделаны с выводом на дисплей LCD1602 или на индикатор TM1637, а мне захотелось что-нибудь новенького, поэтому я собрал таймер на четырёх разрядном семи сегментном индикаторе. Он гораздо больше предыдущих и смотрится посимпатичнее.

Давайте смотреть что получилось.
Сначала, при включении питания таймер устанавливается в заданное время, которое можно установить в скетче. Я установил 30 секунд, вы можете поставить своё время, то которое чаще всего будете использовать.
Управление таймером происходит с помощью четырёх кнопок.
Больше, меньше, запуск и сброс.
При длительном удержании кнопки цифры начинают ускоряться – это тоже можно изменить в скетче. При приближении к заданному времени установки таймера можно отпустить кнопки и доустановить однократными нажатиями, так вы не проскочите нужное время.

А ещё таймер обладает режимом памяти. Если вы набрали например 10 секунд и запустили таймер, то при следующем нажатии на сброс у вас установится предыдущее время, те же самые 10 секунд. Это работает до отключения питания. После отключения время будет взято из скетча.
Установку времени нельзя производить при работающем таймере. Его надо отключить кнопкой сброс. Для этого не обязательно ждать пока таймер отключится – это можно сделать в любой момент.
Ещё в таймер я добавил пищалку для подачи сигнала при наступлении времени заданного в таймере. Частоту звука, или свою мелодию можно добавить в скетче. А ещё вместо или вместе с пищалкой можно установить реле и тогда от таймера будет больше толку, он может производить какое-нибудь действие.
Если будет много желающих я сделаю новое видео уже с реле или ещё с чем-нибудь. У нас ещё свободны 3 выхода на Ардуино, можно их использовать. 
Схем таймеров много. Я сделал ещё один, потому что не знал, что ещё сделать. Когда на канале больше 200 видео, уже начинаешь задумываться про что бы ещё снять. Например, я больше ничего не придумал, а вы особо не пишете, что бы ещё хотели увидеть, вот поэтому и приходиться выдумывать.
Сейчас ещё раз пропищит и идём дальше. Рассмотрим схему подключения.

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

Вот схема подключения индикатора.
У индикатора 12 выводов, по 6 с каждой стороны. Выводы 12, 8, 9, и 6 это катоды для каждого из 4 индикаторов.
12 – отвечает за первый индикатор, 
9 - за второй,
8 – за третий,
6 - за четвёртый.
За вывод точки отвечает 3 контакт.
Я их подключил к аналоговым входам, так как цифровых уже не осталось.
Сегменты цифр на индикаторе подключены к выходам Ардуино со второго цифрового выхода по восьмой.
Кнопки управления подключены к цифровым выходам 10, 11, 12 и последний к аналоговому входу А0. 
Пищалка подключена к выходу 9 Ардуино. Это выход и управлением ШИМ.
Вот и вся схема подключения.

Переходим к скетчу.

Особо долго я на скетче останавливаться не буду. Так просто пробегусь. Он большой, но это в основном из за индикатора, так как надо создать условие включения сегментов для каждой цифры от 0 до 9.
Сначала подключаем библиотеку для работы с математическими функциями. Ничего скачивать не надо, он есть в комплекте Ардуино IDE. 
Создаём массив выходов для катодов индикатора.
Пищалку подключаем к 9 выходу.
Сегменты индикатора к выходам от 2 до 8.
Кнопки подключаем к этим входам.
Пишем значения для таймера которое будет установлено после включения питания. Если не хотите, то можете поставить 0.
В SETUP устанавливаем все выводы Ардуино как выходы, и только для кнопок как входы. Так как я не ставил внешние подтягивающие резисторы, то включаем внутреннюю подтяжку.
Функция для создания частоты звука пищалки.
Это самая большая часть кода. Здесь показано, что если надо зажечь цифру 0, то включить такие сегменты индикатора, а если 1, то такие. Итак для каждой цифры.
Цифра 962 – это подобранное значение для 1 секунды. Если у вас вдруг таймер будет работать чуть быстрее или медленнее, то вы можете подобрать это значение. Например у меня при работе таймера на 15 минут, он сработал на 1 секунду быстрее, чем таймер на телефоне.
Вроде всё что хотел, рассказал. Жду вашей активности. Если снова будет тишина, то мне снова придётся придумывать тему для видео, и она может быть вам не интересна. Вот ваш шанс задать тему и если она будет интересна многим, и если у меня будет возможность снять такое видео, то я с удовольствием его покажу.
 


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

Скетчи