吉田サウンドラボラトリー

音(サウンド)を扱う電子デバイスの工作をしています。

ラジカセでラジコを聴く「ラジカセコ」の製作

概要

メルカリでジャンク1200円で購入したラジカセにラズベリーパイを搭載し、Radiko再生機能を持たせました。フロントパネルの押しボタンをRadikoの選局等の操作用に改造しました。

元のラジカセから追加した機能

Radiko

 エリアフリー再生(Liveモード)

 タイムフリー録音 お気に入りリストに登録した番組を録音・再生(Playモード)

元のラジカセ機能で残っているもの

 FM/AMラジオ

 サラウンド

元のラジカセから削除した機能・使用できない機能

 カセットテープレコーダー 故障。

 CDプレイヤー 動作はしていたがフロントパネルをRadiko

   操作に使用するため使用不可。

 リモコン 故障。

 外部入力 Radikoからの入力に置換。

 電池 電池BOXのスペースにラズベリーパイを組み込む。

 

製作記録

フロントパネル押しボタンスイッチ信号の取り出し

写真中央に浮かんでいる白いコネクタが、フロントパネルからきている押しボタンスイッチ信号線3本を取り出したものです。コネクタは1本余り。メイン基板へつながっている残りの線は液晶表示用の線です。

PLAYボタンは専用の線が出ていますが、他のボタンは線を共用していて、ボタンごとに異なる抵抗値の抵抗がつながっています。

コネクタ メイン基板上シルク  
1 PLAY 再生/一時停止(S501) ONでGNDへ短絡
2 GND  
3 KEY

GNDとの抵抗値
STOP             S503       1.8kΩ
SKIP-             S504        7.7kΩ
SKIP+            S505        4.4kΩ
REPEAT       S506  12.4kΩ
PROGRAM    S507        22.3kΩ

 

そこで次のような回路を組みました。押したキーに応じてADコンバータに入力される電圧が変化します。

20msごとにAD変換した結果をダンプするプログラムを実行し、キーを次々に押して、結果をグラフにプロットしてみます。

 

何も押していないとAD変換値は1000付近で、キーを押し込むとADコンバータに入力される電圧に応じた値が出力されています。

最後に押したキーはSKIP+  です。使い込まれていたようで接触が悪いようです。AD変換結果が安定していません。

SKIP+キーの下の基板上に実装されているタクトスイッチを外し、手元にあった新しいものに交換します。

同じようにAD変換結果をプロットしてみます。

最後の部分、安定したようです。

AD変換値の範囲がどこからどこまでが当該キーが押されたものと判断するか理論値に基づいて決めます。

例えばAD変換値が107~207の範囲の値だったら、STOPキーが押されているものと判断します。

キー検出のスレッド(ドライバ)で20msごとにAD変換し、結果が上記表の下限~上限内の範囲だったら、該当するキーのキーコード(STOPキーだったら0)をパラメータにセットし、メインスレッドのキーハンドラ関数をコールします。

 

 

ラズベリーパイの組み込み

電池BOXにラズベリーパイを組み込みます。

左は5V電源です。ACインレットから100Vを引いてきています。

ユニバーサル基板中央がADコンバータ

コネクタは左から5V,音声出力、キー入力

音声出力はラジカセの外部入力コネクタへ内部で接続。

 

操作パネル表示の変更

「外部入力」を「ラジコ」にします。

「リピート」を「モード」にします。

 

各キーの機能

 



 

YMF825トーンエディタ

秋月電子で購入したヤマハ製YMF825使用FM音源LSIモジュール(写真上部)のトーンエディタを製作しました。

メイン画面(PC)

 

            上:YMF825ボード   下:Raspberry Pi Zero W

 

 

機能概要

Raspberry Piに接続したFM音源YMF825ボードの音色パラメータをGUIで編集する。
編集した音色でテスト音発音
音色定義ファイルから音色名を指定して読み込み
音色に名前を付けて保存

構造

python


GUIで各パラメータを編集します。49バイトのシステムエクスクルーシブメッセージMIDIデータを作成し、ソケット通信によりC言語側へ送信します。また、テスト音を再生するためのMIDIメッセージを送信します。

 

C言語

