スピーカーボックスの中に Raspberry Pi とオーディオアンプを組み込んで
「radiko」「らじる☆らじる」の受信機にしてみた。

2021-04 JQ1QNV


ラジオの電波が届きにくい場所で使うべく、
radiko が使えるポータブルラジオ型受信機を探してみたのだが、意外とこれが無い。
ネットラジオの受信機はいくつか見つかったが、radiko に対応しているものが無い。
radikoをスマホやPCなしで簡単に聞くにはスマートスピーカーが一番手軽だと教えてもらったが、
まぁ、簡単なスイッチで操作できる radiko 受信機があってもいいじゃないかと思い作ってみた。
この受信機、「らじる☆らじる」も対応させたのでNHKラジオ 第2放も聞けます!
あの大人気長寿番組「文化講演会」「気象通報」が聞きけるのです!
(でも21年4月から「文化講演会」は不定期になっちゃった・・・)
5つのプッシュスイッチの操作で、現状15局選択できるようにしています。


図 1 radiko・らじる☆らじる受信機概観


1. Raspberry Pi での機能確認

製作に先立って、とりあえず、ボタン操作で radiko らじる☆らじるの受信ができるところまでを
Raspberry Pi 4B+ に Button SHIM の構成でやってみました。


図 2 Raspberry Pi での機能確認機器構成

