福野泰介の一日一創 - create every day

電波時計の電波を見る。モールス信号デコーダーで学ぶデコーダープログラム

2018/04/19
#IchigoJam #KidsIT #maker 

自動的に時刻を合わせてくれる電波時計。 その仕掛けは、佐賀県(60kHz)と福島県(40kHz)に2箇所ある、起業家甲子園でおなじみNICT(情報通信研究機構)の施設から発信される電波にあります。 IchigoJamと電波時計モジュール(関西など用60kHz40/60kHz設定可能版 - aitendo)を使って電波時計づくりにチャレンジ!


高い音と低い音が同時になっても和音として認識できるように、電波も、周波数によってスマホの通信、無線LAN、テレビやラジオ放送など、同時に重ね合わせて使っています。 その中でも30kHz-300kHzの長波と呼ばれる帯域中で動いているのが標準電波(電波時計)、振動しているか否かという原始的な送信方法が使われています。

NICTのweb「標準電波の出し方」に、その信号フォーマットが紹介されています。

1bps = 1bit per second = 毎秒1bit
1データ 60bit、60秒/1分
データ種:マーカー(HIGH:200msec LOW:800msec)、1(HIGH:500msec LOW:500msec)、0(HIGH:800msec LOW:200msec)、モールス信号
エンコード方式:2進化10進数(BCD)による、時、分、通算日、年(西暦下2桁)、曜日、うるう秒情報、停波予告情報


通常時(毎時15分、45分以外)のタイムコードより)
うるう秒に対応する方法などがおもしろい!

電波時計モジュール(60kHz)は3.3VでもOKなので、ピンソケットをはんだづけ。IchigoJamのOUT1,-1として入力に切り替え、IchigoJamのVCC,GND,OUT1,OUT2に挿し込む。

10 OUT1,-1 20 ?IN(5);:CONT RUN

信号が見えました!
デコードプログラムをちょっと書いてみましたが、時々ノイズが入って化けてしまいます。

標準電波の変わっている点、毎時15分と45分の時はフォーマットは通常と違って、年と曜日の替わりに、モールス信号と停波予告が含まれています。

ノイズ混じりのデコードに挑戦する前に、モールス信号のデコーダーで腕試ししておきます。

モールスデコーダー for IchigoJam
モールス信号は、電波時計と同様、電波の特性周波数が振動しているか否かで伝える電波を使った最古で最もシンプルなコミュニケーション方式です。 短いON/OFFと、その3倍の長さを基本に、文字や文章を表します。

まずはボタンを押したかどうかを表示してみます(BTN(32)をBTN()にするとIchigoJam本体のボタンになります)

10 ?BTN(32);:CONT RUN 00000000000111000001100

ボタンが押された長さを測ってみます

10 IF BTN(32)=0 CONT 20 CLT 30 IF BTN(32)=1 CONT 40 ?TICK() 50 GOTO 10 RUN 15 4 4 6

短いはTICK()で10、1/6秒を区切りとして、長ければ3、短ければ1を表示してみます

35 IF TICK()>10 N=3 ELSE N=1 40 ?N; RUN 313311

押されていない間の時間も測って、長く押されていなかったら文字の区切りとします

45 CLT 46 IF TICK()<30 AND BTN(32)=0 CONT 47 IF TICK()>=30 ? RUN 13 333 111

1と3で表すモールス信号、A〜Zを配列にセットして、デコードするプログラムを追加します

2 LET[0],13,3111,3131,311,1,1131,331,1111,11,1333,313,1311,33,31,333,1331,3313,131,111,3,113,1113,133,3113,3133,3311 RUN 100 FOR I=0 TO 25:IF [I]=M ?CHR$(65+I) 110 NEXT:RTN M=13:GSB100 A OK

3と1を一桁ずつ足していくプログラムを作成

5 M=0 37 M=M*10+N 47 IF TICK()>=30 ?" ";M:M=0 RUN 0 13 13 333 333

デコーダーと組み合わせて、できあがり!

47 IF TICK()>=30 ?" ";:GSB100:M=0 RUN 31 A 3111 B 3131 C 333 O 111 S

こちら、できあがった簡易モールスデコーダープログラム全文

2 LET[0],13,3111,3131,311,1,1131,331,1111,11,1333,313,1311,33,31,333,1331,3313,131,111,3,113,1113,133,3113,3133,3311 5 M=0 10 IF BTN(32)=0 CONT 20 CLT 30 IF BTN(32)=1 CONT 35 IF TICK()>10 N=3 ELSE N=1 37 M=M*10+N 40 ?N; 45 CLT 46 IF TICK()<30 AND BTN(32)=0 CONT 47 IF TICK()>=30 ?" ";:GSB100:M=0 50 GOTO 10 100 FOR I=0 TO 25:IF[I]=M ?CHR$(65+I) 110 NEXT:RTN

手による遅い信号デーコードに慣れたら、同じくゆっくりな電波時計の信号デコードにも挑戦!

links
- 標準電波の出し方 - NICT国立研究開発法人 情報通信研究機構 日本標準時グループ
- 電波時計モジュール(60KHz) - aitendo
- 電波時計モジュール(40/60KHz) - aitendo
- 電波 - Wikipedia
- 音声読み上げで自学する和文モールス信号 on IchigoJam
- IchigoJam モールス信号エンコーダー アルファベット編
- こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
- IchigoJam検定

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像