はじめに
先日のブログ記事にて動作検証までを紹介しましたKT0937チップを小型の基板に実装してワイドFM受信モジュールを製作してみました。
モジュールサイズは、基板部分が、36.2mm(l) x 20.8mm(w) x 0.8mm(t)で、実装されているオーディオジャックとピンヘッダーの厚みを加えると約10mm(t)となるサイズに仕上げています。
音質は使用環境における受信電波強度に左右されますが、比較的良好な受信環境であれば、イアホンアンテナでも、かなりクリアに聞こえます。
ネット環境を必要とせずにリアルタイムでワイドFM放送を受信できるラジオは何かと実用性は高いので、個人的には良いものが出来たと思っています。
設計思想
端子配列
モジュールを制御するマイコンとのインターフェース用の端子配列は、M5StickC-PLUSのコネクタに直刺しで動作させることを考慮した設計にしています。
また、FM受信アンテナは、Φ3.5mmステレオミニジャックに接続するイアホンやオーディオケーブルのGNDラインを利用する仕様となっています。
選局(周波数変更)
受信チャンネルの選局方法については、モジュールの4番端子をLowまたはHighにすることで周波数を上下に可変して行います。
音量調節
音量の調節については、可変抵抗器などの物理的なボリュームは実装していませんが、I2C制御でICの音量に関するレジスタ設定値を変更することで可変できます。
モジュールのコントロールプログラムの作成はデータシートが無いと不便だと思いますが、データシートその物を当ブログに掲載することはできませんので、お手数ですが例えば、”KT0937-D8 datasheet” のキーワードでWEB検索してみて下さい。
あるいは、2024年3月現在において、KT0937-D8は電子部品ショップの秋月電子さんでも販売されていますので、そちらのWEBサイトがとても参考になるかもしれません。
モジュールに実装されている水晶振動子は、デフォルトのレジスタ設定で動作するように32.768KHzを使用しています。
外観
部品面と半田面の外観写真を掲載します。
製品概要
日本のFMラジオで周波数を含む76~110MHzの範囲を受信することができます。
モジュールの端子配置はつぎの通りです。上記の外観写真に記載している端子配列も参照下さい。
Pin No. | Pin Name | I/O | Function |
1 | GND | Ground | Ground |
2 | NC | – | Non Connection |
3 | SCL | Digital I/O | SCL of 2-wire interface |
4 | INT | Analog Input | INput tuning Trigger (※connected to pin 8 of KT0937) |
5 | SDA | Digital I/O | SDA of 2-wire interface |
6 | NC | – | Non Connection |
7 | +3.3V | Power | Power supply (※2.1~3.6V) |
8 | NC | – | Non Connection |
使用例を2つ紹介
Arduino Uno R3 でコントロール
Arduino Unoでの使用例として、周波数変更の手段としてタクトスイッチを使用しました。
電源電圧に接続されたタクトスイッチを押して4番端子をHighにする事で100KHz周波数がダウンし同様にGNDに接続されたタクトスイッチを押して4番端子をLowにする事で100KHz周波数がアップします。
可変周波数範囲はICのレジスタ設定で決定します。サンプルプログラムでは、下限周波数を76MHz、上限周波数を110MHzで設定しました。(ICの機能としては32MHz~110MHzの受信が可能)
//FM freq setting
// low edge frequency of FM band with 50KHz per LSB:set to
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x98);
Wire.write(0x05); // 05F0(HEX) = 1520(DEC) x 50KHz = 76MHz
Wire.endTransmission();
delay(100);
//
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x99);
Wire.write(0xF0); // 05F0(HEX) = 1520(DEC) x 50KHz = 76MHz
Wire.endTransmission();
delay(100);
// Channel number of band:set to
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x9A);
Wire.write(0x01); // 154h=680/2 680(DEC) = 2200(DEC) - 1520(DEC) : 110MHz - 76MHz
Wire.endTransmission();
delay(100);
//
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x9B);
Wire.write(0x54);
Wire.endTransmission();
delay(100);
//FM freq setting end
音量に関するレジスタ設定は固定値にしていますが、レジスタ値を変更できるようなプログラミングを行えば、ミュート機能を含めて音量調節が可能です。
//smute gain: set to -36dB
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0xE3); // Volume control
Wire.write(0x02); // 0x00 Mute 0x01-0x80 20log(SMUTE_GAIN/128)
Wire.endTransmission();
delay(100);
M5stickC Plus でコントロール
M5stickC Plusでの使用例として、周波数変更の手段としてM5stickのボタンAとボタンBを使用しました。こちらのサンプルプログラムでは、あらかじめ受信可能なラジオ曲の周波数をプリセットとしてプログラムに配列で定義する方式とし、ボタンAを押すとプリセットされた次の局へ進み、ボタンBで前の局へ戻るようなプログラムを実装しました。
const unsigned int FM[]=
{
0xE4,0x06, // HF, 78.9MHz
0xE5,0x2A, // LF, 78.9MHz
0xE4,0x06, // HF, 80.0MHz
0xE5,0x40, // LF, 80.0MHz
0xE4,0x06, // HF, 80.7MHz
0xE5,0x4e, // LF, 80.7MHz
0xE4,0x06, // HF, 81.3MHz
0xE5,0x5A, // LF, 81.3MHz
0xE4,0x06, // HF, 82.5MHz
0xE5,0x72, // LF, 82.5MHz
};
音量調節はArduinoのプログラムと同じく固定にしています。
おわりに
このモジュールは、3Dプリントの筐体に収めて取り扱いやすくしたうえで”創作物のオンラインマーケット、BOOTH”にて頒布させて頂いていますので、ご興味がありましたら下記のリンクからご来店をお待ちしています。
基本的には自力でプログラムが作成できる方へ向けての創作物となりますが、サンプルプログラムも準備しましたので、ぜひよろしくお願いします。
コメント