長い休眠期間を経て、近年復活した「福井高専アマチュア無線研究会 - JA9YDB」との縁もあって、無線の勉強。
周波数別にいろいろ使われる電波、アマチュア無線ならではの短波(HF)を使うと電離層に電波を反射させ、インターネットも電話線も衛星も使わず、なんと世界とも通信できてしまうらしい。
世界中の子供たちが、IchigoJamのプログラムを送受信することを夢見て、まずは手軽に扱える電波、FMを使って実験開始。(FMは、超短波(VHF)を使った周波数変調の放送)
こちら、aitendoで500円「世界一?簡単デジタルラジオキット」を使った、福井で聞ける3局のみ受信できるFMラジオ。
DSPラジオ、RDA5807HSを使ったモジュールをIchigoJamのI2Cコマンドでコントロール!
たったこれだけの部品で、FMラジオができてしまう。
小さいタクトスイッチはおまけ。ラジオを鳴らすだけなら不要。アンテナ代わりにイヤホンを接続。
DSPラジオモジュールは、テープやペンチで押さえてはんだづけ。フラックスを塗ると楽です。
ラジオとIchigoJamの接続、ミニユニバーサル基板で、IchigoJamのCN5のI2Cの並びに変換。もちろんジャンパーワイヤーで接続でもOK!VCC-3.3V/GND/SCL/SDAの4本。
I2Cコマンドで、5byte送ってコントロール。周波数freq(MHz)は下記で求めた16bitの数を、先頭2byteにビッグエンディアンで設定。
4 * (freq * 1000000 + 225000) / 32768
この計算はIchigoJam BASICで普通にやるとオーバーフローしてしまうので、32bitまで扱えるArmマシン語の力をちょっと借ります。
freqを79.1MHzを7910と10kHz単位で表すことにして、上記の式を変形
((7910 * 10 + 225) * 1000) >> 13
これをasm15マシン語で分解するとこのようになります(R0*=R1 は R0=R0*R1 の意味)
R1=10 R0*=R1 R1=225 R0+=R1 R1=10 R0*=R1 R0*=R1 R0*=R1 R0=R0>>13 RET
アセンブルしたものを使うと、下記のように設定する数値が求まります(検算してみましょう)
POKE#700,10,33,72,67,225,33,8,68,10,33,72,67,72,67,72,67,64,11,112,71 OK ?USR(#700,7910) 9683 OK
あとは下記コマンドで鳴るはずです(受信可能な周波数を調べて設定ください)
F=USR(#700,7910):POKE#800,F>>8,F,#18,#16,0:?I2CW(96,#800,5)
鯖江で受信可能な3局、たんなんFM(79.1MHz)、FM福井(76.1MHz)、NHK福井放送局(83.4MHz)をボタンで切り替えるプログラムはこちら
10 LET[0],7910,7610,8349 20 ?[N] 30 POKE#700,10,33,72,67,225,33,8,68,100,33,10,34,81,67,72,67,64,11,112,71 40 F=USR(#700,[N]):POKE#700,F>>8,F,#18,#16,0:?I2CW(96,#700,5) 50 WAIT30 60 IF BTN()=0 CONT 70 N=N+1:IF [N]=0 N=0 80 GOTO 20
受信中はLEDが光るようにちょっと改造
45 LED1 65 LED0
128x64のOLEDディスプレイを使って、受信中の周波数を表示用の追加コード
5 GSB@INIT:GSB@CLS 25 F=[N]:CLS:?F/100;".";F/10%10 26 FORI=0TO3:X=2+I:Y=8:GSB@LC:C=PEEK(#900+I):GSB@PUTC:NEXT 100 @INIT:POKE#700,0,141,20,32,0,175:?I2CW(60,#700,6):RTN 110 @LC:POKE#700,0,33,Y*8,127,34,7-X,7:?I2CW(60,#700,7):RTN 120 @PUTC:COPY#700,C*8,8:?I2CW(60,#40,#700,8):RTN 130 @CLS:X=7:Y=0:GSB@LC:C=0:FORI=0TO127:GSB@PUTC:NEXT:RTN
人が聞くのではなく、機械が聞くラジオにするべく、次はFMトランスミッタと信号のデコードに挑戦してみたいところです。
身の回りにたくさんある見えない線、無線。スマホ、WiFi、飲食店での呼び出しボタン、ラジオ・テレビなど身近な電波の正体に迫ってみましょう。