Si4703は、SiliconLab製のFM対応のDSPラジオICである。SparkFunがブレークアウト基板化した物の中華コピーが安い価格で出回っている。
I2Cインターフェースでコントロールでき、Arduinoとの組み合わせが可能である。
ただ電圧が3.3V対応なので、5VのArduinoと接続するためには信号レベルの電圧変換が必要である。
ここでは、ATmega328pを3.3Vでドライブすることで電圧変換回路を省略した(動作は保証されていない)。
基板の概要、回路図、データシートは、こちら(評価モジュール)を参考にするとよい。
150mWのアンプが搭載されているので小型のスピーカは鳴らせる。なお、アンテナはオーディオケーブルを兼用する仕組みになっている。
Si4703のライブラリはGitHub(DSPラジオモジュール)を参考にするとよい。
特長
必要最小限の構成にしている。
・タクトスイッチ1にて受信局(局名、周波数をハードコードしておく)を切り替える。
・タクトスイッチ2,3にてボリュームを調節する。
・受信局名と周波数、ボリューム値をOLEDに表示可能。
・受信局とボリューム値はスイッチOFFしてもEEPROMに記憶している。
H/W構成
・ATmega328p - コントローラ
・SD1306 128x64 OLED表示装置(オプション)
・タクトスイッチ1、タクトスイッチ2、タクトスイッチ3
・Xtal発振器(16MHz)、コンデンサ・抵抗類
操作
・プリセットしたラジオ局又は受信周波数の切り替え(タクトスイッチ)。
・音量調整(タクトスイッチ)。
接続
各コンポーネントの接続は以下の通り。
I2C接続 Si4703と表示装置(マルチドロップで接続)
※内蔵のプルアップ機能を利用しているのでプルアップ抵抗は不要
I2C | ATmega328p | ピン |
VCC | VCC(3.3V) | 7 |
GND | GND | 8 |
SCK | A5 | 28 |
SDA | A4 | 27 |
タクトスイッチ(ボタン)
ボタン | ATmega328p | ピン | 機能 |
STATION | D3 | 5 | ラジオ局を「次へ」切り替え |
VOL+ | D4 | 6 | 音量大 |
VOL- | D5 | 11 | 音量小 |
インストール
- コードを、ZIP形式でダウンロード
- ArduinoIDEにおいてライブラリを登録
- ArduinoIDEからsi4703_breakout_oled_master.inoを開く
- 「検証・コンパイル」に成功したら、一旦、「名前を付けて保存」を行う
(ライブラリが不足のエラーが出たら、追加する。例えば、SD1306 OLED表示装置
(IDEのライブラリマネージャにおいてU8glibを検索))
- 関数updatestation()において、受信したいローカルのFM局の局名と周波数を設定する
- 関数station_setting()において、受信したいローカルのFM局のmax局数を変更する
- なお、動作の状況がシリアルモニタに表示される(9600ボー)
若干の解説
・Si4703のライブラリ(Si4703_Breakout.cpp)は受信範囲を拡大(76-108Mhz)するため
オリジナルのコードを変更している(行30、行152)。
・受信局の変更は、割り込み機能を利用している。例 void station_setting()
・Atmega328pをArduinoとして使うことに関してはこちらを参考にするとよい。
基板上の配置の様子。右がAtmega328p、左がSi4703基板。電源はUSB、AMS1117-3.3により3.3Vに変換している。
注意事項
・通常、電圧を3.3Vにすると8MHz動作が仕様であるが、幸運なことに、このチップは16MHzでも動作している。
ただ、火花雑音(近傍でのスイッチON/OFF)を拾い誤動作することがある。
・受信するFM局が多い場合は、タクトスイッチを1個増やして(2つ目の割り込みとする)、UP&DOWNにすることをお勧めする。
・利用の際は、自己責任でお楽しみください。