Продолжение проекта часов Часы на RTC DS3231, с расширенными функциями. После наработок в программе Универсальный таймер по управлению устройством с помощью всего трёх кнопок, пришёл к мнению, что такое управление необходимо внедрить в программу часов, созданных ранее.
Примечание: в тексте при наведении мышки на * появляется дополнительная информация.
Описание
Предыдущий проект #21 Часы на RTC DS3231, с расширенными функциями подвергся сильнейшей переработке и поэтому решил под этот проект выделить отдельную страницу. Схема упростилась благодаря тому, что для управления используется всего три кнопки:
[MODE] - Настройка
[MINUS] - Убавить [-]
[PLUS] - Прибавить [+]
Переход по пунктам меню параметров настройки осуществляется по нажитаю на кнопку [MODE]. Во 2-м разряде индикатора выводится номер параметра. Далее каждый параметр может настраиваться кнопками [MINUS] и [PLUS]. Значение параметра отображается в 3-м и 4-м разрядах индикатора. Всего возможно настраивать 9* параметров:
Активность будильника 0|1
Установка часов будильника 0...23
Установка минут будильника 0...59
Активность показа дополнительных параметров* 0|12022-06-01
Настройка часов 0...23
Настройка минут 0...59
Яркость индикатора 0...7
Коэф. коррекции температуры для DS3231 +/-10° => 0...20.
Значение температуры вычисляется через отнимание 10, так:
–1° => установить 9 => 9-10 = -1°
+1° => установить 11 => 11-10 = +1°
Коэффициент коррекции давления -5.0/+4.9 мм рт.ст. => 0..99.
Значение коррекции вычисляется через отнимание 50 и деление на 10, так:
+0.5 mm => установить 55 => 55-50 = 5 / 10 = +0.5 mm
–0.5 mm => установить 45 => 45-50 = -5 / 10 = –0.5 mm
Автоматическая регулировка яркости индикатора в зависимости от освещённости (только с версии v3.72) 0|1.
Индикация текущих значений при mode = 0:
Время с DS3231
Температура с DS1820/DS3231
Давление с BMP280
Выход из меню настройки параметров осуществляется через выбор mode = 0(следующее нажатие [MODE] после 4-го* или 9-го* параметра) или автоматически через 16 секунд бездействия в меню настройки параметров.
Для удобства пользования часами сделал так, чтобы дополнительные параметры скрывались и показывались только первые пункты с активизацией и настройкой будильника, что добавляет удобства в пользовании часами и устраняет случайное изменение настроек времени и параметров коррекции датчиков. При необходимости произвести коррекцию времени или параметров датчиков – можно включить показ дополнительных параметров. Потом показ дополнительных параметров* автоматически убирается через 30 секунд работы часов в режиме индикации времени.
2022-06-01
Схема часов
Схема часов проще, чем в предыдущем проекте. Убрал лишние кнопки. Теперь осталось всего три кнопки для полного управления настройками часов. В остальном схема подобная предыдущим. Маленькая особенность: подключил управление индикатором к контактам 2 и 3 Ардуино.
Перечень элементов
U1 – Arduino UNO R3, Arduino Pro Mini, LGT8F328P, WAVGAT Nano или другое.
U2 – Модуль питания AC-DC на 5...6 В.
U3 – Модуль стабилизатора на +3,3 В, если нет на плате Arduino.
U4 – Модуль датчика абсолютного давления BMP280(допустимо без него).
DD1 – Датчик температуры семейства DS1820(допустимо без него).
RTC1 – Модуль реального времени DS3231.
R1 – Резистор 4.7 кОм (при наличии датчика DS1820).
Скетч часов претерпел сильные изменения, написаны новые функции вывода на индикатор. Постарался сделать всё более понятным и интуитивным. Главная особенность программы в том, что в неё заложена условная компиляция и автоматическое определение подключенных устройств (датчиков).
Условная компиляция позволяет легко перенастраивать скетч под любой используемый МК. Работоспособность программы проверена на следующих МК:
Arduino Uno R3;
Arduino Nano, Arduino Pro Mini;
LGT8F328P*, WAVGAT Pro Mini*;
WAVGAT Nano*.
Ниже на фото все проверенные платы Arduino, кроме Arduino Uno R3(в кадр не вошла).
Скетч написан так, что при наличии датчиков DS1820 и BMP280, будут выводится значения с них, но если этих датчиков нет, или нет какого-то любого из них, то выводиться значения будут только с подключенных. Если не подключен внешний датчик семейства DS1820, то температура будет выводиться со встроенного датчика температуры модуля реального времени. Проверка наличия подключенных датчиков осуществляется при включении. До включения можно подсоединять или отсоединять датчики, а после включения программа сама определит наличие датчиков и будет выводить их значения при индикации.
Весь код подробно закомментирован. Хочу лишь обратить внимание, что запись/чтение значения в/из EEPROM были проверены со всеми платами, кроме WAVGAT Nano*. Вначале запись в эту плату не удавалась, а потом не стал добавлять код для этой платы для работы с EEPROM.
Сам скетч и библиотеки можно скачать ниже в подразделе Приложение.
Этот вариант несколько причудливый – часы, кроме всего прочего, ещё и измеряют напряжение до +20 В. Измерение проводится через пин A1. Этот вариант тестировался только на Arduino Nano, т.е. работать будет только для МКAVR ATMega328.
Сам скетч v3.21 не публикую, это закрытая разработка, но если вам всё же хочется скопировать этот вариант для себя, то в Приложении есть архив с .hex файлами и программкой загрузчиком gcUploader этого .hex файла в Ардуино через обычное подключение по USB.
Для этого варианта добавлены ещё два параметра:
10. Активность измерения напряжения 0|1
11. Коррекция измерения напряжения -5.0/+4.9 В =>0..99.
Значение коррекции вычисляется через_
отнимание 50 и деление на 10, так:
-0.3 В => 47 => 47-50 = -3 /10 = -0.3 В
+0.1 В => 51 => 51-50 = +1 /10 = +0.1 В
При включении часов, происходит тестирование индикатора, потом выводятся параметры подключенных датчиков и последним выводится на индикатор активность измерителя напряжения в 3-м и 4-м разрядах в виде:
0U – измерение не активно,
1U – измерение напряжения активно
Попутно, при тестировании этой программы, обнаружил, что USB компьютера, к которому подключено Ардуино, выдаёт всего 4,6В.
Конструкция часов
Макетирование на плате WAVGAT Pro Mini. Долго она ждала своего часа . В итоге даже она заработала и получается, что можно использовать любую доступную плату Arduino вплоть до самых бюджетных вариантов.
Напомню, что для программирования WAVGAT Pro Mini как и для программирования LGT8F328P, необходимо в среде Arduino IDE установить ядро LGT8F.
Итак, дошли руки до конструкции часов. Наиболее просто – это взять конструкцию от часов версии v1 Часы на RTC DS3231 и TM1637 и доработать под скетч v3.71*, что собственно, и сделал. Далее смотрите фото как всё получилось.
Добавил модуль с датчиком давления BMP280. Модуль расчитан на напряжение +5В, что позволяет не добавлять стабилизатор на +3,3В.
Дорабатываем корпус часов. Проделал вентиляционные отверстия в верхней панели, для циркуляции воздуха, что необходимо для более правильного измерения температуры встроенным датчиком температуры модуля BMP280.
В задней стенке сделаны вентиляционные щели, через которые забирается внешний воздух.
В передней стенке справа просверлено отверсти, в которое будет вставлен светодиод HL2. На панели кнопок два лишних отверстия заклеены и оставлены только три отверстия под кнопки управления.
Часы собраны. Будильник отключен.
Будильник включен, о чём указывает свечение светодиода HL2. На этом конструкция новых часов закончена. Часы работают. Удобно смотреть температуру и давление.
Доработка
Версия v3.5. Изменена функция fnSetParamMode – настраевыемый параметр меняет своё значение по кругу, если нажимать только какую-либо одну кнопку [MINUS] или [PLUS]
Ниже изменённая функция, её можно скопировать и заменить ту, которая в проекте, либо скачать скетч v3.4 в Приложении.
Версия v3.5 Сохранение флага активности будильника setAlarm в EEPROM, сделано для защиты от кратковременного пропадания напряжения питания.
Версия v3.6. Изменена функция fnSetParamMode – добавлен выбор типа изменения параметра: циклически / не циклически. По умолчанию стоит значение true, если требуется чтобы параметр не менялся по кругу, задайте значение false. Скетч смотрите в Приложении. Код модифицированной функции смотрите ниже:
Версия v3.7. Думается, что ещё можно сделать хорошего в уже работающей программе? Однако... Полная переделка программы. Устранение ошибки отсчёта времени для автоматического выхода в режим индикации текущей информации (mode=0). Для управления индикатором на основе TM1637 использована иная библиотека. Сокращён код основной программы. Библиотеку и скетч можно скачать ниже. И всё это благодаря тому, что пытался подружить мою Arduino на ATTiny24/44/84 с индикатором на TM1637. Там это вышло и сразу захотелось распространить на уже имеющиеся скетчи. За несколько часов всё переделал и отладил.
Версия v3.71. У подписчиков возникли проблемы в выводом точек на индикаторе. Есть такие модификации индикаторов у которых точки не на 2-м разряде. Доработал библиотечный файл. Сейчас, при выводе часов, можно, по необходимости, включать все точки сразу. Попутно скетч был изменён и управление миганием точек идёт за счёт функции millis(). Прерывания по таймеру Timet1 убраны. Код программы сократился и упростился.
Версия v3.61. Устранена ошибка в автоматическом выходе в режим индикации текущих значений (mode=0).
Версия v3.71. Небольшие доработки небольших неудобств .
Версия v3.72. По просьбам подписчиков добавлена автоматическая регулировка яркости индикатора. Соответственно добавлен 10-й параметр в меню для включения или отключения автоматической регулировки яркости. Изменение освещённости проверяется каждые 30 секунд, если освещённость изменилась, то регулируется яркость индикатора. Всего 4-е градации яркости: 1, 2, 3, 5. Проверялось на Arduino Nano ATMega328P, для LGT8F придётся изменить уровни, т.к. там максимальное значение 4096 (12 битное АЦП (0...4095)). Так же придётся подстроить уровни под свой фоторезистор. У меня делитель из фоторезистора R3 100кОм и резистора R4 20кОм.
Схема v3.72, в которой реализована автоматическая регулировка яркости индикатора в зависимости от освещённости. Скетч можно скачать в Приложении.
Версия v3.72. Улучшена автоматическая регулировка яркости индикатора. Архив в приложении обновлён.
Версия v3.73. Добавлен 11-й пункт меню: Вкл./Откл. индикации давления*.
Версия v3.74Минималистичная версия: Просто часы с будильником и автоматической регулировкой яркости, которую можно отключить через меню. Размер скетча 8090 байт.
Приложение
Примечание:
Наведите курсор на синюю звёздочку для чтения дополнительной информации.
В заключение можно сказать, что это, на данный момент, самая лучшая программа часов, в которой реализованы расширенные функции и, которая работает со всеми имеющимися у меня разновидностями Arduino и их клонами. Очень мне это нравится!
2022-06-15
Спасибо за внимание, Анатолий Беляев
На развитие сайта и проектов Arduino
Ниже на форме выберите/укажите сумму и источник перевода: Кошелёк Ю-money или Карта банка: Visa, MasterCard, МИР, Alfa-bank