齢寿天任せ

写真付きで日記や趣味を書くならgooブログ

Si4703搭載FMラジオチューナ評価ボードによるFMラジオ その2

2021-01-30 11:45:33 | 電子工作

Si4703搭載FMラジオチューナ評価ボードを使ったFMラジオを製作したが、選局・音量の調節はパソコンが繋がっていないとできないという難点があった。
どうせパソコンを点けているならRadikoで聞けばと云われそうなので、パソコンなしで、選局・音量の調節ができるようにする。
最小スペックは、タクトスイッチを選局に1個、音量の大小に2個付ければ良いのだが、選局時には何回もタクトスイッチを押さなければならない上に、どの局を受信しているか分からなくなる。
そのため、放送局ごとに専用のタクトスイッチを割り当てることにした。この地方では、FM局がコミュニティ局も含めると10局以上あるので、音量調節も含めるとタクトスイッチが12個は欲しい。
問題点は、Arduinoでは、それだけのタクトスイッチを直接制御できない(おまけに配線の数がとんでもない)ことである。
そこで、Aitendo(パーツ屋さん)をサーチして、いいものを見つけた。16個のタクトスイッチを搭載したキーパッドである。このキーパッドには、PCF8574が載っているので、AruduinoからはI2Cで制御できる。配線は、4本で済む。
このキーパッドの制御には、ライブラリが2つ必要である。
Keypad_I2C.h (Github)
Keypad.h
プログラムでは、Keypad.hのexamplesフォルダにあるHelloKeypad.inoが3x4のキーパッド対応なので、4x4用に改修して利用している。


// keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
  {'f','b','7','3'},
  {'e','a','6','2'},
  {'d','9','5','1'},
  {'c','8','4','0'}
};
// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0, 1, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6, 7}; //connect to the column pinouts of the keypad

実際のキーパッドのタクトスイッチとの対応は、左上から右下へ、’0’、’1’、’2’、…、’e’、’f’の順に対応している。 ’0’から’b’までは、各FM局の選局に対応させ、’e’、’f’は音量調節に使用する。プログラムはGithubを参照(利用は自己責任でお願いします)。
なお、最後の選局結果と音量を記憶しておくため、ArduinoのEEPROM機能を利用している。

(注)このキーパッドは部品のキットなので、60か所位ハンダ付けが必要です。また、ICのソケットとピンヘッダは付属してませんでした。

100均のホビーケースに入れてみました。黒色のタクトスイッチで選局します。黄色と赤色のボタンは音量調整用です。電源には、壊れたマウスのUSBケーブルを使ってます。中身の写真も載せておきます。Si4703基板、Arduino NANO、レベル変換基板が並んでます。



Si4703搭載FMラジオチューナ評価ボードによるFMラジオ

2021-01-30 11:16:16 | 電子工作

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

オーディオジャックに接続したケーブルがアンテナになっていて、受信感度は室内でも十分実用になる。