ソケット通信によりMIDIデータを受け取り、YMF825へ送ります。MIDIデータの受け渡しはYMAHA提供サンプルのFmdriver_sendMidi関数をそのままコールしています。
python側とC言語側はソケット通信を行っているため、以下のいずれの方法でも使用可能です。

・PCからネットワーク経由で動作させる
Raspberry Piにモニター、キーボード、マウスを接続して単体で動作させる

 

オリジナル音作成

FM音源の原理を勉強しながら作成を始めました。

手始めに正弦波を作成し、そこから少し手を加えた2音を掲載します。

下記ソースコードの'rec_sample'フォルダに収録。

 

ソースコード

github.com

 

 

 

 

 

 

IOTテーブルタップ2号機

1号機は仕様が複雑すぎてわかりにくい、使いづらいとう意見をもらったので、もっと簡単で分かりやすい仕様にした2号機を製作しました。

 

概要

  • 入力AC100V
  • 出力AC100V  ソリッドステートリレーでACアウトレットから出力
  • 出力インジケーターLED
  • スマホQRコードを読み取るとブラウザで設定画面を開く
  • ブラウザの設定画面はタイマー設定・モード切替・手動ON/OFFが可能
  • モードは 常時ON/常時OFF・タイマー(ONで開始)・タイマー(OFFで開始)
  • WiFi環境内が必要。
  • 現在時刻はNTPサーバから取得するので設定不要
  • 操作パネルの押ボタンでモード切替 手動 → タイマー → 手動
  • 外部トリガー入力で出力ON/OFF切替

 


状態遷移図

1号機よりだいぶ単純になりました。


結線図

ブラウザ設定画面


ソースコード

github.com

IOTテーブルタップ

IOTテーブルタップを製作しました。

概要

・入力 AC100V

・出力 AC100V  (中のリレーの最大負荷は10Aですが、安全をみて1A 100Wまでとします。)

・ACアウトレットからの出力ON/OFFコントロール

スマホでタイマーON/OFF時刻の設定、手動ON/OFF 家庭WiFi環境内でのみ使用可。

・操作パネルの押しボタンでモード切替 常時ON→スリープ→次のタイマーOFFまでON継続→タイマー→常時OFF→杉のタイマーONまでOFF継続→常時ON

・LEDの点灯/点滅で現在のモードを表示

 

スマホQRコードを読み取ると設定画面が表示されます

中の様子

 基板とパネルの間にATOM Liteが入っています。

 ATOM Lite の押しボタンとLEDをそのまま使用しています。

 

ボタン部分はパネルに穴を開け、グルーガンで樹脂を充填して作成。

下記と同じ方法。

ガスコンロ連動レンジフードスイッチ - 吉田サウンドラボラトリー

 

 

詳細

要求仕様

            一部未実装項目があります

要求  
  一日の決まった時刻にOF/OFFしたい。それぞれ4個ずつ設定したい。
  曜日選択したい
  出力系統は4系統まで制御できるようにしたい。(ハードウェア数の制約がない場合)
  ON/OFF時刻はスマートフォンから設定したい
  スマートフォンから設定する項目がどの機体に対して実施しているのか識別したい
  手動で連続ON・連続OFF状態にしたい
  停電復帰後は停電前の状態にもどってほしい
  連続ON状態からONを継続し、OFF時刻が来たらOFFにしたい
  連続OFF状態からOFFを継続し、ON時刻が来たらONにしたい
  連続ON/OFF状態から、タイマーON/OFF状態に切り替えたい
  現在のモードと出力状態をを知りたい
  現在の出力状態が手動でONしているのかタイマーでONされているのか知りたい
   
   
モード ON、OFF、スリープ、ON継続、OFF継続、タイマーモードの6モード
トリガー AtomLite 本体押しボタンスイッチ、外部入力
  トリガー操作によりモードを切替える
  (トリガー操作によるモード遷移)
  別紙状態遷移図参照
   
   
   
LED (AtomLite 本体LEDによる モード表示)
  赤点灯:常時ON
  青点灯:タイマーによるON状態
  赤青交互点灯:常時ONからタイマーモードへ切り替え後の継続ON状態
  青短点灯1:タイマーによるOFF状態
  青短点灯2:常時OFFからタイマーモードへ切り替え後の継続OFF
  消灯:常時OFF
   
