Как оживить часы "Стрела"

Статус
Закрыто для дальнейших ответов.

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
Алгоритм автоподвода стрелок прост:

1. При включении двигаем стрелки в положение "ровно шесть" (срабатывают датчики).
2. Узнаём, сколько же на самом деле времени сейчас (по модулю часов реального времени, у меня это DS3231) и высчитываем, сколько импульсов подать, чтобы показывать правильное время. С учетом того, что стрелки движутся не мгновенно.
3. Передвигаем стрелки, посылая импульсы не раз в минуту, а чаще.

В том случае, когда правильное время между 6 и 12 часами -- нет особых проблем. А вот если сейчас 5.50, то часовой стрелке придется совершить почти полный оборот, а минутной -- почти двенадцать полных оборотов. Это долго и громко. Можно, конечно, подождать, если часы впереди нужного времени на пять минут или десять. Но час или два ждать бессмысленно. Уж лучше иметь возможность крутить назад.

За совет спасибо.
 

Tiktak24

Пользователь
Регистрация
25.11.2018
Сообщения
8
Оценка реакций
0
Возраст
104
Город
Москва
датчик наверно можно и не ставить, стрелки то жестко привязаны к положению.
Выставил один раз на 12 00 и отсчет пошел.
Пропало электричество, запонил время и записал в микросхему флешь
появилось - посчитал и передвинул стрелки.

Кстати с моим блоком часы больше 2х суток ходят от 4х пальчиковых батареек, так что можно сделать резервное питание и часы будут ходить даже без электричества.
На самом деле они очень мало потребляют, меньше 200мА при 5в .
 

Tiktak24

Пользователь
Регистрация
25.11.2018
Сообщения
8
Оценка реакций
0
Возраст
104
Город
Москва

часы 30х годов, вроде как копия сименс в работе
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
запонил время и записал в микросхему флешь
Возможно и так.

Кстати с моим блоком часы
Ваш блок и сделан по уму, и функции полезные есть. Но, во-первых стоит как чугунный мост (как раз про него я писал в первом посте этой темы, что можно "купить готовый блок управления"), во-вторых его самостоятельно не сделать, нужен некий опыт, притом не только в пайке, но и в программировании. А я писал немножко про другое -- как сделать самому из подручных материалов и не зная о предмет вообще ничего :)
 

Tiktak24

Пользователь
Регистрация
25.11.2018
Сообщения
8
Оценка реакций
0
Возраст
104
Город
Москва
На сегодня это самая низкая цена на готовое устройство такого типа, тем более что питать часы можно от любой зарядки микроусб или даже от повербанка. Но главное - этот блок выдает не 12в, а 24 согласно госту тоесть 100% совместим с любыми вторичными часами.

Сделать самому "проще и дешевле" как правило не проще и не дешевле, а человеку нужно чтоб часы ходили, и желательно точно, без какой либо сложной настройки. Так что цена тут аргумент так себе..

Добавим сюда что от моего болка паралельно можно 5шт часов запустить, так вообще получеатся идеальный вариант сделать небольшую ччасовую сеть на даче, в кафэ или в квартире

И уж если говорить о цене, то проще сделать блок на ИЕ12 без всяких ардуин и прочего, схема есть в интернете.
 

Dmytro

Пользователь
Регистрация
10.02.2021
Сообщения
2
Оценка реакций
0
Возраст
26
Город
Киев
Сделал на ардуинке с написаным выше кодом. Спешат в сутки на 2 минуты в среднем. Нужен модуль реального времени или не только в этом проблема?
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
Нужен модуль реального времени или не только в этом проблема?
Модуль часов реального времени совершенно не нужен. Проблема в том, что ардуинка -- детская игрушка, и микросекунды, которые она отсчитывает, в разных экземплярах платы длятся по-размному. Ничего страшного, это легко исправимо.
Нужно, чтобы часы за сутки двигали стрелками на 2 раза меньше.
Для этого достаточно изменить значение интервала между импульсами в строчке
Код:
delay(59500);
Вместо числа 59500 поставить, для начала, 59546. 46 -- это на столько микросекунд ваш экземпляр ардуино ошибается каждую минуту. Это расчетное число (получено, основываясь на фразе "спешат в сутки на 2 минуты"), и его нужно проверять практикой. Если после изменения кода часы продолжают спешить или начинают отставать -- число 59546 нужно поменять на другое -- поменьше, если отстают, или побольше, если спешат.
 
  • Спасибо
