#電波時計とは
日本の時刻の基準は、国立研究開発法人情報通信研究機構(NICT)が「日本標準時」として生成しています。NICTが保有する原子時計から生成した国際標準時(UTC、かつてはグリニッチ標準時GMTとしておなじみでした)を9時間進めたものを日本標準時として、NTPなどの各種時刻サービスを運用しています。詳しくは下記のリンクを参照してください。
https://jjy.nict.go.jp/index.html
時刻サービスの一つに標準電波JJYがあります。JJYは標準電波を送信する無線局のコールサインで、2001年までは5MHz、10MHzなどの短波帯で音声信号による時刻情報を送出していました。
現在は40KHz、60KHzという日常では縁のない長波帯で独特の2進化10進数でコード化した時刻情報(タイムコード)を送出しています。
市販の電波時計は、この長波帯でコード化した時刻情報を受信・解析して、時刻を較正しているわけです。
コードについてはNICTのサイトに解説がありますが、時、分、曜日、年などの情報を1秒ごとのパルスで送信しており、パルスの間隔が秒の情報となります。
https://jjy.nict.go.jp/jjy/trans/index.html
パルスの幅も情報の一つで、幅でバイナリの0と1、マーカーを区別しています。時刻情報はマーカーの区切りごとに8ビットのBCDでコード化されています。
コードの例
https://jjy.nict.go.jp/jjy/trans/timecode1.html
最初のマーカーが「x時x分0秒」をあらわしますが、分・時の情報を全て取得するのに20秒かかるため、マーカーの時刻がわかるのは20秒後ということになります。
原理的にリアルタイムに時刻を取得することはできず、あくまである程度正確な時計の較正用ということです。
#JJY受信機
電波時計を自作する場合、40KHz/60KHzが受信できる装置をどうするか、が最初の問題になりますが、幸いその目的のモジュールが販売されています。aitendoのD606Cというモジュールを使用しました。
https://www.aitendo.com/product/9148
CME6005というチップが使われており、バーアンテナもついていて、面倒な部分は処理して頂いているようです。助かります。
電源をつなげば出力端子にタイムコードが出て来ます。自室でJJYの電波が受信できないため、テスト用にJJYシミュレータを使用しました。
#micro:bitでタイムコードを解析する
電波時計モジュールの出力は、上記のように3種類の幅を持つアナログ信号です。パルスの幅をmicro:bitで取得して、「1」「0」「マーカー」を識別する必要があります。
micro:bitには「入出力端子」のカテゴリに「P0に正パルスが入力されたとき」や「受け取ったパルスの長さ(マイクロ秒)」というブロックがありますが、まさにこういう場面で使う機能でした。
ノイズを除去するため一定幅以下のパルスは無視して、パルス幅で1,0を識別し、分と時を格納するバッファ(配列)に書き込みます。分と時さえ取得できればよいので、残りの情報は切り捨てています。
プログラムはこちら
https://makecode.microbit.org/_E20VUW8aCRVr
#時計の形にする
時計本体もmicro:bitで作りますが、LEDに表示するだけだと面白くないのでアナログ時計にしました。一番単純にサーボの回転角で表現しています。
電波時計がタイムコードを解析し終わると、micro:bitの無線で時計本体に時刻を送信するようにしています。
構造はレゴ、サーボはレゴ対応のGeekservoの灰色のやつで作りました。
文字盤は見やすいように紙コップで縦型にしました。表示は0時~11時、0分~59分と変則ですが、実用上は問題ありません。
こちらの本家サイトに動画もありますので、よろしければご覧ください。
http://make-lab.sakura.ne.jp/RadioClock.html