Как синхронизировать часы в доме. Как синхронизировать свои наручные часы с атомными: условия — домашние. Итак, как синхронизировать свои наручные часы с атомными часами и выставить точное время

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

Без атомных часов в настоящее время невозможна работа современных систем навигации (в т.ч. GPS, ГЛОНАСС, Galileo), систем спутниковой и наземной телекоммуникации, в частности станций мобильной связи.

В нескольких странах сформированы национальные центры стандартов времени и частоты, а также службы точного времени, периодически транслирующие временные сигналы по радио.

Работы по улучшению характеристик атомных часов ведутся постоянно, совершенствуются также системы и методы синхронизации разного рода электронного оборудования с атомными часами. Более того, с недавнего времени некоторые часовые марки начали выпускать часы с функцией автоматической калибровки точности хода по сигналам точного времени от атомных часов. Но на самом деле синхронизировать с атомными часами можно любые часы.

Для этого достаточно знать, как устанавливается время на конкретной модели (мы для примера взяли наручные Romanson — mir-chasov.ks.ua/shop/romanson — хронографом), и иметь под рукой данные о точном времени с атомных часов (сервер/сайт точного времени). Проще говоря, требуются руководство пользователя наручных часов и атомные часы — ничего сложного.

Итак, как синхронизировать свои наручные часы с атомными часами и выставить точное время.

1. Для начала готовим часы к настройке. В аналоговых моделях время выставляется заводной коронкой, которая, как правило, должна быть выдвинута из корпуса в определенное положение (у наших Romanson — это вторая позиция из трех возможных); у цифровых часов время выставляется одной из кнопок на корпусе, на которую, наоборот, надо надавливать. Напомним, что стрелки следует переводить только по ходу.

2. Устанавливаем часы и минуты в соответствии с текущим временем, даем часам поработать, пока секундная стрелка (или счетчик секунд) не встанет в нулевое положение (метка 12 — на аналоговом циферблате и 0 — на цифровом). Положение минутной стрелки может немного измениться, но это нормально, минуты будем выставлять заново. После установки секундной стрелки на 12 останавливаем часы (в Romanson для этого необходимо выдвинуть заводную коронку в крайнюю позицию).

3. Заходим на сервер точного времени; мы использовали данные сервиса time.is (к слову, заодно вы узнаете, насколько точно идут часы в вашем компьютере, смартфоне или планшете).

4. Ловим момент, когда на циферблате атомных часов сменится очередная минута, и «обнулятся» секунды, и устанавливаем свои часы на минуту вперед. Например, если сервер точного времени показал 12:35:00, мы выставляем 12:36. Далее дожидаемся подхода момента следующего «обнуления» секунд на атомных часах и запускаем свои часы. Т.е., в 12:35:59 мы нажимаем на коронку своих Romanson, возвращая ее в нижнее положение и запуская тем самым механизм. На этом всё, теперь наши часы синхронизированы с атомными часами.

И в завершение, специально для поклонников суперточного времени, напомним/уточним, что между показанием настоящих атомных часов и показаниями любого сервера точного времени всегда существует погрешность. Кроме того, погрешности существуют и между показаниями сервера и показаниями часов на экране устройства, с которого на этот сервер зашли. Проще говоря, пока сигнал придет на сервер, а потом с сервера — на ваше устройство связи (время прохождения зависит от удаленности сервера, пропускной способности и загруженности интернет-каналов и ряда других параметров), эталонные атомные часы уже уйдут вперед, и ваши часы хоть на доли секунды, но будут отставать. Потому описанная выше процедура часов не является самой совершенной, но, тем не менее, на бытовом уровне этого достаточно, в особенности если вы пользуетесь механическими часами. В статье использованы материалы с сайта компании «Мир Часов».

Когда изучаешь новую технологию или язык программирования, основные понятия всегда носят относительно рутинный характер и поэтому, на мой взгляд, быстро отбивают желание обучаться у начинающих. Цель данной статьи - это заинтересовать и увлечь читателя изучением программирования на примере разработки элементарной графики в динамическом режиме. Статья подойдет для начинающих разработчиков, которые ознакомились с основами HTML5 и JavaScript , и которым наскучило видеть статический текст на страничке при выводе в консоль браузера массивов, объектов, результатов арифметических операций и т.д. Далее мы реализуем простейшую, но полезную для понимания языка анимацию.Что мы будем делать? Рассмотрим процесс создание простейших аналоговых часов средствами HTML5 и JavaScript. Рисовать часы будем графическими примитивами, не используя средств CSS . Мы вспомним немного геометрии для отображения нашей графики, вспомним немного математики для реализации логики отображения наших анимированных часов. И в целом постараемся уменьшить энтропию в познаниях языка JavaScript. Для разработки нам понадобится текстовый редактор вроде Notepad++ или Sublime Text 3 .Реализация цифровых часов Создадим три файла в текстовом редакторе. (Все три файла должны лежать в одной папке).

index.html - основная страничка
clockscript.js - скрипт с логикой работы
style.css - файл стилей

Для начала выведем текущее время в обычный div -блок в.html файл. Даже в такой маленькой задаче есть свой подводный камень. Если просто закинуть функцию отображения часов в событие onload у тега body , то текущее время отобразится в строке, но так и останется статическим. И div -блок, в который мы отправили строку с текущим временем, не будет самостоятельно обновляться.

Добиться самостоятельного обновления элемента страницы можно оборачиванием функции отображения времени в анонимный метод, который присваивается свойству onload корневого объекта Window .

