Несмотря на то что тема часов довольно популярна, и придумать что-либо новое сложно, всегда есть место совершенствованию. В статье пойдёт речь о доработке ранее описанной конструкции в [1] с целью её упрощения, улучшения технических характеристик, расширения функциональных возможностей и исключения дефицитных компонентов.
За последние годы мною было изготовлено несколько модификаций устройства [1], в процессе изготовления и эксплуатации были выявлены некоторые недостатки конструкции, которые периодически доставляли определённые неудобства. Недостатки были следующие: невысокая точность хода часов; отсутствие индикации даты и дня недели; неудобное управление с помощью кнопок при размещении часов высоко на стене; наличие радиоэлементов, которые становятся дефицитными и дорогими; сложность программирования (необходимость особого программатора); сложность внесения изменений в программное обеспечение (необходимо использование устаревающей среды разработки).
Для исключения указанных недостатков приняты следующие меры:
1.Микросхема часов реального времени DS1307 заменена на более современную DS3231 с встроенным генератором с термокомпенсацией в виде готового модуля, что позволило отказаться от кварцевого резонатора, от качества которого критически зависит точность хода часов.
2.Микроконтроллер (МК) ATmega8 со всей "обвязкой" заменён сопоставимым по стоимости готовым модулем WemosD1 mini с Wi-Fi на основе микроконтроллера (МК) ESP8266, это позволило:
-организовать связь с Интернетом и корректировку времени по NTP-серверу;
-дистанционно с использованием смартфона через web-интерфейс производить установку времени и других параметров;
-отказаться от необходимости применения специального программатора для микроконтроллеров AVR, теперь для программирования необходим только USB-кабель;
-заменить устаревающую среду разработки AVR Studio на популярную Arduino IDE;
-увеличить удобство отладки, упростить саму разработку программного обеспечения за счёт наличия большого числа готовых библиотек и справочной информации о платформе Arduino.
3.Полностью переработано программное обеспечение и добавлены новые возможности:
-работа с матричным индикатором, построенным на типовых модулях с управляющей микросхемой MAX7219, что позволяет отображать дату и день недели;
-работа с двумя датчиками температуры DS18B20;
-отсчёт времени по внутреннему генератору без модуля часов реального времени с (или без) корректировкой по NTP-серверу;
-автоматическое конфигурирование в зависимости от набора подключённых модулей.
4.Устройство представляет собой конструктор, т. е. строится как набор из нескольких модулей, каждый из которых необязательный, и оно может работать при любом их сочетании без каких-либо изменений в программном обеспечении, а конфигурирование происходит автоматически. Полный набор модулей может быть следующий:
-модуль с микросхемой часов реального времени DS3231;
-модуль матричного индикатора 8x8 на микросхеме MAX7219 с четырьмя или восемью разрядами;
-модуль семиэлементного индикатора, управляемого сдвиговыми регистрами;
-датчики для измерения температуры DS18B20 (один или два).
5.Видоизменён алгоритм индикации:
-на семиэлементном индикаторе отображаются попеременно время и одна или две температуры в зависимости от числа подключённых датчиков. Если они не подключены, постоянно отображается время. С помощью настроек можно задать, чтобы отображалась только температура. Продолжительность отображения температуры и период индикации задаются в настройках;
-в первых четырёх разрядах матричного индикатора отображается время, в разрядах с пятого по восьмой (если они подключены) - дата и день недели. Периодически отображается температура в разрядах с первого по четвёртый, при этом время переносится в разряды с пятого по восьмой (если они подключены). Таким образом, на четырёхразрядном индикаторе время и температура отображаются попеременно, а если индикатор восьмиразрядный, время индицируется постоянно, что повышает комфортность считывания показаний.
Рис. 1. Схема доработки аппаратной части прибора
За основу нового устройства были взяты аппаратная часть [1] и программная часть [2]. Суть доработки аппаратной части в том, что модуль управления А6 заменяется на готовый модуль Wemos D1 mini согласно схеме на рис. 1. Изменения выделены цветом. При доработке уже готового устройства [1] допустимо старый модуль управления не демонтировать, а подключить новый модуль Wemos D1 mini параллельно к линиям D, C1, C2, GND, +5 В. В этом случае необходимо на разъёме программирования старого модуля (XT2) соединить перемычкой контакты GND и RST, это переведёт его МК в состояние сброса, выходы портов при этом перейдут в третье состояние и не будут оказывать влияния на работу устройства. Также необходимо демонтировать (не устанавливать) резисторы A0R2, A0R3, A0R4. Питание к модулю управления при этом поступает, как и раньше, с платы индикатора.
Когда планируется использование не большого семиэлементного индикатора, а только матричного, необходимо предусмотреть подачу внешнего стабилизированного питания 5 В на линию 5V или подать питание через имеющийся на плате USB-разъём стандартным кабелем от зарядного USB-устройства.
Программная часть [2] была значительно дополнена, только функции работы с сетью Интернет претерпели минимальные изменения. Общий алгоритм работы получился следующий:
1.Определение числа подключённых датчиков температуры и их опрос.
2.Извлечение всех параметров из EEPROM.
3.Чтение времени из микросхемы DS3231, если она подключена.
4.Вывод информации на индикаторы.
5.Производятся попытка подключения с помощью Wi-Fi (режим клиента) к сети, заданной в настройках, и попытка синхронизации времени с помощью NTP-сервера.
6.Переключение Wi-Fi-модуля из режима клиента в режим точки доступа.
7.Запускается web-сервер.
8.Осуществляется переход к основному циклу программы, в котором происходит:
-подсчёт автономного времени (без DS3231);
-анализ запросов к web-серверу;
-чтение информации о времени из часов реального времени DS3231 и опрос датчиков температуры (один раз в секунду);
-вывод информации на индикаторы;
-счёт времени с момента включения, если оно превышает заданное в параметрах значение периода синхронизации, происходит перезагрузка, и алгоритм повторяется сначала.
Перед монтажом модуля Wemos D1 mini необходимо подключить его USB-кабелем к компьютеру, на котором установлен программный драйвер преобразователя интерфейса CH340 [3] и выполнить программирование. Это может быть выполнено из среды разработки Arduino IDE, настроенной согласно [4], или через приложение Nodemcu-flasher [5].
В первом случае необходимо установить среду Arduino IDE и сконфигурировать её для работы с модулями на основе ESP8266 [4], также, возможно, потребуется загрузить недостающие библиотеки. Файл для программирования (скетч) выложен на сайте редакции.
Во втором случае необходимо, запустив приложение Nodemcu-flasher, выбрать соответствующий СОМ-порт, перейти на вкладку Config, выбрать загрузочный файл, установить смещение адреса 0Х00000, на вкладке Advanced установить скорость обмена информацией - 115200 Бод, объём памяти - 4 МБ, скорость записи - 40 1У1Гц, режим - SPI - DIO. Затем перейти на вкладку Operation и запустить процесс загрузки нажатием на экранную кнопку Flash.
Рис. 2. Web-страница конфигурации
После сборки устройства и проверки правильности монтажа необходимо подать питание, дождаться начала мигания разделительных точек, затем подключиться к сети ESP-CLOCK с паролем 0123456789, открыть web-страницу конфигурации по адресу 192.168.4.1 и задать параметры в форме вебинтерфейса (рис. 2):
SSID - имя сети, к которой надо подключаться для синхронизации времени;
Pass - пароль к сети;
NTP - адрес NTP-сервера;
TimeZ - временная зона;
SynPer - период синхронизации (часы);
SegBri - яркость семиэлементного индикатора (проценты);
MatBri - яркость матричного индикатора (0-15);
IndPer - период индикации (секунды);
TDur - время индикации температуры (секунды);
Year - год в формате 0-99;
Month - месяц;
Date - день;
Hour - часы;
Min- минуты;
Sec - секунды.
Кроме того, при незаполнении отдельных полей значения этих параметров не изменяются, а если период синхронизации с NTP-сервером задан как 0, периодическая синхронизация не осуществляется, только при включении питания (перезагрузке).
После задания настроек надо сохранить их нажатием на кнопку SET и перезагрузить устройство нажатием на кнопку REBOOT в web-интерфейсе или аппаратной кнопкой на плате модуля. После этого устройство при загрузке должно успешно синхронизироваться с сервером точного времени и вывести время на индикаторы.
Программа для модуля Wemos D1 mini находится здесь.
Литература
1.Гнитиёв В. Электронные часы с высотой знака 12 см. - Радио, 2021, № 12, с. 34-39.
2.Дисплей на TM1637, часы с синхронизацией по NTP и программирование "народных" Wi-Fi в среде Ардуино. - URL: https://mysku. club/blog/aliexpress/33970.html (25.04.23).
3.Установка драйвера CH340. - URL: http://arduino-project.net/ driver-ch340g/ (25.04.23).
4.Arduino IDE для ESP8266. - URL: https://esp8266.ru/arduino-ide-esp8266/ (25.04.23).
5.A firmware Flash tool for no-demcu. - URL: https://github.com/Jason 2866/ESP_Flasher (25.04.23).
Автор: В. Гнитиёв, г. Железногорск Красноярского края