2005年5月17日以後、あなたは
件目のアクセスさんです。
日々拡張工事中
TS-JJY02表示処理部
(左=ACアダプタへ/上=受信部へのケーブル/右=RS-232Cでコンピュータへ)
諸言 |
高価な装置だった
電波時計も、今や安いものでは2〜3k円から買える様になりました。
時計屋さんや家電量販店の時計コーナーでは、『電波時計』ばかりが
目立つようになってきています。
だが、コンピュータの時計合わせに利用出来るモノは、
専用製品ばかりでまだまだ高価です。
普通の安価な電波時計には、
折角の時刻データをコンピュータに受け渡す"手段"がありませんし。
んがー、東京・秋葉原の 秋月電子通商さんで売られてる、 有限会社トライステートさんの 電波時計キットは、 組み立てキットではありますが、安価でかつ RS-232C経由でデータを 得られる(←ここ重要)という優れものであります。
もちろん、このキットをRS-232C経由でコンピュータと接続するだけでは駄目で、
時刻データを利用してコンピュータの時計を合わせるためには、
トライステートさんのページに紹介されているような
電波時計用プログラム等が必要です。 本稿は、このキットの御紹介と FreeBSDマシンでの ntp サーバ計画についての 諸々についての5年がかりの壮大(苦笑)な計画の結果を記したものです。 |
トライステートの電波時計キットとの出会い |
トライステートさんの電波時計キットを知ったのは、
2001年のお正月頃のことでしょうか。 コンピュータ上で正確な時刻を知りたければ、 勿論、日本各地の公開ntpサーバ (現在ではここ などを参照して下さい)を利用すればよいのですが、 やはり一組織(自宅ででもですが)としては、 自らのところで主となるntpサーバを設置したい… という野望(笑)を持つのは当然(?)のことでしょう。 それには、専用ntpサーバ製品などを…ということになるのでしょうが、 なかなか高価(500k円くらいはしますね…)で、 残念ながら誰しもが簡単に購入出来るものではありません。
そこでどうにか安価にてntpサーバを組めないだろうかと調べました。
Kajikiさんの
「ラジオで計算機の時計を合わせよう!」
を知り、これを参考にしたシステムを2000年5月頃に構築し、
現在もテスト運用しています。
これは、AMラジオの時報をサウンドカード経由で取り込み、
Kajikiさん作の adjtmbyradio というプログラムを用いて、
時報の波形(パルス)を捕まえて時計合わせを行なう、というものです。 絶対時刻のデータを取得するにはやはり電波時計かGPSとかかなぁ… でも製品は高いよなぁ…と思っていたそんな折に、 トライステートさんの電波時計キットを知りました。 情報通信研究機構(当時は通信総合研究所)による JJYの標準電波運用を受信し、RS-232Cでコンピュータと接続して 時刻情報を取得(コマンド送信型)することが出来る…というキットです。 比較的安価(10k円で充分お釣りが。いや自分で組み立てねばなりませんが(汗)) ですし、仕様は公開されていますし、しかもユーザさんによる電波時計用プログラムも たくさん紹介されている…と願ったり叶ったりですね。 ですが早速買ってみた友人曰く、どうも電波の受信度合いがあまりよろしくない…と。 丁度その頃からでしょうか「電波時計」の一般製品が安くなり始め、 私も試しとして電波時計目覚しを購入してみたものの、 やっぱりどうも受信度があまりよろしくない…。 電波を捕まえそこねたのか、気がつくと秒針が0で止まっていたり (電波捕まえモード?)、映画とかのワープシーンさながら(?)に、 時計の針がぐるぐる回っていたり(時刻合わせモード?)…(苦笑)。 ここ近畿地方は、 40kHzの福島長波局(大鷹鳥谷山)からも60kHzの九州長波局(羽金山)からも 距離的に遠く離れている上(私のところは若干、九州局の方が近いかな…)に、 鉄筋コンクリートな建物の屋内だからというのもあるのでしょうか (出来るだけ窓辺に設置してるんですが…)。 そんなこんなで、電波時計キットによるntpサーバ計画は一旦サスペンドモードに…。 |
トライステートの電波時計キットの購入と組み立て |
で、実際にトライステートさんの電波時計キットを購入したのは、
2004年のお正月でした。 気づくと家の電波時計目覚しや柱時計が、 まぁそこそこ安定して電波を受信する様になってきたので、 そろそろかなーと購入してみることにしたのでした。 上京した際に、秋葉原の秋月電子通商さんに寄ったところ、 店頭では売り切れており、「入荷未定」と言われてとても残念な思いをしました。 が、秋月さんのオンラインショップにはなんとか在庫があったので、 本体キットとともに、 九州60kHz受信用改造キットも合わせて 通販で購入したのでした。 しかし年度末の多忙さや新しいオモチャ・ パネリーナを入手したり…と、なかなか組み立てる機会がなく、 放置プレイ(笑)の挙げ句、ようやく組み立てたのは2004年の6月でした。
実はこの通販で購入したものは
TS-JJY01という旧バージョン(ver.1)で、
どうやら
TS-JJY02
という新バージョン(ver.2)が発売される直前のためロット終了してたので、
店頭在庫が切れ、入荷未定だった…ということの様でした。
何のことはない、
旧バージョンの TS-JJY01 を購入したその2004年の1月から、
実際に組み立てた6月までの間に、
上京する機会が何度かあり、
秋葉原の秋月電子通商さんの店頭で新バージョンを見つけて
購入してしまったのでした(笑)。 組み立てですが…品数が多いので結構面倒ではありますね。 でも、附属の説明書は丁寧に書かれていますし、 判り難いところは トライステートさんのホームページ 上にクローズアップ写真付きで解説してありますし、 回路図見ながら考えるとか迷うとかいうことはありませんでした (液晶部へのコネクタの上下を逆につけてしまったことはありましたが)。 電子部品のハンダ付けが *そこそこ* 出来る方であれば、 品数は多いですが、一つ一つ丁寧にやっていけば、 1時間ほどで組み立て上がると思います。 |
旧バージョンTS-JJY01
(液晶部がぺにょぺにょに見えるのは保護シートを貼ったままだからです)
電波時計キットを実際に運用してみる |
さてそうして組み立てた電波時計キットですが、
まずはちゃんと電波を拾ってくれるかテスト運用をしてみました。 結局組み立てたのは、2004年1月に購入したTS-JJY01が1台、 2004年5月頃に購入したTS-JJY02が2台(3台とも九州60kHz受信用改造キット付)です。 当初、TS-JJY01 でテストしようと思ったのですが、 そうでなくとも地域的に受信状態があまりよろしくないので、 分離使用で受信部を窓辺に置いて利用できる TS-JJY02 でテストしてみました。
職場と自宅(距離的にそれほど離れていません。お互いが見通せる程度の距離です)の
2箇所に、TS-JJY02をそれぞれ設置してみました。
ともに鉄筋コンクリートの建物の窓辺に置いたのですが、
職場のはLEDに8割方「X」と表示され、
自宅のは8割方「O」と表示されます。
入れ換えてみても同じですので、キットの個体差とかではなく、
やっぱりその場所の電波状態なんでしょうか。
でも窓の外に置いてみてもあまり変わらないし…。謎だ。
(時期によっては双方の状態が全く逆な時もあります) |
新バージョンTS-JJY02の表示処理部
新バージョンTS-JJY02の受信部
電波時計キットをコンピュータに接続してみる |
さてそういう電波時計キットですが、
RS-232C経由でコンピュータに接続してみました(2004年初夏)。
接続するにはRS-232Cシリアルケーブル(ストレート)が必要です…って、
昔はモデムとの接続に必ず使っていた筈なんですけど、
部屋を探してみても見つからなかったり(苦笑)。 RS-232C経由で接続したところで、 まずはちゃんと接続できているかをテストしてみました。 接続したFreeBSDマシンで、X11上で使える通信ソフト seyon を用います。 シリアルポート0に接続したので、 通信につかうデバイスとしては /dev/cuaa0 を指定し、 あとは附属のマニュアルにも書かれている様に、 「9600baud, 8bit, non-parity, stopbit 1, flow制御なし」という 設定をしました。 そして seyon のコンソールで時刻出力コマンド"TIME"や日付出力コマンド"DATE"を 打ち込み、 Enterキーを押すとちゃんとそれぞれの値が返ってくることを確認しました。 ふむふむ。 さてさて、この動作を自動的に行なうために、 何らかのプログラムを用いるのですが…。 |
時間合わせプログラムを探す |
トライステートさんのホームページには、
「ユーザー様より御提供の電波時計用プログラム」として
WindowsやMac、FreeBSD用のものや、Javaで書かれたプログラムなどが
掲載されています。 …が、「道正さんからご提供:FreeBSD用の時間補正プログラム」が 残念ながら既にリンク切れでした。googleってみても見つかりませぬ。 同ページに紹介されている、 高橋さんによる 電波時計キット用ユーティリティ(perl,CGI)が利用できそうだと、 いろいろ触ってみたのですが、なんだかうまく時刻を拾ってくれません。 やはり自分で何とかせねばならんか…と諦めかけていたところ、 大野さんによる NTP4.1.0用電波時計パッチ が見つかりました。 で、もしかして本家に merge されているとか、 どなたかが既に使える様にして下さっているかも?!と ntp-4.2.0.tar.gz のソースを見てみると、 ntpd/refclock_jjy.c (coded by Takao Abe さん) に /* */ /* 2001/07/15 */ /* [New] Support the Tristate Ltd. JJY receiver */ /*とか書いてあります。ほほー素晴らしい。 丁度、FreeBSDの ports に入っているのが ntp-4.2.0 でしたので、 早速 install して、 ntp のソースに附属しているドキュメント(html/drivers/driver40.html)や、 重村さんの NTPd with C-dex JST2000なども参考にして、ntp.conf を設定します。 server 127.127.40.X mode 1 fudge 127.127.40.0 time1 YYYYTakeo Abe さんの refclock_jjy.c は、 このトライステートの電波時計キットだけでなく、 C-DEX社のJST2000にも 対応するもので、serverセクションの modeに トライステートの電波時計キットであれば1を、 JST2000であれば2を指定するようになっています。
この refclock_jjy.c では、/dev/jjy*
というデバイスファイルを使用しますので、
コンピュータの
Serial Port 0 (FreeBSD では /dev/cuaa0)、
Serial Port 1 (同じく /dev/cuaa1)など、接続したポートに応じて、
ln -s /dev/cuaa0 /dev/jjy0などとリンクしておきます。 server 127.127.40.0 mode 1となります。 ちなみに、127.127.40.Xの40とは、 ntpd/refclock_conf.c にある様に、 この refclock_jjy のドライバ番号(?)です。 さらに、fudgeセクションの fudge 127.127.40.0 time1 YYYYYYYY部は、実際に ntpサーバを運用してから、offsetのズレに対して 補正する値(秒)を与えることになります。
で、実際に設定をして運用を開始してみました(2004年初秋)。 remote refid st t when poll reach delay offset jitter ============================================================================== JJY(0) .JJY. 0 l - 64 0 0.000 0.000 4000.00と、when は値がなく、reach, delay, offset が 0、jitterが4000のままで、 一向に時刻合わせをしている形跡がありません。 謎だ…。 |
そこで?! |
いつまで経っても時刻を合わせようとしない ntp に悩みました(苦笑)。 トライステートのホームページにもあるように、 Ver.2.01の製品には TMON と TMOF コマンドが正常に動かないという バグがあり、これを修正するプログラムが公開されていることから、 当初、ROM側の問題かも?…とまで考えました。 そこで、秋月通商の AKI-PICプログラマーキットというPICプログラマーのキットを購入して 組み立て、これを用いて電波時計キットのPIC ROM(PIC16F873-20もしくは PIC16F976-20)自体のバージョンアップを試みました(2004年冬)。 …が、PICのデータは読み出せるのに、書き込みに失敗する…という状態で、 うーん、プログラマーキット自体の組み立てに失敗してるのか何なのか 不明なまま、またサスペンドモード(苦笑)に…。 |
ある日 |
2005年春、ふと何気に「ntp自体の新しいモノではちゃんと対応している
のではないか?」と、ntpの本家(?)
NTP Public Services Project
を眺めていたところ、
4.2.0a の development版のsnapshotsが結構頻繁に更新されているのに気づきました。
んでは試しに…と make して install してみると…、
なんの問題もなく、ntp が時刻を合わせてくれるではないですかっ!!!
remote refid st t when poll reach delay offset jitter ============================================================================== *JJY(0) .JJY. 0 l 37 64 377 0.000 3.177 13.802 件のソース(refclock_jjy.c)を見てみると、 /* 2004/10/31 */ /* [Change] Command send timing for the Tristate Ltd. JJY receiver */ /* JJY-01 ( Firmware version 2.01 ) */ /* Thanks to Andy Taki for testing under FreeBSD */ /* *とか The Tristate JJY-01 ( Firmware version 1.01 ) accepts "time" and "stim" commands without any delay. But the JJY-01 ( Firmware version 2.01 ) does not accept these commands continuously, so this driver issues the second command "stim" after the reply of the first command "date".とか書いてあるではないですかっ!! (refclock_jjy.cより引用) refclock_jjy.c の作者の Takao Abe さんのホームページには、 2004/11/02 トライステート社JJY-01の新バージョン(Version2)の問題解決パッチ トライステート社のJJY-01の新しいハードウェアあるいはファームウェアで、 JJYのクロック・ドライバが動作しない問題を解決するパッチです。 本家NTPのNTPアーカイブの ntp-dev-4.2.0a-20041122.tar.gz以降に取り込まれています。…ってそのものぢゃないですかっ!! 日頃、作者さんのページ等で最新動向を 確認しておけば良かった…という一例ですね(苦笑)。 トライステートの電波時計キット、 旧バージョンの version1 (TS-JJY01)は Firmwareは V.1.01 までが、 新バージョンの version2 (TS-JJY02)では V.2.02 までが公開されています。 ソース内にあるように、この Firmware V.1系では "date"コマンドと "time"/"stim"コマンドを連続的に受け付けてくれるのに、 Firmware V.2系(少なくとも V.2.01も)ではそれが駄目らしいです。 なので "date"コマンドの返答があるまで待つ様に fix されています。
ってことは…、
Firmware V.2.01 の TS-JJY02 (新バージョン)だけで試すのではなく、
折角組み立てた V.1.01 の TS-JJY01 (旧バージョン)で試してみておれば、
さっさと理由が判明していたのかもしれないですね(汗)。 |
窓辺にたたずむ(笑)TS-JJY02受信部
(ガラス窓です。よく見るとガラスにTS-JJY02が映り込んでますね)
その他もろもろ |
TS-JJY02で受信部と処理表示部を分離使用する際には、
一般的な8芯LAN用ストレートケーブルを用います。
…というか普通のLANケーブルが流用できる用に配線されているだけですが。
尚、薄型ケーブルとか一部LANケーブルに、8芯フル結線されてないものが
ありますが、これは動作しません(とホームページにも書いてありますが(汗))。 電源としては、仕様によると DC7〜15V・60mA (のACアダプタ)が必要です。 で、通常ではバックアップ用の回路がありませんので、電源を抜き差ししたり 瞬停とかあると、折角捕まえていた時刻をすーっかり忘れてしまいます。 そのため、TS-JJY02 ではバックアップ用バッテリが接続可能になっています。 NiCd10セル12Vつまり単3を10本直列してやればよい様です。 使用しつつこの電池を充電するには、電源的に15Vのモノが必要だそうで、 秋月さんの スイッチングACアダプタ 15V0.8Aが推奨されています。 電波を常時十二分に捕まえきれないうちの環境では、 これ、スイッチングですので、ノイズ発生も気にはなりますが…。
大阪日本橋の
共立電子さんで、バックアップ用電源として、
単3電池10本用BOXと単3NiCd(1.2V/900mA)を10本買ってきました(電池って結構重いんですよね…)。
現在、1台のTS-JJY02でテストしています。 |
秋月さんのスイッチングACアダプタ 15V0.8A
まだまだテストの日々が続きます…。
受信感度向上計画(アンテナ作成? 40kHzや60kHzって大変なんですが…)も考えなきゃ。
何かいい手段ありませんか?