AM/FM携帯ラジオの作成

Arduino

今回は、ラジオモジュール「RDA5830」を使ったAM/FM携帯ラジオの作成についてご紹介します。

RDA5807は、FM(50〜115MHz)が受信可能なモジュールですが、RDA5830は、FM(65MHz~120MHz)と、AM(500〜2000KHz)の受信が可能です。AM放送は、FM補完放送(ワイドFM)が始まった事から、一部の地域では90.0~94.9MHzのFMで受信することもできますが、NHKなどAMも受信できると便利だと思います。

以前にも、「RDA5830」を使ったラジオの作成はご紹介しましたが、タブレットケースに収めた超小型のタイプでイヤフォン専用でしたので、今回はスピーカーを内蔵した携帯型のものを作り、手元に置いてBGM代わりにラジオを聴けるものにしました。持ち運びにも邪魔にならない大きさなので、キャンプなど屋外に持ち出しても良いと思います。防災ラジオとしても、活躍すると思います。
以前作ったもの超小型のものは、こちらでご紹介しています。

使用感ですが、ロッドアンテナを付けたおかげで主なFM放送局は問題なく聴こえます。しかし、約2km離れたところから送信されているコミュニティラジオは、ギリギリ聴こえるという感じです。AM放送は、1000kHz以下の放送局は問題なく聴こえますが(NHK第一放送567kHz、NHK第二放送747kHz)、1000kHz以上の放送局は感度が不足しています。AMの受信には、一般的にバーアンテナが使われますが、本機はケース内のスペースの関係から330μHのインダクタを使ったことによると思います。
私の住んでいる場所では、1000kHz以上のAM放送はFM補完放送されているので、この状況でも問題ないです。

この記事を参考に自作される方は、アンテナについて検討しても良いかも知れません。

ラジオの機能は、ロータリーエンコーダーのスイッチ(押し込む)で変更し、AM/FMの切換え、周波数の変更、登録チャンネルの変更、音量の調整ができます。いずれも、ロータリーエンコーダーのつまみを回すことで行います。SEEK機能は今後の課題として、機能は持たせていません。


ここからは、ハード部分についてご説明します。

使用した主な部品は、以下のとおりです。
 〇表示部:LCDモジュール 16文字x2行
    AQM1602Y-NLW-FBW(秋月電子通商)
 〇ラジオモジュール:RDA5830-M (Aitendo)
 〇CPU:Arduino Pro Mini 5V 16MHz
    (秋月電子通商 AE-ATMEGA328-MINI)
 〇ケース:プラスチックケース
    (タカチ電機工業 汎用型SSシリーズ SS-125W W80xH32xD125)

完成したラジオの内部は、こんな感じです。

電源は、ACアダプタ(5V)または、電池(LR03 x 3)の両電源とし、6Pトグルスイッチ(2回路2接点 中点OFF付)で選択する様にしています。ケースに電池ボックスが付いていないため、電池ボックスはケース内に内蔵しています(交換が少し面倒です ^^;)。

電源電圧を調整する回路を実装していないので、ACアダプタには必ずDC5Vを出力するものを使ってください。また、スイッチングACアダプタを使うと、AMに結構なノイズが乗ります。FMにも乗っていますが受信できないほどではありません。

スピーカーは、直径20mmの薄型を使っています。音質は、薄型スピーカーの割には良い感じです。
基盤上には、左にArduino、中央にラジオモジュール、右にアンプ部を配置しています。
アンプ用のICには、2回路入りで低電圧でも動作するNJM2073Dを使いました。

回路図は、こんな感じです。

RDA5830に供給する電圧を調整するため、DC5Vのラインにダイオードを挿入しています。RDA5830の電源電圧の規格は1.8~5Vなのですが、5Vを少しでも超えると動作しなくなる様で、ダイオードの電圧降下を利用して少し電圧を下げています(ACアダプターの電圧を所有しているテスターで測定したところ、5.04Vでした)。

部品の配置図は、以下のとおりです。


基盤表面

基盤裏面
完成基盤

LCD(AQM1602Y)はI2Cで接続しますが、少しの回路が必要です。部品配置は、以下のとおりです。AQM1602Yは上から見たところ、図の上側が正面です。

コネクタを使うと場所を取りますが、メンテナンスなどが楽になります。


〇ケースの加工と、部品の取付け

ケースの加工は、LCD表示部、スピーカー、ロータリーエンコーダー、スイッチなどの取付け穴を開けます。

LCD取付け用ケース加工

スピーカーは、プラスチック板などに固定して、ケースに固定します。

電池ボックスと、DCジャックを取付けます。

電源スイッチと、ロータリーエンコーダーは、ケース上部に取付けます。


ロータリーエンコーダー

ケースへの取付け

トグルスイッチ

FM用のアンテナに、手持ちのロッドアンテナ(約55mm x 5段、全長約290mm)を付けてみました。