Один из вариантов реализации может быть следующим. Файл index.html :

Часы Черновик по JavaScript. Работа с холстом:
Тут будет текущее время

Файл style.css :

#clock{ font-family:Tahoma, sans-serif; font-size:20px; font-weight:bold; color:#0000cc; }
Файл clockscript.js :

Window.onload = function(){ window.setInterval(function(){ var d = new Date(); document.getElementById("clock").innerHTML = d.toLocaleTimeString(); } , 1000); }
Разберемся с работой clockscript.js :

Выполняем внутренний JavaScript-код при помощи привязки к событию onload корневого объекта Window :

Window.onload = function(){/*бла-бла-бла*/}
Метод объекта объекта Window , который выполняет код через определенные промежутки времени (указанные в миллисекундах):

Window.setInterval(function(){/*Тут действия, обернутые в функцию, которую нужно выполнять каждые 1000 миллисекунд*/} , 1000);
Объект Date используется для проведения различных манипуляций с датой и временем. С помощью конструктора создаем его экземпляр и называем d :

Var d = new Date();
Находим объект DOM по его id. Это именно тот объект, в который мы хотим выводить наше время. Это может быть параграф, заголовок или еще какой-то элемент. У меня это div -блок. После получения элемента по id, используем его свойство innerHTML для получение всего содержимого элемента вместе с разметкой внутри. И передаем туда результат метода toLocaleTimeString() , который возвращает форматированное представление времени:

Document.getElementById("clock").innerHTML = d.toLocaleTimeString();
Вот, что должно получиться(время динамически изменяется каждую секунду):

Реализация аналоговых часов С этого момента мы будем использовать Canvas (HTML) , который будет служить нам холстом для творчества.

Чтобы увидеть наш холст в файле index.html внутри body мы должны где-то расположить следующий тег, сразу определив его размеры:


Теперь в файле clockscript.js , прежде чем пытаться рисовать, нужно получить контекст объекта Canvas . Сделаем это в начале нашей функции отображения часов. Тогда файл clockscript.js изменится следующим образом:

Function displayCanvas(){ var canvasHTML = document.getElementById("myCanvas"); var contextHTML = canvasHTML.getContext("2d"); contextHTML.strokeRect(0,0,canvasHTML.width, canvasHTML.height); //Тут будет вся логика часов и код отображения через графические примитивы return; } window.onload = function(){ window.setInterval(function(){ var d = new Date(); document.getElementById("clock").innerHTML = d.toLocaleTimeString(); displayCanvas(); } , 1000); }
Ну что, давайте вспоминать математику? Нам важно понять связь между делениями определенных стрелок и углом их поворота на будущем циферблате.

Угол поворота всех стрелок за 1 секунду:

  • Секундная стрелка повернется на угол - (1/60)*360 o = 6 o
  • Минутная стрелка повернется на угол - (1/60)*6 o = 0,1 o
  • Часовая стрелка повернется на угол - (1/60)*0,1 o ≈ 0,0017 o
Первая проблема:

То есть даже за 1 секунду все стрелки должны повернуться, каждая на соответствующий угол. И если это не учесть, то первый подводный камень, который мы получим в отображении, будет некрасивая анимация. К примеру, когда время будет 19:30, то часовая стрелка будет ровно показывать на 19 часов, хотя в реальной жизни она должна уже быть наполовину приближена к 20 часам. Аналогично, приятнее будет выглядеть плавное передвижение минутной стрелки. Ну а секундная стрелка пусть перещелкивается дискретными движениями, как в большинстве реальных механических часов. Решение проблемы: прибавлять к углы поворота текущей стрелки угол поворота более быстрой стрелки, домноженный на коэффициент, обозначающий его долю от угла текущей стрелки.

Реализация:

Var t_sec = 6*d.getSeconds(); //Определяем угол для секунд var t_min = 6*(d.getMinutes() + (1/60)*d.getSeconds()); //Определяем угол для минут var t_hour = 30*(d.getHours() + (1/60)*d.getMinutes()); //Определяем угол для часов
Вторая проблема:

Угол вращающегося радиус-вектора(стрелки часов) отсчитывается от положительного направления в направлении против часовой стрелки. Если мы это не учтем в нашей логике, то направим часы назад в прошлое.

И еще, отсчет часов, минут и секунд у нас происходит от цифры 12, верхнего положения. Решение проблемы: в наших формулах мы должны учесть это в качестве сдвига +π/2 (90 o). А перед значением угла ставить знак "-", чтобы часы шли именно по часовой стрелке. И, конечно, учитывать, что передача угла в градусах в тригонометрические функции языков программирования осуществляется с умножением на коэффициент "π/180 o ".

Реализация на примере секундной стрелки:

ContextHTML.moveTo(xCenterClock, yCenterClock); contextHTML.lineTo(xCenterClock + lengthSeconds*Math.cos(Math.PI/2 - t_sec*(Math.PI/180)), yCenterClock - lengthSeconds*Math.sin(Math.PI/2 - t_sec*(Math.PI/180)));
Третья проблема:

В ходе разметки рисочек циферблата нужно как-то выделить рисочки напротив часов. Всего рисочек - 60 для секунд и минут. 12 - для часов. Эти 12 должны как-то выделяться на фоне всех остальных. Также симметричность оцифровки зависит от ширины цифр. Очевидно, что цифры 10, 11 и 12 шире, чем 1, 2, 3 и т.д. Про это нужно не забыть.

Решение проблемы и вариант оцифровки циферблата:

For(var th = 1; th

Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: