audio_switch of Kawaii_robo


HOME > audio_switch



基本原理

左右の音声チャネルから信号を出力し、スイッチ等で回路を形成しマイクからその信号を検出します。
iPhoneではマイクがモノラルのため、出力するサイン波を異なるものにし、左右のどちらの端子が(または両方)がショートしたかを検出しています。

ハードウェア

回路図.png
具体的には、2入力のシステムを作成するのに必要な部材は
4極オーディオ端子(1.5mで190円)
スイッチ 20円
抵抗   20円
合計250円程度で作成可能です、arduinoのモデムを使ったシステムでは、同等のシステムを構成するのに3250円程度必要ですので、15分の1程度の費用で作成可能です。


Phone等のスマートフォンはマイク端子とグランド端子間の抵抗で、外部マイクを認識させる必要があります。

iPhone OS 3.0以降では、信号の入力レベルによってAGC(オートゲインコントロール)が入ります、具体的な制御アルゴリズムは不明ですが、現在はiPhone4,iPhone3GS OS 4.1でAGCの制御が入らないような信号レベルに制御し、この問題を回避しています。

ソフトウェア(Xcode)

上記の原理をAudioUnitを使って実装し、ライブラリ化を行いました。

ライブラリはできるだけ簡単に使えるように作成しました。
使い方は簡単で、まずライブラリのインスタンスを作成し、初期化をおこなってください。
自動的にマイクの検出をおこない、検出時に下記のデリゲートを呼びます。

  • マイクの接続検出OK/NG
  • スイッチ1_ON、スイッチ2_ON、両方ON、両方OFF

これらの状態を使ってiPhoneを自由にコントロールすることができます。

各スイッチの検出しきい値はプロパティになっていますので、センサーの調整など必要があれば外部から変更が可能です。

今回の実装では、左右のチャネルの周波数/位相が同じで、振幅が異なる信号を出力しています。

この信号をマイクで検出し、128フレーム(1フレーム2バイト、サンプリング周波数11025.00ヘルツ)の絶対値の平均値をもとに、スイッチの状態を検出します。
スイッチの開放状態では、入力レベルはほぼ0になります。

今回の例では、単純に信号レベルをみているだけですので、AVAudioRecorderとOpenALの組み合わせでもっと簡単に実装できると思いますが、今後の展開を視野にいれ、より詳細な制御が可能なAudioUnitを使用しています。

3つ以上のスイッチは、適切な抵抗値を選択すれば、容易に実現可能です。
また、FFTによる周波数分解の処理を実装することで、2つのアナログ抵抗センサーの検出が可能になると考えています。

応用

cyclemeter.jpg
高速なスイッチ検出が可能ですので、リードスイッチを利用してサイクルメーターを実現することができます。

シッポレリーズ.jpg
2つのスイッチ検出が可能ですので、カメラアプリケーションで通常のデジカメと同じ操作のレリーズボタンを実現することができます。

アナログジョイスティック.jpg
可変抵抗や抵抗値の変化するタイプのセンサーを利用して、アナログ値を利用することができます。


この技術の利用に関して

この技術はパテント出願済みです。
Make:やニコニコ技術部などのアマチュア活動に関してはご自由にお使いください。
商業利用、大量生産をお考えの方がいらっしゃいましたらご連絡をいただければ前向きに検討させていただきます。(むしろ熱望中)

inserted by FC2 system