Реакции: ORAS

Dmytro

Пользователь
Регистрация
10.02.2021
Сообщения
2
Оценка реакций
0
Возраст
26
Город
Киев
Спасибо, буду подбирать значит

Проблема в том, что ардуинка -- детская игрушка, и микросекунды, которые она отсчитывает, в разных экземплярах платы длятся по-размному.
Может ещё проблема в том что ардуинка палёная, хотя вряд ли
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
Их уже не бывает оригинальных. Так что нет ничего страшного, если эта пришла с алиэкспресса :)
 

Tiktak24

Пользователь
Регистрация
25.11.2018
Сообщения
8
Оценка реакций
0
Возраст
104
Город
Москва
Если вы хотите часы, а не игрушку - то нужен модуль реального времени
желательно еще иметь синхронизацию по вайфай или жпс
какая будет при этом ардуинка - совершенно не важно
ну и с 12 вольтового Блока питания - нормально часы ходить не будут

вот например отзыв о моем блоке от одного из клиентов
"Контроллер для вторичных часов - огонь! Часы ходят секунда в секунду! Восторг - это именно та эмоция, что испытываю)"
 
  • Angry
Реакции: алекса

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
Мужчина, вы надоели своей саморекламой. Все кто хотят, найдут вас на Авито. А здесь тема про самоделки.
 
  • Спасибо
Реакции: алекса

sergey_t

Пользователь
Регистрация
31.12.2021
Сообщения
4
Оценка реакций
0
Возраст
24
Город
Белгород
Одним из артефактов советских времен были настенные вторичные часы. Они не имели часового механизма, а управлялись централизованно -- по сигналу от первичных часов, установленных где-нибудь в отдельной комнате на предприятии или учреждении, все часы передвигали стрелку на минуту вперед. Это была часовая сеть в пределах одного здания или в пределах одного завода.
Посмотреть вложение 124456

Такие часы были разными, они часто встречаются в продаже, и встает вопрос -- а можно ли заставить их показывать правильное время?

Самый простой вариант, конечно же, выкинуть старый "стрелкопередвигатель" и поставить нормальный часовой механизм от китайского будильника.

Более сложный: найти "первичные" часы и подключить к ним вторичные.

Еще вариант: купить готовый блок управления для таких часов. Все бы хорошо, но он дороже самих часов раза в три.

Но такой блок управления можно сделать самому. Уровень знаний для этого нужен примерно как у шестиклассника.

Для этого понадобится Arduino-совместимая плата (я использовал самое дешевое, попадавшееся в руки – Arduino Nano китайского производства)
Посмотреть вложение 124451

и модуль под названием «драйвер двигателя» (фактически это очень умный транзистор), который у продавцов электроники для самодельщиков может называться L9110 или HG7881.

Посмотреть вложение 124452
Кроме того, понадобится источник питания на 12 вольт (он будет снабжать электричеством часы и всю остальную электронику) и несколько соединительных проводов. Можно использовать специальные провода с разъемами типа “мама” для соединения таких плат (покупаются в тех же магазинах для самодельщиков), можно не заморачиваться и припаять любым имеющимся проводом. Блок питания проще всего купить на строительном рынке, там оно продается под названием «трансформатор для светодиодной ленты». Нужен на 12 вольт, вполне достаточно самого дешевого, на 25 ватт. Если в хозяйстве уже есть блок питания с мощностью побольше, то он тоже подойдет.

Схема подключения:
Посмотреть вложение 124453

Пояснения к схеме: красный провод подсоединяется к выходу V+ блока питания. Он идет к ножке VIN на Arduino Nano и к ножке VCC на драйвере.

