Разработка ведущих часов для Pragotron PJ 27 базе ESP32 с синхронизацией времени по NTP

в 14:47, , рубрики: diy или сделай сам, esp32, Блог компании RUVDS.com, программирование микроконтроллеров, разработка

Мне удалось раздобыть старые ведомые часы, которые, если судить по их серийному номеру, выпущены в 1960-х годах. Это — Pragotron PJ 27, версия на 12В. Они были сделаны в Чехословакии, в них используется механизм PS-1.

Разработка ведущих часов для Pragotron PJ 27 базе ESP32 с синхронизацией времени по NTP - 1


Ведомые часы

Такие часы обычно применялись в организациях, где использовалась система единого времени. Например — в школах, на заводах и в других подобных местах. Изначально работу таких часов обеспечивали большие механические ведущие часы. Позже механические часы заменили на электронные.

Разработка ведущих часов для Pragotron PJ 27 базе ESP32 с синхронизацией времени по NTP - 2

Ведущие часы

Часовой механизм ведомых часов устроен очень просто. Он управляется разнополярными минутными импульсами. Существуют, помимо версий на 12В, версии этих часов на 6, 24 и 60В.

Я решил дать Pragotron PJ 27 вторую жизнь.

Аппаратная часть проекта

Я почистил старые часы и проверил их, используя источник питания на 12В. Они, как оказалось, всё ещё работоспособны. У меня нет ведущих часов, которые могли бы управлять Pragotron PJ 27, поэтому я решил сделать такие часы сам. У меня уже был контроллер ESP32 с OLED-дисплеем, он выглядел подходящим для нового проекта. Кроме того, я нашёл блок питания, подключаемый к электросети и выдающий 12В, который раньше использовался в одном из моих экспериментов.

Для того чтобы генерировать разнополярные 12В-импульсы, я решил приобрести двухканальный модуль L298N DC Motor Driver. Я подумал, что он будет надёжнее, чем набор реле. Управлять его выходами можно, пользуясь TTL-входами, а сам этот модуль стоит очень недорого (пару долларов). Кроме того, в нём есть конвертер 12В-5В, поэтому с него можно подавать питание на контроллер ESP32. При этом для подачи сигналов на часы используется лишь один канал L298N, поэтому ещё один можно использовать для управления чем-то вроде будильника, или для организации работы ещё одних ведомых часов, показывающих время в другом часовом поясе.

Собрать всё то, что у меня было, оказалось очень просто. 12В подключается напрямую к L298N. 5В-выход L298N и контакт GND подключаются, соответственно, к контактам 5В и GND контроллера ESP32. Контакты IN1 и IN2 L298N подключаются к GPIO-пинам 12 и 13 ESP32. Часы подключаются к выходу OUT1 L298N, выводы которого предназначены для подачи питания на двигатель.

Программная часть проекта

В ESP32 нет настоящего RTC-модуля, поэтому я решил получать сведения о точном времени по протоколу NTP, подключив ESP32 к сети по Wi-Fi. Это избавило меня от необходимости использовать отдельный RTC-модуль с батарейкой. Данные о состоянии ведомых часов я решил хранить во флеш-памяти ESP32. Программу для контроллера я написал, пользуясь Arduino IDE. Вот некоторые из её возможностей:

  • При загрузке осуществляется подключение к Wi-Fi-сети, после чего устройство получает сведения о текущем времени по NTP. После первоначальной синхронизации данные о времени обновляются, опять же, по NTP, каждые 5 минут.
  • Поддержка разных часовых поясов реализована на базе Timezone.
  • Текущее время, данные о ведомых часах, сведения о NTP-синхронизации выводятся на OLED-дисплее.
  • Существует особый «режим инициализации», который включается в том случае, если взяться за сенсорный контакт GPIO15 и перезагрузить ESP32. В этом режиме импульсы, управляющие ведомыми часами, генерируются каждую секунду. Когда стрелки часов будут установлены на 12:00, контакт нужно отпустить. Этот режим удобно использовать для первоначальной настройки часов или для их тестирования.
  • Сведения о состоянии системы каждую минуту сохраняются во флеш-памяти ESP32 с использованием библиотеки Preferences. Данные хранятся в NVS-разделе флеш-памяти. Он поддерживает постоянное энергонезависимое хранение данных. Для обеспечения долгосрочной работы памяти используются возможности API Wear Levelling. Я, чтобы было удобнее, установил размер этого раздела в 1 Мб.
  • Для того чтобы предотвратить деградацию OLED-дисплея, система устроена так, что дисплей, если устройство не трогать 10 минут, уходит в режим защиты экрана. Для вывода устройства из этого режима надо коснуться контакта GPIO15.

Разработка ведущих часов для Pragotron PJ 27 базе ESP32 с синхронизацией времени по NTP - 3

ESP32 с OLED-дисплеем

→ Код проекта можно найти здесь

Итоги

Разработка ведущих часов для Pragotron PJ 27 базе ESP32 с синхронизацией времени по NTP - 4

Готовый проект

Мне интересно было заниматься этим проектом, в котором NTP и Wi-Fi встретились с устройством, созданным в 1960-е годы. Я, к тому же, смог найти корпус от старого реле и приспособил его под контроллер, играющий роль ведущих часов для Pragotron PJ 27. Возможно, в будущем я подключу к этому контроллеру что-нибудь ещё.

А вы создавали какие-нибудь проекты на базе ESP32?

Разработка ведущих часов для Pragotron PJ 27 базе ESP32 с синхронизацией времени по NTP - 5

Автор: ru_vds

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js