Всем привет!
Хочу сказать сразу:
1 - Я не знаю языков программирования. Поэтому пользуюсь замечательной программой Сергея Глушко FLProg.
2 - Не хвастаюсь кодом, который скорее всего получился кривой и неоптимизированный.
3 - Просто хочу поделится своим мнением, как может работать таймер в моём понимании.
4 - Для питания схемы используется сетевой блок питания, поэтому будьте осторожны и соблюдайте технику безопасности во избежания получения электротравмы.
В неравной борьбе со временем мой механический таймер в кухонной плите решил покинуть чат. Сначала издавал всё более хриплые звуки а потом и вообще замолчал...
Нужен таймер, на выбор у меня было несколько решений:
1 - Собрать временно самый бюджетный на NE555 и СD4017 на 50 минут с шагом 5 мин. Но как известно, нет ничего более постоянного, чем один раз сделанное временным и перемотано синий изолентой (в современных реалиях скотчем!).
2 - Купить готовый у китайцев на Алике.
3 - Попробовать повозиться с ардуинкой.
Решил я попробовать последний вариант....
Первоначальные хотелки у меня были такие:
1 - Индикация на семисегментном индикаторе ТМ 1637, его хорошо видно даже при большом освещении.
2 - При неиспользовании таймера дисплей не светится, а-ля спящий режим.
3 - По умолчанию шаг изменения времени +/- 5 мин с возможностью переключения на шаг +/- 1 мин.
4 - Сохранение последнего установленного времени в энергозависимой памяти для более удобного пользования таймером при близких используемых интервалах времени.
5 - После завершения работы таймера, индикация дублируется звуковым сигналом до тех пор, пока не будет нажата кнопка <СТОП>.
6 - Режим <ПАУЗА> с возможностью продолжить отсчёт или сбросить до предыдущего или нулевого значения времени.
7 - Автоматическое изменение яркости дисплея в зависимости от освещения.
8 - Звуковое подтверждение нажатия на любую кнопку.
9 - Автоматический переход в ждущий режим при бездействии более 10 сек.
10 - Питание от сетевого БП +5В. Можно использовать и старое зарядное от кнопочного телефона.
Получив все комплектующие из поднебесной, я взял в руки <бубен> и начал танцы за клавиатурой в программе FLProg.
В результате получился скорее всего страшненький, но вполне рабочий код.
Принципиальная схема такая вышла.
Архив можно скачать тут или в описании под видео.
Посмотреть работу можно
Но как говориться аппетит приходит во время еды и мне захотелось немного расширить функционал и мои хотелки уже стали такими:
1 - По умолчанию на дисплее отображается текущее время и с периодом 1 минута в течении 5 сек показывается температура с датчика часов реального времени.
2 - По умолчанию интервал установки таймера с шагом +/- 5 мин с возможностью перехода на шаг +/- 1 мин.
3 - Сохранение последнего установленного времени в энергозависимой памяти для более удобного пользования таймером. Если вы часто используете одинаковое или близкое время от предыдущей установки.
4 - После окончания времени таймера на дисплее моргают нули 00 : 00 и подаётся звуковой сигнал с периодичностью 30 сек до тех пор, пока вы не нажмёте кнопку <СТОП>. Исходя из личного опыта это очень полезная функция!
5 - Режим <ПАУЗА> с возможностью продолжить остановленное время, вернуться с последнему установленному времени или сбросить время на ноль 00 : 00.
6 - Установка или коррекция времени должны начинаться с показания текущего времени, а не с нулевого значения или значения по умолчанию.
7 - Возможность выбора раздельной установки ЧАС и МИН в большую или меньшую сторону кнопками <+> и <->.
8 - Что бы при установке или изменении времени, показания в часах изменялось по кольцу, например:
При достижении значения 23 : 00 для ЧАС следующее значение на дисплее было 00 : 00 и наоборот в меньшую сторону.
При достижении значения 00 : 59 для МИН следующее значение на дисплее было 00 : 01 и наоборот в меньшую сторону.
9 - Звуковое подтверждение нажатия любой кнопки или смены режима таймера в процессе настройки.
10 - Световая индикация режима таймера, например подсветка кнопок в активном режиме.
11 - Автоматический переход в режим <ВРЕМЯ> при бездействии более 10 сек.
12 - В моём случае питание от сетевого блока питания +5В. Можно и от старого зарядного кнопочного телефона.
И так сделав чай с лимоном. я начал своими кривыми руками допиливать свои хотелки к уже имеющемуся скетчу...
Скетч стал ещё больше и возможно ещё корявее..... Но работает вполне адекватно уже больше года с момента публикации у меня на кухне. Постоянно в духовке что-то запекается и когда готовим на плите тоже пользуемся таймером....
Схема.
Плата.
Архив можно скачать тут или в описании под видео.
Работает всё это безобразие как то примерно так:
После подачи питания (в моём случае после вкл. в сеть) сначала выводится на дисплей индикация температуры с датчика часов, затем выводится текущее время в формате ЧАС : МИН.
Установка и коррекция времени:
1 - Перед заливкой скетча нужно установить правильную дату и время в модуль часов реального времени в программе FLProg с помощью вкладки <ИНСТРУМЕНТЫ - НАСТРОЙКА ЧАСОВ РЕАЛЬНОГО ВРЕНМИ> Затем залить это в часы. После этого можно прошивать арудинку.
2 - Коррекция времени производится с помощью кнопок S3, S4, S5. Нажмите кнопку S5 < ИНТРЕВАЛ / ВРЕМЯ> более 3 сек, таймер войдёт в режим <УСТАНОВКА ВРЕМЕНИ>. При этом будут мограть светодиоды HL4, HL5 в кнопках S3 <+>, S4 <-> и загорится светодиод HL1 в кнопке S5 <ИНТЕРВАЛ / ВРЕМЯ>. Нажатием кнопки S5 <ИНТЕРВАЛ / ВРЕМЯ> переключается выбор между ЧАС и МИН для установки нужного времени, кнопками S3 <+>, S4<-> установите текущее время соответственно для ЧАС и МИН.
3 - Для сохранения внесённых изменений нажмите кнопку S5 <ИНТЕРВАЛ / ВРЕМЯ > не менее 3 сек.
Режим <ТАЙМЕР>.
Для перехода в режим <ТАЙМЕР> нажмите кнопку S1 <ПУСК>. Начнут моргать светодиоды HL4, HL5 в конопкх S3 <+>, S4 <->.
При этом на дисплее будет отображаться последнее установленное вами время или нули 00 : 00, если это первое включение или таймер был отключен от сети. Далее нажимаете кнопки S3 <+>, S4 <-> для установки желаемого времени работы таймера, по умолчанию шаг изменения времени составляет +/- 5 мин. Если удерживать кнопки S3 <+>, S4 <-> в нажатом состоянии то скорость набора через 10 сек будет увеличиваться.
Если вам необходимо установить время с шагом +/- 1 мин то кратковременно нажмите кнопку S5 <ИНТЕРВАЛ / ВРЕМЯ>, при этом загорится светодиод HL1 в кнопке S5 и шаг набора времени измениться на +/- 1 мин. при нажатии кнопок S3, S4.
Для возврата к шагу +/- 5 мин ещё раз кратковременно нажмите кнопку S5 <ИНТЕРВАЛ / ВРЕМЯ>, светодиод HL1 погаснет и шаг набора вернётся к первоначальному.
После установки желаемого времени таймера нажмите ещё раз кратковременно кнопку S1 <ПУСК> при этом погаснут светодиоды HL4, HL5, загорится светодиод HL3 в кнопке S1 <ПУСК> и на дисплее начнётся обратный отсчёт установленного вами времени в формате:
ЧАС : МИН если текущее время таймера больше часа 01 : 00.
МИН : СЕК если текущее время таймера меньше часа 00 : 59.
Режим <ПАУЗА>.
Во время работы таймера кратковременно нажмите кнопку S2 <СТОП>, начнёт моргать светодиод HL3 в кнопке S1 <ПУСК> и на дисплее остановиться обратный отсчёт времени. Что бы продолжить отсчёт кратковременно нажмите ещё раз кнопку S1 <ПУСК>, светодиод HL3 перестанет моргать и таймер продолжит прерванный отсчёт времени. Если в режиме <ПАУЗА> нажать более 3 сек кнопку S2 <СТОП>, то таймер остановится и вернётся к последнему установленному значению. Если повторно нажать кнопку S2 более 3 сек то последнее время таймера обнулится до 00 : 00.
Режим окончания отсчёта.
По истечении установленного времени на дисплее будут моргать нули 00 : 00, также моргает светодиод HL2 в кнопке S2 <СТОП> и переодически подаётся звуковой сигнал с зуммера BUZZER 1 с интервалом 30 сек, пока вы не нажмёте кнопку S2 <СТОП>
Загорится светодиод HL2 в кнопке S2 <СТОП> и начнут моргать светодиоды HL3, HL4 в кнопках S3 <+>, S4 <->. На дисплее отображается последнее установленное время таймера.
В этом случае можно включить заново таймер с этим же временем кратковременно нажав кнопку S1 <ПУСК>.
Изменить время таймера кнопками S3 <+>, S4 <-> на желаемое и включить таймер повторно кнопкой S1 <ПУСК>.
Выйти из режима <ТАЙМЕР> в режим <ВРЕМЯ> нажав кратковременно кнопку S2 <СТОП>
Ни чего не нажимать и таймер автоматически выйдет в режим <ВРЕМЯ> через 10 сек.
Детали:
Микроконтроллер:
ARDUINO NANO 328, я использовал совсем китайский клон LGT8F328P.
Часы реального времени:
DC3231 китайский модуль для ардуино.
Семисегментный индикатор:
Часового типа на микросхеме ТМ 1637, модуль для ардуино.
Транзисторы:
VT1-VT6 любые низкочастотные, маломощные в SMD корпусе sot-23 n-p-n структуры с током коллектора от 100 мА. Например ВС547.
Резисторы:
R1-R12 маломощные сопротивления номиналы согласно схемы, SMD типоразмер 0806.
Конденсаторы:
C1 электролитический, ёмкостью 100-220 мкф с рабочим напряжением не ниже 16 В. Например К50-35.
С2 любой малогабаритный, керамический ёмкостью 0,1 мкФ напряжением от 25 В. SMD типоразмера 0806 или 1206.
Зуммер:
Активный зуммер со встроенным генератором на напряжение 12 В. от 5 В пищит достаточно громко!
Кнопки:
S1-S5 любые имеющиеся у вас кнопки, желательно со встроенной светодиодной подсветкой.
Блок питания:
Любой малогабаритный блок питания с выходным напряжением +5 В и током 0,5 китайский Ампера.
Вполне подойдёт и зарядное от древнего кнопочного телефона.
Таймер работает как и задумывалось, только вот в чём проблема.... Мне уже нужен многоканальный таймер... Одного таймера уже не хватает.... Буду думать над этим.....