Черный провод подсоединяется к к выходу V– блока питания. Он идет к ножке GND на Arduino Nano и к ножкеGND на драйвере.

Синий провод соединяет ножку D12 на Arduino Nano c ножкой B-IA на драйвере.

Зеленый провод соединяет ножку D11 на Arduino Nano c ножкой B-IB на драйвере.

Провода от разъема MOTOR B на драйвере идут к часам. К какому контакту часов подключать какой провод – совершенно несущественно.

Посмотреть вложение 124455

После того, как схема собрана, Arduino нужно запрограммировать. Для этого нужно установить среду разработки (Arduino IDE), скопипастить в новый документ программу, после чего залить эту программу в Arduino.


Arduino nano подключается к компьютеру с помощью USB -> Micro-USBкабеля (от мобильного телефона вполне подойдет). К источнику питания в 12 вольт в этот момент можно не подключать – необходимое питание плата получит от компьютера.


Как установить среду разработки, лучше прочитать у специально обученных людей:


http://wiki.amperka.ru/установка-и-настройка-arduino-ide


В некоторых случаях (то есть с большинством дешевых китайских плат) дополнительно понадобится устанавливать драйвер CH340. Без этого не получится выполнить шаг 3 инструкции и последующие.


Один из вариантов решения проблемы тут:


https://www.drive2.ru/c/1725630/


Версии виндовс у всех разные, так что с драйверами, возможно, придется повозиться. Пользователи остальных ОС тоже не обделены радостью – лично мне понадобилось несколько дней, чтобы методом проб и ошибок найти драйвер, подходящий для моей версии макос.


Сама программа для копипастинга тут:


Код:
int IN1 = 11;
int IN2 = 12;
boolean STATE = true;


void setup() {
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);

}
void loop()
{
  digitalWrite (IN2, STATE);
  digitalWrite (IN1, !STATE);
  delay(500);
    digitalWrite (IN1, LOW);
   digitalWrite (IN2, LOW);
  delay(59500);
STATE = !STATE;
}

Создаете новый документ, копируете туда этот малопонятный, но достаточно короткий текст, и заливаете его в вашу плату, как описано в Шаге 5 инструкции от Амперки.
Большое спасибо за советы! Всё сделал, всё работает, но возникла проблема: за сутки часы отстают ровно на одну минуту. В чём может быть проблема и как это исправить?
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
но возникла проблема: за сутки часы отстают ровно на одну минуту.
В принципе, это очень хороший результат. Но если хочется совершенства, то можно улучшить, исходя из таких соображений:

Каждую минуту блок управления выдает на часы импульс длительностью в половину секунды. После чего 59,5 секунд ничего не делает. Так как техника китайская и дешевая, то отсчет времени у нее может быть слегка неточным. В результате за сутки блок управления передвигает стрелку не 1440 раз (24 часа * 60 минут в часе), а всего 1439 :)
Чтобы решить эту проблему, скажем блоку управления, чтобы он простаивал не 59,5 секунд а чуть-чуть поменьше. На 1/1440. Так как программа считает интервалы времени в микросекундах, то 59,5 секунд это 59500 микросекунд

59500 - 59500/1440 = 59459

То есть вместо строчки

Код:
delay(59500);
поставим строчку

Код:
delay(59459);
Таким образом, блок управления будет передвигать стрелки немножко раньше, и в результате за сутки передвинет их нужное нам количество раз.
 

sergey_t

Пользователь
Регистрация
31.12.2021
Сообщения
4
Оценка реакций
0
Возраст
24
Город
Белгород
В принципе, это очень хороший результат. Но если хочется совершенства, то можно улучшить, исходя из таких соображений:

Каждую минуту блок управления выдает на часы импульс длительностью в половину секунды. После чего 59,5 секунд ничего не делает. Так как техника китайская и дешевая, то отсчет времени у нее может быть слегка неточным. В результате за сутки блок управления передвигает стрелку не 1440 раз (24 часа * 60 минут в часе), а всего 1439 :)
Чтобы решить эту проблему, скажем блоку управления, чтобы он простаивал не 59,5 секунд а чуть-чуть поменьше. На 1/1440. Так как программа считает интервалы времени в микросекундах, то 59,5 секунд это 59500 микросекунд

