【概要】
dsPICのDSP機能を活用した製作例です。 音楽に合わせてフルカラーLEDが
自在に変化します。
外部から入力した音を高音、中音、低音にフィルタで分離し、それぞれの音の
大きさに合わせて、フルカラーLEDのR、G、BをPWM制御します。
これでコントラバスの低音の時は青く光り、歌手の声のときは緑に、バイオリンの
高音の時は赤く光ります。音楽を目でも楽しめる作品です。音楽を聴きながら
目でも愉しめるというのはなかなか良いものです。
dsPICのフィルタでリアルタイムに色を制御しますから、音楽の音に敏感に反応
して色が変わります。
出来上がった制御部と発光部です。
【全体の構成】
この音楽イルミネーションのハードウェアの全体構成は下図のようになっています。
まず使用するdsPICには、PWM出力が3系統必要ですので、モータ制御用のdsPICから
最も安価なdsPIC30F2010を使います。
流れとしては、外部からの音をオペアンプで増幅し、オフセットを調整してゼロ入力の
とき、ちょうど中央値の2.5Vになるようにします。これをdsPICのアナログ入力ピンに
接続します。
3系統のPWM出力には、トランジスタを接続して、いくつかの外部のフルカラー発光
ダイオードをPWM制御できるようにします。
これだけの簡単な構成で、フィルタ機能はすべてdsPICのソフトウェアで実行します。
クロック発振には10MHzのセラミック発振子を使い、内部PLLで40MHzで動作させて
います。音声ですから20kHzまでの帯域しかありませんので、それほど高速にしなくても
機能は実現できます。
次にdsPIC内部のソフトウェア構成は下図のようになっています。
まずタイマ3を20kHzの一定周期で動作させ、これのタイムアウトごとにA/D変換を
自動スタートさせます。これでA/D変換は20kHzのサンプリングで動作することに
なります。したがって入力可能な上限周波数が10kHzということになります。
A/D変換が終了すると割り込みが入り、フィルタ機能がここで実行されます。
このサンプリング入力ごとに3個のバンドパスフィルタを実行し、それぞれの出力で
3つのPWMの出力を設定します。
バンドパスフィルタは下記のように設定されていますので、これで音が分けられる
ことになります。
低音用バンドパスフィルタ : 60Hz 〜200Hz
中音用バンドパスフィルタ : 200Hz〜2kHz
高音用バンドパスフィルタ : 2kHz 〜10kHz
フィルタは3つともIIRフィルタを使用しましたので、タップ数も少なく高速の処理が
できます。
【回路構成と外観】
上記の構成で作成した回路図が下図となります。
入力アンプの入力側にはオフセット調整ができるようにして0Vの位置が調整
できるようにしておきます。あとは特に難しい回路部分はありませんが、トランジスタ
のソースには大電流が流れますので、このパターンがアナログ回路に悪影響を
与えないように分離して扱うようにします。またこの回路図には基板内部に
フルカラーのLEDが1個接続されていますが、これは使っても使わなくても
どちらでも構いません。
出来上がったユニットの外観です。小型の透明アクリルケースに納めました。
入力にはステレオ入力でもできるようにピンジャックを2個実装し、それぞれの
入力を抵抗経由で接続して1入力にまとめてから、可変抵抗で音量調節できる
ようにしています。この可変抵抗の中間ピンをオペアンプの入力としています。
次が発光部の回路図で、4個のフルカラー発光ダイオードをまとめています。
GND配線は使いませんので実際の接続では省略しています。コンデンサ2個も
省略しています。
発光部の写真が下図となります。コネクタケーブルで接続できるように
しておきます。抵抗は部品面に、発光ダイオードははんだ面に直付けと
いう形にしています。発光ダイオードが多少発熱しますので、基板の
パターンを放熱板代わりにしています。
この発光部で何を光らせるかは皆さんのアイデア次第ということになります。
今回はアクリルの球体にしました。
【プログラム】
プログラム全体は簡単な構成ですが、A/D変換の設定がやや複雑ですので
パラメータをC30のライブラリで用意されている関数用のパラメータを使って
整理しています。