ううーーむ
んで、まあ。
アンテナのほうですが、前回のでかいアンテナはともかく、ちいさめのアンテナとしては
こいつが(自分の作ったアンテナの中では)なかなかいい性能です。直径1cm×長さ18cmの長めのフェライトバーにジュンフロン ラッピング用ETFE電線 0.32mm CSMW用という電線を何回か巻いた奴です。計測すると2474μHあるようです。
市販の電波時計のアンテナはどうなってるのかなーとおもって、安売りしていたDIMPLEというメーカ?の中華製電波時計を開腹してみました。
巻きがきたねえ。
線間の静電容量が大きくなると性能が悪くなるのでわざと汚くまいたのでしょうか??インダクタンスは3932μHあります。
真似してみました。
巻きがきたねえ。
調子に乗ってぐるぐる巻いたので、計測すると10000μH近くあります。が!あまりにもインダクタンスが大きくなってしまい、同調用コンデンサの容量を小さくせざるをえず、配線の浮遊容量によってころころと同調周波数が変わってしまうようで使い物になりませんでした!タップ出しとくんだった…シクシク
で、受信されるタイムコードをみてみると、まぁなんというかものすごいノイズです。一秒間に一回のパルスなんか綺麗に出てくるはずがなく。
僕のアルゴリズムでは、一秒間に256回のサンプリングを行い、さらにそれを32回ずつ、8個の組にわけ、それぞれの組の中では1の数を多数決するという方法で最終的に一秒間を8ビットのタイムコードにするという方法をとっています。タイムコードは一秒のうち0.2秒, 0.5秒, 0.8秒の間に1が来て、あとは0がくる、というものですから、正常に受信できれば
11000000 11110000 11111100
のようなコードが出てくるはずです。
しかし実際に受信してみるとごらんのありさまだよ。
11111010 01110100 10111000 10001111 11000111 11110001 11011100 11010001 10010100
最初はここまで汚いのが来るとは思って無かったので、かなり普通に、1の連続した長さでコードを判別するアルゴリズムを書いていましたが、こんな状態ではそもそも秒の始まりすら分かりません。
しょうがないので、受信したコードを統計的に処理する方法で書き直しました。いくらノイズが入っていると言っても、それを数秒、あるいは数分重ね合わせることでノイズを相殺できるはずです。たとえば、秒の初めなんかは、いまの統計的アルゴリズムでは、一秒間を16の区間に分割し、"0"から"1"へ変化(パルスの立ち上がり)した時点のそのタイミングを集計して
03-29 23:56:33: status: rsSecSync
03-29 23:56:33: stats: 1(1)
03-29 23:56:34: stats: 7(1) 1(1)
03-29 23:56:34: stats: 12(1) 7(1) 1(1)
03-29 23:56:34: stats: 1(2) 12(1) 7(1)
03-29 23:56:35: stats: 14(1) 1(2) 12(1) 7(1)
03-29 23:56:35: stats: 2(1) 14(1) 1(2) 12(1) 7(1)
03-29 23:56:36: stats: 7(2) 2(1) 14(1) 1(2) 12(1)
(略)
03-29 23:56:47: stats: 4(1) 0(2) 13(2) 7(6) 2(1) 14(3) 8(3) 12(1)
03-29 23:56:48: stats: 7(7) 4(1) 0(2) 13(2) 2(1) 14(3) 8(3) 12(1)
のように集計をとります。7(2) というのは、7というタイミング(7/16秒位置) でのパルスの立ち上がりの集計が2回になったという意味です。最終的に7というタイミングでのパルスの立ち上がりは7回になり、他は多くても3回なので、どうやら7というタイミングがパルスの立ち上がり(=秒の始まり)でよさそうだということで、このアルゴリズムは次のステータスに移ります。
次は10秒間に1回あるポジションマーカーを検出するために、どの秒がポジションマーカー「っぽい」かを集計してして決定して……とかなりのんびりなアルゴリズムになっています。おかげで最短で50分ぐらい、時刻を決定できるまでに時間がかかります。
しかし、かなりのノイズが入ってもそのノイズの中から「もっともらしい」信号を取り出せるようになっているので、かなり受信状況の悪い状態でも受信することができるようです。実際にそこらの電線をアンテナ代わりにつないでみましたが、一日ぐらい放置してたらいつの間にか時刻の決定に成功していました。
逆に受信状態がよい場合でも、突発的に入ったノイズをほぼ確実に除外できるため、かなり信頼性の高いアルゴリズムになったと思います。
あとはこれをPICに載せて電波時計をつくってみるのみ。とおもってPIC12F629 (8pinのやつ) にいれてRTCモジュールとして使いまわそうかとおもったら orz 64バイトぢゃたりねーよ!前のアルゴリズムだとギリギリ足りたのですが、統計用にメモリをかなり(16バイトも!!)使ってしまうので64バイトでは足りないようです。
まぁ上位ランクの奴をつかいましょう。
電波時計はどんなのにしようかなー。
ソースはいずれ公開しようと思います。
とりあえず完成かなーと。
上に乗っかるソフトウェアはもちろん修正される可能性はありますけども。
レイアウトはこんな感じになりました。
実際の配線はこれ。
なんかレイアウト図と微妙に違いますが、実際に使用した部品のサイズなどに合わせて細かい部分を勝手に変えているからです。結線は同じです。
一番でかいのがPIC16F887です。被覆線が絡みついてますが、これをぐっとひっぱってソケットから引き抜くために使ってます。いろいろなペンチのようなものを試しましたが、この原始的な方法が一番。抜き差しでICの足が相当痛むようなので、ICSP (In-Circuit Serial Programming) に対応させたいなぁ……。
緑色の細い線はポリウレタン線ですが、いまいち信頼性に劣りますね。細いし切れやすいし簡単に傷つくし……。まぁ配線テクニックがないって話もありますが。
左端の緑色の基板はUSB-シリアル変換モジュールです。通常時は外します。
時報を鐘の音で鳴らすための回路と、桁ドライブ用の4017まわり。音まわりは完成間際になって苦労したところです。なにせ最大でLED 58個が同時に点滅するため、電源ラインには0.1Vぐらいの高低差をもった強力なノイズが乗ってきます。これが可聴周波数内なので、スピーカーにぶーーーという音が入ってきてしまいます。最終的には音まわりの電源のみを分岐し、電源ラインにLPFを二段いれてなんとか収まりました。センサ系への電源の供給も、こちらの安定した電源を使っています。
その他にも各所にパスコンが入っていますが、基板がでかくて配線がかなり引き回されるのと、LED駆動電流が大きいのとで、至る所にノイズが入り込むようなので、ノイズ対策は一番苦労したところかもしれません。センサー系もかなり重点的にノイズ対策をしています。
メインプロセッサと音発生用の8ピンPICは一線でシリアル通信させています。一応メインプロセッサからは発音だけでなく、音色や音量もいじれるようになっています。
テスト表示。まだ光拡散用のキャップをLEDにかぶせていないのでLEDの光り方がまばらに見えます。真ん中に置いてある白いのは温度センサーです。
あとはケースを作ってケースに収めてFon側のソフトを書くのみ。頑張ろう。
自分で作った電波時計のテストをしようと思ったけれども、いまいち電波をうまく拾えてないようなので、JJYのふりをするシミュレータが欲しくなりました。
秋月のJJYシミュレーター・キットが高いので作ることにしました。
見事に近くに置いた電波時計が狂ってます。
PIC16F628A-I/P 160円と抵抗7本ぐらいと0.1μFのコンデンサ数個とかとか。USBインターフェース入れても2000円でおつりがくるぐらい。
PWMをduty 50%固定にして40kHz周期で出力させて、2次のCR LPFフィルタで波形をなまらせた後、ぐるぐる巻きにした導線をアンテナ代わりにして電波を送出しています。電波の強弱の付け方は LPFの出力を抵抗を介してグラウンドに落とす(これで「弱」の状態)方法にしました。PICのI/Oポートは、入力モードにするとハイ・インピーダンスの状態になりますから、それを利用しています。つまり、ポートに常にLを出力しておき、電波「強」の場合は入力モードにし、電波「弱」の場合は出力モードにしてLを出力させています。
ソース欲しい人はあげます。
NTP時計は一通り実現のめどがついたので、ということで興味が電波時計に移りまして、JJY(標準電波)受信をここ数週間は試していました。
うち(さいたま市)近辺だと福島からくる40kHzの標準電波がとらえやすいようです。
ラジオの知識がほとんど無い状態からとりあえずアンテナをコイルで作ってストレート式のラジオを作ってみたり、それでもなんかダメだからRF増幅回路をいれてみたり、それでもだめだからスーパーヘテロダインの真似事をしてみたり、、、
んで結局電波時計受信用ICかってきましたorz
ブレッドボードがでかいのでいろいろ他に回路が乗っかってますが、受信回路は下側の緑色の基盤周辺と、その左にある受信信号にしたがって光るLEDだけです。他はフランクリン型発振回路だのDBM(Double Balanced Mixer)の真似事をしたやつだの、、、ってかこういうのをブレッドボードで組むのもまずいのかもしれませんね。にんにん。
右下のコイルは、100円ショップで売ってた穴がたくさん空いたカップに0.26mmポリウレタン線を260回巻きつけたやつです。直径8.4cmぐらい。計算上は4437μHあることになります。計算上は3568pFのコンデンサで40kHzに同調するはずなので…ということで。
実際にフランクリン型発振回路で発振させてみて調節した結果、コンデンサが5つ、容量を調節するために3つが直列、そのうちの一つに、二個を直列にした物が並列にくっついてる(ややこしい)もの(すべて0.01μF)で40kHzピッタリになりました。コンデンサは約3750pFということになります。理論値にまぁまぁ近いですね。
電波時計用のICはマルツで売ってるこれです。
RF増幅、クリスタルフィルタによるBPF、検波、それとピーク・ボトムホールドを行ってくれて、出力は二値化されたデジタル信号になります。標準電波は40kHzにのせて、電波の強弱でパルスを表し、パルスの長さで"1"か"0"かを表しているため、強弱の検出が必要になります。もちろん受信状態によって強弱は大きく変化しますから、受信状態に合わせて適切にしきい値を決めてやる必要があります。そのための回路が組み込まれているわけです。
あーIC便利だ。勉強だとおもって自分でそういう回路を組んでみたいってのはありますがアナログ苦手!
電波時計用のICつかってもパソコン周辺はノイズが多いのかまともに受信できません。部屋の中でもパソコンから離れた場所においてやっと受信できる程度。それでもノイズが多くてパルス幅が判断できるような受信状況ではなさそうです。
とりあえずアンテナがでかいのとQ(共振の強さ)が悪そうだということで、より小さい筒に巻き直しました。
何に巻こうかなとおもったのですが、安くて適当な大きさのプラスチックの筒、、、というとなかなかありません。おもちゃのステッキに巻こうかなとかも思いましたが、ふとラムネの筒に良さそうなのがあったなと思いだし、お菓子屋にいったらありました!カバヤのジューCです。そのお菓子屋で50円。しかもお菓子つき。んで、中空のコイルは効率が悪いのでなかにフェライトバーを入れたい、、、とおもったのですが案外高い。高い上になかなか取り扱っていない。安いラジオでもかってきてバラすか、、、?と思ったのですが、ビンボー臭くやるのが主義なのでここはあれこれと考えています。うふふ。
でかい時計はいろいろと部品を配置中です。もうそろそろおわるかな。基板は。うん、基板は。でもおうちにかえるまでが遠足です。ケースに収めて使うまでが工作です。