59500 - 59500/1440 = 59459

То есть вместо строчки

Код:
delay(59500);
поставим строчку

Код:
delay(59459);
Таким образом, блок управления будет передвигать стрелки немножко раньше, и в результате за сутки передвинет их нужное нам количество раз.
Спасибо большое за совет, сейчас попробую исправить код.
Подскажите, пожалуйста, вот ещё что: можно ли с помощью такого же шагового драйвера подключить двухсторонние часы (два циферблата на одних часах)?
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
Никогда таких не видел, но особых проблем не предполагаю. Там два механизма перевода стрелок или один? К драйверу можно подключить два мотора. Правда, управляющие сигналы придется подавать на обе пары входов драйвера. К тому же, имеет смысл думать об ограничениях по току -- хилые транзисторы не переварят более 800 миллиампер на каждом из выходов. Но эта проблема решается заменой драйвера на L298N, тот пропускает до 3А, и диапазон рабочих напряжений у него побольше, до 36В. Для часов, рассчитанных на 24 вольта это может быть важным.
 
  • Спасибо
Реакции: ORAS

ORAS

Пользователь
10 лет на форуме
Регистрация
06.05.2008
Сообщения
3 239
Оценка реакций
3 227
Город
Москва
Интересная штука получается !
Игорь, респект !
П.С.
С "Ардуиной" дела не имел, только с ОВЕН - ПЛК. )))
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru

sergey_t

Пользователь
Регистрация
31.12.2021
Сообщения
4
Оценка реакций
0
Возраст
24
Город
Белгород
Никогда таких не видел, но особых проблем не предполагаю.
Получилось подключить два циферблата к одному шаговому механизму. Идут чётко, ровно, бывает отставание или спешка на секунду, но выравниваются сами. В коде прописал delay(59415).

Хотел уточнить: возможно ли с помощью пульта или с помощью ещё какого-о механизма подводить часы, когда они отстают или убегают вперёд? Просто планирую повесить часы на чердаке, залазить туда не всегда удобно, а если, например, перебои со светом, то часы идти не будут, придётся их потом подводить.
 

Krest

Administrator
Топикстартер
Регистрация
17.05.2005
Сообщения
7 442
Оценка реакций
2 400
Возраст
49
Город
Москва
Сайт
www.pobeda-club.ru
Хотел уточнить: возможно ли с помощью пульта или с помощью ещё какого-о механизма подводить часы, когда они отстают или убегают вперёд?
Вполне возможно удаленно подводить часы вперед. Часам абсолютно все равно, когда придет управляющий импульс -- в следующую минуту или в следующую секунду. Так что можно приделать к ардуино кнопку, и при ее нажатии переводить часы на минуту вперед. Или вместо кнопки использовать ИК-пульт, или радиопульт, или блютус телефона. На алиэкспресс много модулей для ардуино, выбирай на вкус. Но в силу самой конструкции механизма часов переводить назад их можно только вручную. Так что если часы ушли вперед на 5 минут, то удаленно можно только перевести их дальше -- еще на 23 часа 55 минут, чтобы они показывали правильное время. И если одно нажатие на кнопку переводит часы на 1 минуту вперед, то придется нажать на кнопку какие-то 1435 раз :)

Можно, кстати, сделать часы самоподводящимися, получая значения точного времени от GPS и контролируя движение стрелок, например, с помощью датчиков на отражение (банальный "датчик линии" из ардуиновских модулей для роботов). Но все это уже выходит за рамки "сделай за пять минут с минимумом знаний" и, по большому счету, не стоит затрачиваемых усилий.
 

юрий-победа

Пользователь
10 лет на форуме
Регистрация
27.02.2011
Сообщения
3 275
Оценка реакций
2 021
Возраст
59
Город
Одесса-город герой СССР
а если отсчет времени задержать на минуту,
с помощью какой то тети?
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.