Web操作 ON時刻設定
  OFF時刻設定
  現在の出力状態表示
  ONモードボタン
 

スリープモードボタン

タイマーモードボタン

 

OFFモードボタン

  継続チェックボックス
機体識別  
  機体の名前を設定する
  「識別」ボタンを押すと現在操作中の機体のLEDが特殊な表示をして5秒間反応する
   
タイマー設定 ON時刻l設定4個
  OFF時刻l設定4個
  曜日設定7個 チェックボックス 当該曜日のチェックボックスがOFFのとき出力ONを実行しない
  スリープ時間 分

 

状態遷移図

 

ソースコード

github.com

RadikoBox2号機 パネルへLED追加

現在のモードが認識できるように、

上部に3つ並んでいるファンクションボタンにバックライトLEDを増設したいと思います。

f:id:yoshida-sound-lab:20220211085155j:plain

現状のパネル

 

f:id:yoshida-sound-lab:20220223082343j:plain

トップカバーへ穴あけ

 

f:id:yoshida-sound-lab:20220223082521j:plain

ガラス板の上にトップカバーを固定

100均のグルーガンで樹脂を流し込み、固まる前に

白色LEDを2個ずつ、全部で6個押し込む。

10kΩの抵抗を介してGPIOポートに接続。

 

 

f:id:yoshida-sound-lab:20220223083135j:plain

配置が不揃いになってしまいました。

少し暗いかもしれないですが、夜間の使用が中心なのでこのぐらいがちょうど良いと思います。

 

f:id:yoshida-sound-lab:20220223084215j:plain

Liveモード

 

f:id:yoshida-sound-lab:20220223084318j:plain

Playモード

 

f:id:yoshida-sound-lab:20220223084350j:plain

ダウンロード中。ダウンロード完了で消灯。

 

もう少し見ばえが良くなるように、LEDの配置とパネルデザインを見直したいと思います。

 

 

RadikoBox2号機 パネル改善

RadikoBox2号機パネル

暗闇での手探り操作、触るとボタン部分の突起はわかりますがどのボタンかすぐにはわからず、指で全体のレイアウトを認識してからでないと望んだ操作ができません。

そのため、十字ボタン中央(再生・停止)とファンクションボタン中央(Liveモード)に突起をつけました。

ラベルを一旦剥がし、裏からドリル用のセンターポンチで押し出しました。

中央から少しずれてしまいました。

突起のおかげてこれらのボタンをすぐ認識できるようになりました。他のボタンへはこの突起のあるボタンを起点に移動して操作します。

ラベルはきれいに剥がれました。張り替えてもきれいに張り付いています。

 

 

f:id:yoshida-sound-lab:20220211085155j:plain

 

またしばらく使用して使い勝手を確認します。

 

Radiko Box 2号機 パネル張り替え

Radiko Box 2号機 のパネルデザインをやり直しました。機能も追加しました。

パネルデザイン作成

f:id:yoshida-sound-lab:20220206132911p:plain

GIMPで画像をデザイン。

 

f:id:yoshida-sound-lab:20220206132810j:plain

こちらの用紙に印刷

 

f:id:yoshida-sound-lab:20220206132804j:plain

f:id:yoshida-sound-lab:20220206132758j:plain

パネル表面へ張り付け。

 

表面の盛り上がりが微妙です。暗闇で指先の感覚だけでボタンの位置が認識できるかどうか、ベッドで寝るときに試してみます。

 

ソフトも修正。機能の追加をしました。

上部ファンクションボタンの機能(左から)

  • Play(短押し) 録音済み番組再生するプレイモード。先頭(最新)の録音番組から再生する。再生中に短押しすると次の(一つ古い)番組再生。
  • PlayFirst(長押し) 先頭(最新)の録音番組再生。
  • Live(短押し) ライブモード ラジオ局ライブ再生。左右キーで選局
  • 時計(短押し) 現在時刻を発話。暗闇で時計が見えない時に便利。
  • Download (長押し) プログラムリストに基づき最新の録音を手動実行。