![](https://habrastorage.org/webt/bp/hm/_u/bphm_u-dalpdrlnh0br4fv4rfp8.jpeg)
Как вы помните, во время посещения блошиного рынка, мне встретились прекрасные вокзальные вторичные часы, которые я в результате не купил. И что-то вот у меня клокотало внутри, и решил, раз уж разбираться с системой первичных-вторичных часов, то по-крупному. В результате были закуплены заводские первичные часы, вторичные часы, а дома я построил настоящую часовую сеть, посмотрел как настраивать первичные часы, как настраивать вторичные, ощутил всю боль часовщиков, которые обслуживают такие сети и в результате сделал собственные первичные часы, вместо заводских. В статье буду разбирать, как работает система первичных и вторичных часов, а также попробуем сделать свои первичные часы.
С чего всё начиналось
На самом деле, идеи поковыряться со вторичными часами у меня появились ещё задолго до поездки в Санкт-Петербург. Ещё давным-давно у sfrolov я читал о первичных и вторичных часах. Плюс, ещё в школе меня завораживало как работают часы на всех этажах, с громким щёлканьем стрелки.
Также, по долгу службы много ездил по России, и на каждом предприятии встречал различные вторичные часы, и меня они всегда интриговали. Фотография ниже сделана мной в 2014 году на старейшей станции в России — ГРЭС-3 им. Р.Э. Классона на главном щите управления.
![](https://habrastorage.org/webt/0g/lu/50/0glu50plwuul5ef4havf1rszp98.jpeg)
Часы показывают точное время. Портрет основателя станции Р.Э. Классона.
И вот с тех времён, мне всё хотелось разобраться и подержать в руках живые, настоящие часы и научиться с ними работать. А также понять, как же на них переводили время во всей организации.
Закупаемся
После посещения “Уделки” я начал активно шерстить всевозможные доски объявлений в поисках первичных и вторичных часов. Первичные часы, с успехом нашлись ещё в Питере. Как оказалось, достаточно дефицитная штука, и не так часто бывают на досках объявлений, но мне дико повезло, и нашёл даже недалеко от того места, где мы жили.
![](https://habrastorage.org/webt/ln/-k/nh/ln-knhbme8hoyq1bgmqnmmrx6ei.jpeg)
Первичные часы ПЧК-3, сразу после покупки.
Вторичные часы я начал искать уже в Москве. В принципе я хотел красивые пузатые часы, с металлическим корпусом. Но то меня не устраивала цена, то надо было ехать на другой конец Москвы, а то и в область. В результате купил “новые” (неиспользованные) часы, в заводской упаковке, такие же как стояли у меня в школе, пускай и не такие красивые.
![](https://habrastorage.org/webt/yh/vi/wj/yhviwjo8wqs1e4plnuoqwvez80o.jpeg)
Специально для вас заснял распаковку этих часов, чтобы передать хотя бы частичку того восторга, которого я испытал.
Часы стоят на 12, внутри паспорт и меня они ненамного моложе. Единственное, что прямо с завода было грязное стекло, не очень аккуратно нанесена краска цифр. В общем, вблизи было видно достаточно большое количество дефектов. Но, думаю, с такого расстояния их видели только изготовители и часовщики.
![](https://habrastorage.org/webt/3_/0l/u-/3_0lu-dzkevjiuxillvvgtr1sj8.jpeg)
Сразу после распаковки.
Конечно же, после распаковки, когда у тебя есть первичные часы и вторичные часы, их хочется сразу поженить, и потом уже разбираться, как это всё работает.
Первый запуск
Пока оставим технические детали, просто проверим, работает ли оно всё в связке. Телефонной лапши, которая использовалась в часовых сетях, у меня нет, поэтому использую обычный сетевой провод. Гильзуем концы, и закрепляем всё в клеммах.
![](https://habrastorage.org/webt/hp/lo/ct/hploctdppui9qtul-kwdzmggafo.jpeg)
Подключённые провода к часам.
Сбрасываем первичные часы и замираем в ожидании
![](https://habrastorage.org/webt/gq/dr/wo/gqdrwobcfbidd6npdqeuu0dwfma.jpeg)
Не переживайте, для вас я тоже снял кинцо, как это было.
Вы тоже обратили внимание, что стрелка дёрнулась, но не щёлкнула? Это не бага, это фича! И дальше мы поговорим, почему это произошло.
Для того чтобы было удобно работать со всем этим добром, и это всё часовое хозяйство не занимало драгоценное место на рабочем столе, я изготовил импровизированный стенд, на котором всё и закрепил:
![](https://habrastorage.org/webt/qm/lu/vg/qmluvg-kzq79tifwfi0zxii5um8.jpeg)
Пара слов о работе первичных часов
Для меня стало настоящим откровением, что время, которое показывают первичные часы, никак не связано с тем временем, которое показывают вторичные часы. И, видимо, оно нужно просто для удобства работы часовщика (да простят меня за этот термин, я правда не знаю как называется должность человека, который обслуживал такие вот часовые сети).
По сути, первичные часы просто генерируют управляющие импульсы раз в минуту, для перевода стрелки вторичных часов. Ещё есть возможность ускоренной подгонки минут, но это какая-то странная функциональность, я пробовал её в деле, но работает она криво: можно стартануть её только после импульса на перевод минуты и остановить, после второй минуты. Количество импульсов за минуту слабо прогнозируемо.
И в целом, если бы на этих часах, не было бы дисплея, ничего страшного бы не случилось, он нужен просто для справки. Сверху имеется крышка, которая позволяет добраться до управляющих кнопок и клемм.
![](https://habrastorage.org/webt/0u/1q/eb/0u1qebx5jqi2splaixjbmiypa2o.jpeg)
Снял небольшое видео, чтобы вы смогли сами увидеть, как это выглядит.
Меня более всего подивила батарейка, ей громадное количество лет, а она до сих пор в строю и держит заряд!
![](https://habrastorage.org/r/w780q1/webt/qx/dc/jp/qxdcjppctngbsxpqymyeugp-oo0.jpeg)
Батарейке 30 лет, а она всё ещё жива.
![](https://habrastorage.org/webt/qx/dc/jp/qxdcjppctngbsxpqymyeugp-oo0.jpeg)
![](https://habrastorage.org/webt/3h/y-/vt/3hy-vtjd8uqohofpxzntd5jyhwo.jpeg)
Об устройстве вторичных часов
![](https://habrastorage.org/webt/ih/91/vm/ih91vmusqdiqofhyotzojv3edi0.jpeg)
Вторичные часы сделаны очень просто: там стоит мотор и редуктор 1:12, то есть на один оборот мотора, делается один отсчёт минутной стрелки.
![](https://habrastorage.org/webt/m6/5o/er/m65oerevmuylofviko1kqqodw6o.jpeg)
Эмпирическим путём я выяснил, что если менять полярность, то мотор делает один “щёлк”, думаю что это тип шагового двигателя. Вместо тысячи слов лучше посмотреть одно видео.
Точная подводка часов делается через вон тот пластиковый “пимтик” сверху. Проиллюстрирую очередным видео:
Главное, что все эти часы переводились вручную, что, как мне кажется, было дичайше неудобно. Наверняка это делалось в полночь, поэтому думаю, эти часы обслуживающий персонал не любил (переводить часы на пересменке, ага).
Что ещё полезного есть, я не поленился и отсканировал паспорт этих часов, если кому интересно, могут скачать его отсюда.
Для нас же самая полезная информация, как управлять этими часами, что они кушают:
![](https://habrastorage.org/webt/v5/y7/rd/v5y7rdk4fl-nbjkuwrwgispn5xk.png)
То есть, у нас есть управляющий импульс длительностью от 1,6 до 2,4 с, с периодом 60 с, входной сигнал должен быть от 18 до 30 В и входное сопротивление часов у нас 1кОм. Последнее важно, чтобы подбирать блок питания (на 30 В, у нас будет всего 30 мА). Это важнейшие параметры, которые упростили дальнейшую разработку.
Глянем-ка осциллоскопом
Теперь, главное, для чего это всё затевалось. Давайте посмотрим, какие сигналы идут от первичных часов к вторичным.
![](https://habrastorage.org/webt/fe/m3/l9/fem3l9ybsoyjgl_o9ujp-ezvvtm.jpeg)
Мне пришлось вывести осциллограф практически в режим самописца, чтобы записать такой длинный сигнал, и это был предел его возможностей. И что же мы видим в результате?
![](https://habrastorage.org/webt/am/e-/h4/ame-h4hxn6pyrov4em08ss-xnoo.png)
“Замечательно” голосом доктора Ливси из “Острова Сокровищ”. Что же мы здесь видим? А очень просто, у нас идёт сигнал, каждые 60 секунд, и он меняет свою полярность. То есть, на двигатель идёт сигнал сначала одной полярности, потом другой. Посмотрим длительность и амплитуду сигнала.
![](https://habrastorage.org/webt/yh/zn/hu/yhznhuex9fj0hau-opjwi-nrhfu.png)
![](https://habrastorage.org/webt/ie/zh/fs/iezhfsshjzno_muna4pwxydu6bq.png)
Видно, что сигнал имеет амплитуду 27 В, и длительность ровно 1500 мс, или 1,5 секунды.
Теперь понятно, почему часы в первом включении побились в конвульсиях, но стрелку не сдвинули: пришёл импульс не той полярности.
После чего, я попробовал часы подключить к обычному блоку питания. Если просто касаться клемм БП, и потом переворачивать и касаться клемм другой полярности, то часы начинают идти. К слову сказать, можно делать очень короткий импульс, 1,5 секунды — это большой запас. Также эмпирическим путём я установил, что часы могут работать даже при напряжении 12 В. Это нежелательно, но можно использовать. На точность хода это никак не повлияет, так как перестановка минут явление дискретное.
В результате, имея все эти данные, можно сделать свои первичные часы.
Создаём свои первичные часы
Когда я думал, как делать эти часы, у меня в голове было два варианта: взять модуль блока питания на 5 вольт (AC-DC преобразователь), DC-DC повышающий преобразователь (например, XL6009) и им делать высокое напряжение в 27 В. Другой вариант, использовать готовый блок питания на 12 В (проверено, работает), и использовать понижающий DC-DC преобразователь на 5 В (например, mini560) для питания контроллера. В качестве коммутирующего устройства можно использовать реле, либо драйвер двигателя на основе Н-моста.
Было закуплено компонентов для повторения всех вариантов, но мне не захотелось разводить 220 В на плате, так как считаю это небезопасным в домашних проектах (настоятельно рекомендую ознакомиться с этим постом). Блок питания на 12 В у меня есть. Поэтому было принято остановится на нём.
Хотя конечно, решение с блоком питания прям на плате, было бы сильно элегантнее. Но безопасность дороже.
▍ Исходники проекта:
- Arduino Nano. — 450 руб. (Тут подойдёт совершенно любая плата, которая есть у вас в наличии).
- Драйвер двигателя L9110S — 90 руб.
- Понижающий преобразователь DC-DC mini560 5В 5А — 120 руб.
- Блок питания на 12 В — (был в наличии, но так 400 руб.);
- Разъём для подключения блока питания — 30 руб.
- Макетная плата 70x50 мм — 60 руб.
Итого: 750 руб. (без БП).
По поводу драйвера двигателя, в процессе экспериментов я спалил три штуки таких драйвера. Они очень чувствительны к уровню напряжений, сгорают если выйти за пределы (даже 20 вольт не переваривают), к полярности (ну тут я сам себе злобный буратина) и к нагрузке. В целом, если вы не уверены в себе, можно просто использовать спаренное реле, и поначалу я делал на нём, но уж больно оно громко щёлкает.
![](https://habrastorage.org/webt/qn/a-/aq/qna-aq78ec_1rbbbtnkt_yjpauu.jpeg)
Либо другой вариант, использовать что-то более серьёзное, типа микросхемы ir4427 (она и дешевле будет готового модуля).
На хабре очень не любят проекты на Ардуино, но честно говоря, я могу сделать это на абсолютно любом контроллере, написать на ассемблере, сях, плюсах, питоне и т.п. Просто Ардуино доступно: пришёл и купил, и экономит кучу времени. Поэтому прошу понять мою профессиональную слабость.
▍ Собираем всё в кучу
Пару часов пайки и получаем вот такое симпатичное устройство:
![](https://habrastorage.org/webt/3l/im/9c/3lim9cjau0rm3nlne-lfbpunzbo.jpeg)
Сигнальные провода идут от пинов контроллера D2 и D3 к пинам драйвера B-1A и B1-B. Последовательность подключения значения не имеет. На драйвер мы подаём 12 В, а контроллер питаем от пяти, после понижающего DC-DC преобразователя.
▍ Код
За полчаса набросал рабочий код, который очень простой. Но в отличие от подобных проектов, решил использовать таймер, который рассчитал вот тут. Там прям в примере генерируется готовый код, идеально подходящей к моей задаче. Код проекта обитает вот тут, я лишь заострю внимание на одном моменте. Приведённый ниже кусок кода — это обработчик прерывания таймера.
ISR(TIMER1_COMPA_vect) {
digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
static uint8_t seconds = 0;
static uint8_t pos_neg = 0;
static uint8_t sending = 0;
if (sending) {
sending--;
if(0 == sending) {
digitalWrite(POS_SIG, HIGH);
digitalWrite(NEG_SIG, HIGH);
}
}
seconds++;
if (seconds == 60) {
seconds = 0;
sending=2;
if (pos_neg) {
digitalWrite(POS_SIG, LOW);
pos_neg = 0;
} else {
digitalWrite(NEG_SIG, LOW);
pos_neg = 1;
}
}
}
Думаю всё достаточно очевидно: когда идёт переполнение секунд, мы выставляем сигнал на ножке. На какой ножке — определяется переменной pos_neg. Длительность импульса задаётся переменной sending и в данном случае она равна двум. Когда импульс подходит к концу, мы восстанавливаем исходный сигнал.
Единственное, что меня волнует — это какая погрешность у такого таймера. Предметно не искал, но любопытно через сколько набежит лишняя минута (или наоборот уйдёт).
▍ Подключаем и пробуем!
Для примера я сделал тик не каждые 60 секунд, а каждые 3 секунды. Минимум можно сделать, каждые две, так как тик равен 1,5 секунды. Хотя с советскими допусками, если похимичить, можно и раз в секунду сделать.
![](https://habrastorage.org/webt/4l/ne/ss/4lnesscxsl5bzgp_jnbsu7tryeg.jpeg)
Специально для вас снял видео работы:
Такая частота хода нужна, в первую очередь для отладки и демонстрации работы. Заменить переменную с 3 на 60 и залить заново код, дело нескольких секунд.
Резюмируя
Вот так, небольшой проект одного выходного дня вырос в достаточно прикольное устройство. Если посмотреть, за сколько продают подобные самодельные контроллеры вторичных часов на различных площадках, то понимаешь, что самодельное устройство — это приличная экономия, да и плюс достаточно неплохой опыт. Так что смело повторяйте, оно работает.
Хочу поблагодарить sfrolov за то, что увлёк меня вторичными часами. Очень надеюсь, что он нас порадует своими публикациями на этом ресурсе.
Полезные ссылки:
- Код проекта на гитхабе.
- Паспорт на часы “Стрела” типа ВЧС1-М2ПВ24Р-300-323К.
- Публикации sfrolov раз и два.
- Часовые сети прошлого. Аналогичный проект первичных часов на хабре. Очень хорошо и подробно рассказывается об устройстве таких сетей. Рекомендую к прочтению. astrei спасибо за пост!
- Основы электробезопасности при проектировании электронных устройств.
- AVR Timer Interrupts Calculator.
P.S.
Если кому интересны оригинальные первичные часы, или самодельные вторичные — пишите. Если будет много интересующихся, подумаю об изготовлении платы.
![](https://habrastorage.org/webt/ou/g5/kh/oug5kh6sjydt9llengsiebnp40w.png)