Как синхронизировать часы в доме. Как синхронизировать свои наручные часы с атомными: условия — домашние. Итак, как синхронизировать свои наручные часы с атомными часами и выставить точное время
Как мы все помним из школьного курса истории, учет точного времени человечество начинало с наблюдения за передвижением небесных тел и нумерации часов в земных сутках. По мере развития технологий необходимость во все более точном времени только возрастала. Сегодня весь мир живет по атомным часам, в которых, согласно международной системе единиц СИ, точное время расчитываетя по электромагнитному излучению, возникающему при переходе между двумя сверхтонкими уровнями основного состояния атомов.
Без атомных часов в настоящее время невозможна работа современных систем навигации (в т.ч. 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();
Вот, что должно получиться(время динамически изменяется каждую секунду):
Чтобы увидеть наш холст в файле 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