ラズパイと約10ドルのGPSモジュールで作るナノ秒精度のタイムサーバー

ネットワーク機器の時刻合わせは、ふだんインターネット上のNTPサーバー(時刻を配るサーバー)に任せておけば十分なことが多い。だが経路の遅延に左右され、精度はミリ秒単位にとどまる。GPSから直接時刻を取る「Stratum 1」と呼ばれる最上位の時刻源を市販で買うと、500ドル(約8万円)以上はする。Reddit(r/raspberry_pi)に投稿された自作プロジェクトは、Raspberry Piと約10ドル(約1600円)のGPSモジュールで、ナノ秒の領域まで踏み込む時刻サーバーを組み上げた。GitHubで「PiTime」として公開されている。

構成はシンプルだ。「Raspberry Pi 4 Model B」に、Amazonで手に入る「GT-U7」というGPSモジュールをGPIOで接続し、アンテナを窓際に置く。CPUやメモリはほとんど使わないため、どのモデルのラズパイでも動くという。

精度を生むのはPPS(Pulse Per Second)と呼ばれる信号だ。GPSが送るNMEAというシリアルデータだけでは、衛星の読み取りから送信までの遅れで精度は約50ミリ秒にとどまる。一方、PPSは「1秒の始まり」をハードウェアで数十ナノ秒の誤差に合わせて知らせる。時刻同期ソフトのchronyは、NMEAで「今が何時か」を、PPSで「各秒が正確にいつ始まるか」を読み取り、両者を組み合わせてサブマイクロ秒(1マイクロ秒未満)の精度を得る。

いくつかの工夫もある。Raspberry Pi 4はBluetoothのチップが性能の良いUART(シリアル通信回路)に割り当てられているため、設定ファイルでBluetoothを無効にしてUARTを解放した。さらにCPUの1コアを時刻処理専用に切り離し、ほかの処理に邪魔されないようにしている。GPSのデータはgpsdというソフトが読み取ってchronyへ渡し、chronyはPPSを直接受け取る仕組みだ。

結果として、GPSから1ステップだけ離れたStratum 1という階層に到達した。一般的なNTPサーバーが3〜4階層であることを思えば、家庭のLANにそれを置ける意味は大きい。時刻のずれは数百ナノ秒、PPSのばらつき(標準偏差)は約200ナノ秒、CPU使用率は専用コアで5%未満だという。状態を見るためのWebダッシュボードも自作し、上空の衛星配置やジッターの履歴を表示する。LAN内へより高精度に時刻を配るPTP(高精度時刻プロトコル)や、暗号認証付きで時刻を配るNTSにも対応させている。

制作者が最も時間をかけたのは、GPSモジュールの選定ではなくアンテナの置き場所だった。窓を変えて南の空がよく見える位置を探した結果、捕捉できる衛星は1〜2個から8〜11個に増えた。「アンテナの配置はモジュールの品質よりずっと重要」というのが一番の学びだという。総額でも90ドル(約1万4000円)ほどで、商用機の数分の1の費用で、時刻同期の仕組みを一通り学べる構成と言えるだろう。

関連情報

Raspberry Pi
¥15,800 (2026/05/25 12:39時点 | Amazon調べ)
Futuristic control dashboard displaying time, status, and a circular GPS satellite map with glowing green nodes.

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!

最新記事

YouTube / PodCast

【PR】読んで役立つ注目記事

目次