割と前から Raspberry Pi で radiko の定期録音をやっていたので、
radikoの受信自体は難しくないことは判っていました。
後は Raspbery Pi と外部スイッチの連携ですが、
私自身 Raspberry Pi の GPIO は使ったことが無かったので、まずはそのお勉強から・・・(^^;
調べてみたら、制御は python でやるのが一般的らしいということと、
GPIO に突き刺さるスイッチ(Button SHIM)が市販されていることが判り、
まずはこのスイッチで Raspberry Pi を制御する様子を確認しようと思い、
Button SHIM を取り寄せて動かしてみました。
試しにと思って使ってみたButton SHIMですが、これが意外と使えることが判り、
radikoとらじる☆らじるの受信スクリプトを書いてButton SHIMと連携させたら割と簡単に受信機の仕組みとしては完成しました。
形になっちゃったのでRaspberry Pi のイヤホンジャックに外部スピーカーをつないでしばらく使ってました。

1.1 大まかな処理の流れ。

Raspbian 起動後、python スクリプトを自動起動、選局スイッチ入力を待ちます。
スイッチが押されると python スクリプトからradiko,らじる☆らじる受信のシェルスクリプトを呼び出して、
ストリーム放送を受信・再生します。
radiko、らじる☆らじるの受信は streamlink を使っています。
また、streamlink から vlc を呼び出して音声出力しています。
vlc 再生中、スイッチ操作で別な局が選択されたら
"killall -INT vlc" でシグナルを送ってそのプロセスを中断し、
新たなプロセスを起こして streamlink を起動し、vlcを呼び出します。
なお、自動起動は autostart を使っています。

スイッチ操作のpythonスクリプト
radiko・らじる☆らじる受信シェルスクリプト


1.2 操作の様子

Raspberry Pi の電源を入れてしばらくすると Button SHIM の緑のLEDが点灯します。
この状態で、5つあるスイッチの任意の一つを短く押すと、
それに割り当てられている局の ストリーム放送受信スクリプトが起動して放送を再生します。
起動時、局切り替え時に少しだけ時間が掛かりますが、操作感は普通のラジオの風味に仕上がってます。
5つのスイッチで選局ですが、グループ(3つ)を切り替えることで15局まで対応しています。
LEDの色や点滅数で選んだ局が判別できるようにしました。
各ボタンに割り当てている機能は下記です。

ボタンA:ちょい押し→選局1 長押し→グループ切り替え
ボタンB:ちょい押し→選局2
ボタンC:ちょい押し→選局3
ボタンD:ちょい押し→選局4
ボタンE:ちょい押し→選局5 長押し→シャットダウン


2. スピーカーボックスの中に Raspberry Pi とオーディオアンプを組み込む

機能確認ができたので、これにアンプをつないで、スピーカーボックスに組み込んでみました。
構成は図3のとおり。完成品の写真は図1です。
なお、機能確認では Raspberry Pi 4B+ を使用しましたが、スピーカーポックスへの組み込みは
Raspberry Pi 3B+ を使用しています。


図 3 radiko・らじる☆らじる受信機システム構成


2.1 タクタイルスイッチと LED

デザイン上、Button SHIM のスイッチをそのまま使うことはできないので、
外付けのタクタイルスイッチをButton SHIMのスイッチにパラレルに接続しました。
図7の写真に写っていますが Button SHIM のスイッチの電極が外から見えるのでそこに電線をハンダ付けして引き出しました。
(やっつけ感が否めない。まぁ、アマチュアなので許して・・・)
LEDも Button SHIM のものではどうすることもできないのでGPIOを使って機能確認時と同じ動作をさせることにしました。
ですので、LEDの点滅については python スクリプトを変えています。
LED 回路には 74HC05 を入れていますが、これは Raspberry Pi の保護が目的です。
個人的趣味で入れていますので無くても良いと思います。

LEDを外付けにした場合の python スクリプト


図 4 タクタイルスイッチと LED の回路構成


2.2 オーディオアンプと電源回路

電源はRaspberry Piの DC 5V とオーディオアンプの DC 12V の2種類いるのですが、
外観上、スピーカーボックスからは1対の電線で電源供給したかったので、 スピーカーボックス内で対応することにしました。
(これが後にノイズ対策で悩むことになる)
電源(DC 12V)をオーディオアンプと共用にするため、Raspberry Pi 用にDC-DCコンバータを入れたのですが、
つないで動作確認したら、Raspberry Pi の動作ノイズがアンプに入り込んでピーとかギャーとか音が出る・・・ orz
いろいろ調べてみたら、どうもグランドから回り込んでいる様子、
各基板のグランドがいろんなところでつながっていて出所を特定することは困難なので、
被害を被っているオーディオアンプの電源にフィルタを入れて対策しました。
このフィルタ回路は試行錯誤の過程でとりあえずやってみたらうまくいったもので、4.7mH のインダクタも電流の容量に不安はあるのですが、
深い検討はせずにそのまま本設にしています。
グランド側に入れたインダクタがミソのようですが、もしかしたらもっと良い方法があるかもしれません。


図 5 オーディオアンプと電源回路の構成

以上の回路をスピーカーポックスに入れるため、一つのボード上に配置しました。


図 6 実装用のボードに配置したユニット群


図6(写真)の左にあるのが Rasbperry Pi 3B+、Button SHIM と拡張基板です。
右下の基板はDC-DCコンバータとローパスフィルタ、右上の小さい基板がオーディオアンプです。

2.3 スピーカーポックスの加工

市販のスピーカーボックスのキットを改造してシステムを組み込むことにしました。
スピーカーボックスは Fostex の P800-E でスピーカーは P800K です。
スピーカーボックス内の配置や構造は図7を見てください。


図 7 radiko・らじる☆らじる受信機構造図
dxfデータはこちら。


回路を組み込むためにスピーカーポックスの天井側に穴を開けました。


図 8 スピーカーポックスの加工

図8で、奥の方にバスレフのダクト(円筒)が見えます。
今回はこれがあると基板を組み込むスペースが無くなるので取り除きました。

2.4 装置の組み立て

図9はスピーカーポックスに回路を組み込んだところです。線がグジャグジャ^^;


図 9 スピーカーポックスへシステム組み込み

配線の計画も慣れないと難しいですね。短すぎると組み立てできないし、だからといって長すぎても写真見たいになってしまう。
スピーカーポックスに回路を組み込んだ後、蓋(操作部)を閉めます。(図10)


図 10 操作部の取り付け

蓋にはタクタイルスイッチ、ボリューム、LEDが取り付けてあります。
タクタイルスイッチやボリュームは蓋にビス止めされていて、その頭が見えている状態です。
これだと見た目が良くないので、これを隠すために化粧板を取り付けています。
化粧板を取り付けて完成した状態が冒頭の図1です。

3. おわりに

この受信機はスクリプトの中で放送局が固定されていますが、
例えば、PHP と組み合わせてブラウザから設定できるようにするなどのアイデアはあります。
ただ、現状困ってないのでそこまでやる予定はありません。

この記事に書かれいてる内容やリンク先のスクリプト類を使用される場合には自己責任でお願いします。

©  2021  Kadowaki Isamu