「さ〜ボード」の仕組み
<基本的な考え方>
「さ〜ボード」はPCからのオーディオ信号をトリガーにしてサーボモーターを動作させます。
一般的なサーボモーターは、電源・制御信号・接地の3端子を備えていて、制御信号の端子にPWM信号を入力すると、PWMのパルス幅に比例した角度でモーターが回転します。
PWM信号の発生には専用のチップもありますが、Arduinoなどで使われているAVRマイコンにPWMの機能が備わっているので、これを使うことにしました。AVRマイコンはArduinoの開発環境を利用できるため、楽にプログラムできます。
またAVRマイコンにはAD変換の機能があり、DC0〜5Vの入力電圧を、0〜1023の数値に変換してくれます。
つまり全体の仕組みはつぎのようになります。
・PCからのオーディオ信号を増幅、整流してDC0〜5Vの信号にする。
・上記の信号をAVRマイコンのAD変換に入力する。
・0〜1023の数値に変換された信号に比例して、PWMのパルス幅を変えるようにプログラムする。
・AVRマイコンのPWM信号をサーボモーターに入力する。
これでPCから出力するオーディオ信号の音量に比例した角度で、サーボモーターが動くことになります。
この方法でサーボモーター1つを動かすことはできます。しかしどうせなら複数のモーターを扱えると、ロボットの両腕、自動車の両輪など応用が広がります。
<複数のサーボモーター制御する>
複数のモーターを制御するためには、マイコンに入力する信号がどのモーターへの制御信号なのかを判別できないといけません。オーディオ信号なので、音の周波数を変えれば判別できそうです。
そこでフィルターを使って、高い音、低い音を別のチャンネルとし、それぞれが別のAD変換、PWMを使うようにしました。
実際に特性のシャープなフィルターをアナログ回路で作ろうとすると、1チャンネルあたりの部品点数がかなり増えます。また一般的でない定数の部品が必要になり、トライアンドエラーも面倒になります。
<オーディオ用スペアナチップの応用>
そこで思いついたのが、オーディオ用のスペクトラムアナライザのチップを利用することでした。ステレオコンポなどについている、周波数ごとのレベルを棒グラフで表示するあれです。MSGEQ7というチップが入手しやすく、使用事例もあるので使ってみました。
このチップは63Hz〜16KHzまで7チャンネルのフィルターを内蔵しており、入力したオーディオ信号に含まれる各周波数のレベルをDC0〜4Vで出力してくれます。増幅回路も内蔵しているので、上の図の増幅、フィルター、整流の部分がワンチップで賄え、非常に回路が簡単になりました。
実際にPCから出力できる周波数の範囲ですが、よく使われるScratchなどのソフトはMIDIの規格に従っているようで、周波数の上限は12KHzになります。MSGEQ7の上限である16KHzは使用できないため、実質は6チャンネルの判別ができます。
実際、学校の授業で6チャンネル使用する場面があるかということと、コストダウンのため「さ〜ボード2」は2チャンネル分を実装しています。
とはいえ、6チャンネルを全て使ったものがあってもよいので、機能を「全部のせ」した「さ〜ボード6」も開発中です。
ここまでの詳しい経過や最新情報はブログページで公開しています。