見出し画像

電波時計の製作


1. はじめに

バーアンテナを使った電子工作というと、電波時計が思い浮かびます。遠い昔、真空管の5球スーパーを組み立てたときは10MHzの短波JJYでしたが、2001年3月31日正午以降は長波だけです。

当初は直径3.5cm、長さ20cmの巨大なフェライトバーでAM用のバーアンテナを作成し、ついでにJJY(40kHz)が受信できるように20メートルの29mmポリウレタン線を端に付けてみました。 弱々しいですがJJYが受信できるようになって、毎時15分と45分のJJYのコールサインが聞こえたのに感激しました。

電波時計が安価に手に入る今ですが、ネットを検索すると自作する人が結構います。40kHzや60kHzという長波が全国に届く事にロマンを感じます。

SDR SharpでJJY(40kHz)を受信

2. Rapsberry Pi2版

マルツパーツで電波時計用LSI SM9501Aを入手し、この頃はRapsberry Pi2を持っていたので WiringPi (だったか?)を使ってデコーダを作りました。

JJYの時刻情報は以下のパターンで送信されています。
パルス幅は以下の通りです。
・マーカー(M)およびポジションマーカー(P0~P5) : 0.2s ±5ms
・2進0 : 0.8s ±5mss
・2進1 : 0.5s ±5ms

通常の送信パターン
毎時15分と45分の送信パターン

SM9501Aの回路構成はデータシートに載っているので、秋月電子でクリスタルを購入してその通りに作成しました。Raspiから+3.3Vを供給してGPIOで直接受ければ良い…と思っていましたが、全然受信する気配がありません。LSIを壊したかと思い、試しにRaspiと切り離して電池で動かすと出力電圧がピクピクしはじめました。結局、GNDをRaspiに繋ぐだけで動作しなくなる(!?)ことが判明(※50cm以内に近づけても動作が不安定になる…)。しかたがないのでフォトカプラで切り離してなんとかRaspiで受信できるようになりました。GPIO割込みはwiringPiのライブラリにあるので楽チンですが、15分と45分に送信してくるJJYのコールサインが邪魔で、これをマスクするのにはハマりました。

SM9501Aのテスト

バーアンテナは15mm径のフェライトでJJY用に巻きました。60kHzにもスイッチ切換で同調するようにしましたが、遥か遠い九州の長波は無理でした。

JJY用バーアンテナ
Raspberry Pi2でデコード

3. PSoC-5LP版JJYデコーダ

3.1 ブレッドボードの試作

当初はRaspiしかなかったので無理やり感のあるJJY受信機でしたが、PSoC-5LPのfreeRTOSにも慣れてきたのでPSoC 5LPで作り直しました。マルチタスクなので機能毎にタスクを(1)トーン出力、(2)パルス幅判定、(3)デコードに分けてQueueで繋いで、コードはずいぶんすっきりしました。

JJY(40kHz)デコード部

外付け回路は、ディスクリートで作った800kHzの発振器がPSoCのライブラリにあるWaveDAC8というパターン生成器[2]で呆気なく出来てしました。外部回路はスピーカを鳴らすLM386だけです。15分と45分のJJYのコールサイン送信期間中はモールコードのパルスをカウントするようにしたので単純になりました。

PSoC Creator
JJYのコールサイン

後でわかったのですがPSoC-5LPの開発キットは電源からノイズが出るので、Vccラインにトロイダルコアでチョークコイルを作って入れるのが正解みたいです。この時はまだ知らずに受信部は単三電池2本を接続して分離しました。

3.2 組み立て

あまり複雑な回路ではないので、あまり考えずにタカチのプラケースに入れました。

受信部とデーコーダはモジュラーケーブルで接続

アンテナもピックアップコイルで取り出すのではなく、1次コイルを直接LSIに接続するのが正解でしたので作り直しました。

受信部
JJYデコーダ部

時刻や日付が送られてくるのがダイレクトに見れるので、受信器としては見ていて楽しかったです。毎分の単点(E)や毎時毎の(N)、毎15分45分のJJYのコールサインなど、耳で時間の経過がわかるのが良いです。

JJYは雷雨の接近やメンテナンスで時々停波するのでデタラメな表示になりました。時計も付ければいいのでしょうが、JJYの受信が目的なのでここまでにしました。

4. RP Pico版の試作

CypressのPSoCはデジタル回路までプログラムできるので便利でしたが、現在は入手困難です。ビーコンパークの試作で作ったRP Picoの基板があるので、JJY受信部とのインタフェースを追加してプログラムしてみました。PSoCのハードで実現していた機能をファームで置き換える作業がメインです。

JJY受信部に使っているSM9501Aは既にマルツでも扱っていなくて、aitendoの電波時計モジュールを購入すれば良いのですが、取り敢えず前のものが動いたので使います。回路を改めてKiCadで書き直したら変なところがあったので修正しています。

JJY受信部

JJYのモールス符号などをビープ音で鳴らすのに良い方法が思い付かないので、やはりFreeRTOSを使うことにします。単体の割込みは簡単ですが、FreeRTOSの割込みがうまく動かないので、milsecs()を使った時間間隔でパルス幅を判断するようにしました。RP Picoはまだ使えていない機能が多く、奥が深いです。

JJYデコーダ部

やはりJJYのモールス符号の回避が鬼門でした。短点をカウントすると間に合わない場面があって、長点のみカウントするとうまく行きました。

5. Seeed XIAO RP2040版の製作

バラックのままでは邪魔なのでArduinoのケースに入るようにプリント板を起こしました。しかし、RP Picoでは大きすぎるので代替の効くSeeed XIAO RP2040を使いました。

Arduino Unoのプラケースに収納

OLEDとSeeed XIAO RP2040を重ねたのでSMD実装にしましたのが失敗でした。USBコネクタにケーブルが挿せません。ケーブルのケースを削ってなんとか入りましたが、もう少し頑張って配置すればよかったです(hi)。

RJ12のコネクタを載せたので、モジュラーケーブルですっきり繋がります。+3.3V給電も試みたのですが、やはり電池を使わないとパルス幅が安定しないようです。回路図は以下の通りです。

JJY受信部
JJYデコーダ部

Arduinoのソースは以下の通りです。FreeRTOSやWire等のライブラリを別途インストールする必要があります。


いいなと思ったら応援しよう!