スイッチサイエンスで販売されているチップを眺めていたら、スペクトラムアナライザMSGEQ7とLEDドライバが並んでいて、「あー、スペアナ作れるよってことね」と思い、オーディオ用のスペクトラムアナライザを製作。
ベース基板。MSGEQ7を2つ積んで、ステレオ2ch × 7バンド(特性は下記)のレベルを取得します。
左から16ch LEDドライバ、Arduino Pro、MSGEQ7×2と周辺パーツが並びます。裏面にステレオミニジャックとACアダプタジャックがついてます。
ベース基板の上に乗る表示基板。表示用には秋月のバーLED(緑×5、黄×3、赤×2のタイプ)をレールで購入しました。左右対称に、真ん中から順に、左右chの63Hz、 160Hz、400Hz…用のレベルメータです。
あとはひたすらLED140個分をハンダ付け…(o´Д`)=з。バーLEDは基板に刺す前に、アノード側の足を全部根元で折り曲げてハンダ付けし、アノードを1つにまとめてしまったりとか、割と無茶して並べてあります。
MSGEQ7は、ストローブ信号を送ると順番にバンドが切り替わって、対応する電圧が出力されるので、それをAruduinoのADコンバータで読み取り、10レベル(1目盛りで約3dBのlogスケール)に変換します。
変換した値に基づいて、各バンドに対応したLED10個を順にダイナミック点灯していきます。購入したLEDドライバは16chを同時に駆動できるため、余った6ch分もダイナミック点灯用のトランジスタをドライブするのに流用しています(こんな使い方していいのかはよくわからないけど)。ダイナミック点灯に必要なpinは、左右ch選択 2 + バンド選択 7の9pin。 残りの3つはArduinoのデジタルポートから直接ドライブします。
他に、ピーク検出&表示(一定時間max値を維持した後ドロップするアニメーション)を入れてみたり、起動アニメーションで文字らしきものを表示してみたりして遊んでいます。
スモークグレーのアクリルケースに入れると結構きれい。
参考までに回路図(適当なので間違いがいっぱいあるかも(汗))。表示基板部分は同じ構造の繰り返しのため大幅に省略してあります。
[リンク先の「オリジナルサイズを表示」で拡大]
スケッチは本エントリの最後に。これとは別にLEDドライバ用のライブラリ Tlc5940 が必要です(リンク先の説明は分かりやすく参考になる)。
ただし、デフォルトの状態では14chでダイナミック点灯するには動作が遅すぎて、表示が激しくちらついてしまうので、ライブラリの設定を変更して動作を高速にする必要があります。
ライブラリの tcl_config.h というファイルを開くと TLC_PWM_PERIOD という定数が 8192 になっていますので、これを下記のように小さくします。
#define TLC_PWM_PERIOD 64続きを読む