sparkfunのSi4703搭載FMラジオチューナ評価ボードの中華ものが、Amazonで安く(500円位)出ていたのでFMラジオを製作してみた。
このボードには、アンプも載っていて、オーディオジャックもあるので、直ぐに鳴らすことができ、使い勝手が良い。
Si4703は、I2Cで制御できるので、手元にあったArduino nanoと組み合わせることにした。
Arduino nanoとの接続は、以下の通り。 Aruduino側が5Vで3.3VのSi4703側と直結できないので、電圧レベルの変換(変換基板はAmazonサイトにあり)を行っている。
Arduino Si4703
3.3V - 3.3V(VCC)
GND - GND
A4 - (5V-3.3V) - SDIO (I2C)
A5 - (5V-3.3V) - SCLK (I2C)
D2 - (5V-3.3V) - RST
D3 - (5V-3.3V) - GPIO2
試しに鳴らしてみるには、Sparkfunのサイトを参照して、DOCUMENTSタブにあるHookup Guideを参照すると良い。
まずライブラリ Si4703_Breakout.h をArduino IDEにインストールする。Hookup GuideのInstalling the Libraryの節にライブラリへのリンクがあるので、Si4703_Breakout.zipファイルをダウンロードする。Arduino IDEからこのファイルをライブラリにインクルードしてやれば良い。
Si4703_Breakout.zipファイルを解凍すると、examplesフォルダがあるので、その中のスケッチSi4703_Radio_Test.inoをArduino IDEに読み込む。次に、このスケッチをコンパイルしてAruduinoに書き込む。
あとは、Arduino IDEのシリアルモニタを起動してやれば、Hookup Guideにあるような画面が表示される。
FM局のプリセット選局コマンド”a”,"b"やSEEK UP/DOWNのコマンド”u”,"d"を入力して何かレスポンスが表示されればスケッチが動いている。
ただし、このままでは欧州での設定のままなので、日本向けにするためにはちょっと細工が必要である。Arduino IDEのライブラリのソースを変更する。既定だと…\Documents\Arduino\libraries\Si4703_BreakoutフォルダにあるSi4703_Breakout.cppの29行目辺りと150行目辺りの2行を以下の様に変更する。これで、受信周波数が76-108MHzに変更され、ワイドFM対応となる。
29行目辺り
newChannel -= 7600;
150行目辺り
si4703_registers[SYSCONFIG2] |= (1<<6);
あとは、スケッチ中のFM局のプリセット選局コマンドの周波数をローカルのFM局の周波数に変更してやれば良い。void loop()関数のコマンド”a”,"b"の処理のところで例えば以下のように変更する。
channel = 825; // 82.5MHz NHK FM
オーディオジャックに接続したケーブルがアンテナになっていて、受信感度は室内でも十分実用になる。
si4703の情報はなぜか少なかったりするので
情報大変助かります。
150目の修正ですが、
si4703_registers[SYSCONFIG2] |= (1<<SPACE0); は残すのが正しいと思います。
Channel Spacing の初期値は0なので、1にすべきなので。
なので
si4703_registers[SYSCONFIG2] |= (1<<SPACE0);
si4703_registers[SYSCONFIG2] |= (1<<6);//76–108 MHz (Japan wide band)
と2行にする、が正解ではないでしょうか。
あと、シーク時の初期値が未修正です。
247行
channel += 760;
875 を 760 にする。を追加するべきと思います。
駄文失礼しました。
さて、コードについてですが、150行目は、ご指摘の通り追加です。説明が不足してました。247行目もご指摘の通りです。当地域はワイドFMなので初期値が違っても動作してました。
それをお聞きして自分もちょっとケースに入れてみたくなってきました。
いやーこういう電気工作、本当に面白いですよね。
asmnoak様の記事はとても分かりやすく、自分のようなド素人でもチャレンジしやすいと思います。
ではでは。