DOME's diary

雑多なブログです。主に理系の話を書きます。

時刻を合わせる方法について

サークル”オタク語り”アドベントカレンダー2023 12/6

こんにちは。

ブログを開設したものの、”オタク語り”のアドベントカレンダー専用になっているドメです。

アドベントカレンダーが開催決定する前から書きたい記事があったのですが、色々忙しく優先度が下がってしまい、下書きのまま放置していました。今年のアドベントカレンダーをいい機会として、書き上げたいと思います。

今回は、その公開したい内容があまりにも細かい・専門的内容すぎるので、”オタク語り”の意図に沿ってその足掛かりになるような記事を書きたいと思います。

はじめに

さて、皆さんがいつも使っている時計は何でしょうか。腕時計・置時計・スマホの時計などいろいろあると思います。その時計に、自動時刻合わせ機能はついているでしょうか。

我々の生活は常に時刻に縛られています。学校は時間割通りに動くし、電車は秒単位でダイヤが組まれています。また、ネットワーク機器はかなり高精度で時刻を保持する必要があります。身近な機器はどのようにして時刻を合わせているのでしょうか。

今回は、現代における(太陽を参考にするとかいう原始的な方法は置いておいて)機器の時刻合わせの方法を3つ紹介します。

標準電波JJYによる時刻合わせ*1

いわゆる「電波時計」と呼ばれるもので採用されている方式です。

日本には、時刻合わせ用に2つの標準電波が飛んでいます。1つ目が福島県おおたかどや山標準電波送信所から送信されている40kHzの電波、2つ目が佐賀県/福島県はがね山標準電波送信所から送信されている60kHzの電波です。これらはコールサインから標準電波JJYと呼ばれています。kHzというとても低い周波数(長波)を採用することでより遠くまで電波を送信できるようにしています。どちらの送信所にもセシウム原子時計が設置されており、正確な時刻情報を備えた電波を送信しています。

標準電波は、01のAMで送信されています。基本的に1秒に1データを送信し、0秒を起点とした1分60データでその分の時刻が取得できるようになっています。詳しくはNICTのページ*2をご覧ください。

受信側は、AM用のアンテナ・回路(AMラジオと同じようなもの)を用意し、得られたデータを解析すればよいです。日本全国、電波を受け取れるところであればどこでも時刻合わせができるので、時刻合わせの方法として広く採用されています。ただし基本的に回路構成が日本限定のものが多い(海外にも標準電波はあるが、周波数などが違う)ので、日本以外で使うことはできません。

GPSによる時刻合わせ

2つ目は、位置情報取得で有名なGPSを利用する方法です。

GPSは基本的に、GPSから送出される電波に記録されている時刻と自分の時刻を比較し、衛星で送信されてから受信するまでにかかった時間をもとに、衛星との距離を算出し、自分の位置を割り出します。

基本的にGPSによる位置の取得は、4つの衛星のデータをもとに行われます。位置の決定だけなら3つの衛星で十分(厳密にいえば2点に絞られる)ですが、自分の時刻がGPS衛星の時刻と同じとは限らないので、位置座標3変数と時刻変数を決定するために4つの衛星のデータから決定するといった方式になっているはずです。よって、GPSの基本的な通信を行えば、自身の時刻合わせができることになります。GPS衛星にも原子時計が搭載されています。

受信側はGPS電波を受信する設備が必要ですが、世界中どこでも使うことができます。最近は高級めの腕時計に採用されていたりしますね。

NTPによる時刻合わせ

最後に、NTPによる時刻合わせを紹介します。

NTPとは、Network Time Protocolの略で、インターネットを通した時刻合わせを行うためのプロトコルです。

NTPサーバーという正確な時刻を刻むサーバーに対し機器から時刻の照会を行います。この時、機器からサーバーに照会を送るのにかかった通信時間とサーバーから機器への返答にかかった通信時間が同じであるとし、照会から返答到着までの時間、返答中に記載されている照会の到着・送信時間をもとに、時刻合わせを行います。

インターネットに接続された機器であればなんでも時刻合わせを行うことができます。逆に、インターネット環境がないと時刻合わせを行うことができません。日本では先ほどの標準電波も管理しているNICTという機関が原子時計に接続したツヨツヨNTPサーバーを用意してくれており、なるべく負荷をかけないようにしながら個人利用することができます*3

Windowsとか、スマホとか、最近のインターネットに接続して使用するデバイスはほぼこの方式で時刻合わせを行っているのではないでしょうか。

おわりに

時刻を合わせる方法の中で代表的なもの(?)をご紹介しました。数時間で書き上げたつたない記事ですみません。

次回、12/8公開予定の記事ではNTPを利用した時刻取得に関して、ESP32を用いて実際に接続をするという技術解説に挑戦しようと思っています。

追記:12/8公開の記事のリンク

ESP32 (Arduino IDE)でNTPサーバーから情報を取得する - DOME's diary