アンテナ線の固定

ロッドアンテナの固定

ここからは、プログラムをご紹介します。参考になれば、幸いです。プログラムは、ArduinoIDEで作成しています。

〇RDA5830初期化

RDA5830のデータシートに従い、初期化を行います。
3行目にある、1bit目を1にしてアドレス02Hに書込むと、Soft Resetがかかります。500ms待ってから、1bit目を0にして再度書込んで初期化を進めます。データシートとの相違は、12bit目のbass boostをenableにしたところです。
20行目から26行目のアドレスの解説はデータシートに記載が無いので、例に従い書いています。
27行目の08Hは、AMモードの帯域を4kHzに設定しています。これにより、AM放送が少し聴き易い様に感じました。

void RDA5830_init(void) {
  // Soft Reset
  RDA5830_write(0x02, 0xD003);  // 0b1100000000000011
                                // 15 DHIZ:1 Normal operation
                                // 14 DMUTE:1 Normal operation
                                // 13 MONO:0 Stereo
                                // 12 BASS:1 Bass Boost Enable
                                // 11 RESEVED:0
                                // 10 ????
                                //  9 SEEKUP:0 Seek down
                                //  8 SEEK:0 Sisable&Stop
                                //  7 SKMODE:0 wrap at the upper or lower band limit and continue seeking
                                // 6-4 CLK_MODE:000 32.768kHz
                                //  3 RDS_EN:0 Disable
                                //  2 ANTENNA:0 normal
                                //  1 SOFT_RESET: 1 reset
                                //  0 ENABLE: 1 Power Up Enable
  delay(500);
  RDA5830_write(0x02, 0xD001);  // 12 BASS:1 Bass Boost Enable
  RDA5830_write(0x14, 0x00F1);
  RDA5830_write(0x15, 0x10A0);
  RDA5830_write(0x1A, 0x0542);
  RDA5830_write(0x21, 0x7F80);
  RDA5830_write(0x23, 0x50A4);
  RDA5830_write(0x75, 0x47C0);
  RDA5830_write(0x79, 0xD893);
  RDA5830_write(0x80, 0x0006);  // AM Band Width 4kHz
}
 

〇FM放送の受信

放送局の周波数を100kHz単位(76.0MHzの場合は、760)で指定して、このルーチンを呼び出すとFM放送を受信します。
5行目、アドレス40Hの0~3bitに”0000″をセットして書込むとFMモードになります。
6行目、アドレス03Hに必要なパラメータをセットして書込みます。
・6bit~15bitには、計算したパラメータ(CHAN)をセットします。CHANは、周波数(MHz)=周波数ステップ(MHz)xCHAN+下限周波数(MHz)の式から求めます。
・5bitはreserveで、0です。
・4bitは、チューニングを行うので1とします。
・2~3bitは、バンドを設定します。国内で76~108MHzを受信する場合は、”10″に設定します。
・0~1bitは、周波数ステップを指定します。100kHzの場合は、”00″に設定します。
この設定で、80.4MHzを指定する場合は、CHAN=804-760=44になるので、0b0000101100011000を書込めばOKです。

void RDA5830_FM_Freq(unsigned int freq) {
  unsigned int  CHAN;

  CHAN = freq - 760;
  RDA5830_write(0x40, 0x0000);
  RDA5830_write(0x03, CHAN << 6 | 0b11000);
}

 
〇AM放送の受信

AM放送の受信は、2行目アドレス40Hの0~3bitに”0010″をセットして書込むとAMモードになります。
周波数は、アドレス73Hにそのまま書込めばOKです。

void RDA5830_AM_Freq(unsigned int freq) {
  RDA5830_write(0x40, 0x0002);
  RDA5830_write(0x72, freq);
}

 
〇音量の設定

音量の設定は、アドレス05Hの0~3bitに音量の数値をセットして書込めばOKです。
05Hのデータを読み出した後、下位4bitに音量のデータをセットしてから書込んでいます。

void setVol(int vol) {
  unsigned int rdata;
  unsigned int wdata;
  
  rdata = RDA5830_read(0x05);
  wdata = (rdata & 0xFFF0) | vol;
  RDA5830_write(0x05, wdata);
}

 
〇状態の保存

周波数、音量などの設置値をEEPROMに保存する様にプログラムしています。これにより、電源を切ったときと同じ状態で起動する様になります。バグがある様で、たまに変な値を取得して暴走する場合があります。
プログラムの77行目をコメントアウトし、78行目のコメントを削除する(ROM_FLGを0とする)ことで、EEPROMからの読込値を設定しなくなります。


プログラムリストを、こちらにアップしました。
よかったら、ダウンロードして試してみてください。

ご不明な点、ご質問などありましたら、こちらからお問い合わせください。

コメント

PAGE TOP