誰かに机の上を叩いてもらい、叩いたところを見ないで、叩いた場所を特定するプログラムを作っています。
1.机の上に3つ(机の3つの角)のマイクを設置し、それぞれのマイクに到達する音の時刻が分かれば、震源地をみつける原理で叩いた場所を特定できるだろう。楽勝、と思っていました。
2.各マイクの出力を増幅し、マイクロプロセッサarduinoのアナログ入力に入れる。
3.11/16日に各マイクに到達する時間の差を出力してみたところ、時間の差は、叩くたびにバラバラ。
4.また、特定できる場所の解像度が悪すぎる(2,30cm位の単位でしか分からない)。
5.上記4は、arduinoのAD変換速度が遅く、感じとしては変換に50μ秒位かかる。
6.上記3は、机の音響特性が悪いのではないかとの指摘を音の先生からもらう。
7.土曜日(11/17)、机の上に置く1.5cmの木の板を購入し、机との間に2mmのフエルトを置き、音響特性をほぼ板のみに隔離する。
8.(11/17)アナログ入力は遅いので、ディジタル入力に変更。閾値制御に凝った方がよいかと思い、秋葉に出向きCMOSバッファーとショットキーインバーターを購入。
9.11/18(日)、木の板に3つのマイクを取り付けディジタル入力で、マイクに到達する音の時間差を測定。この結果、叩き方(たぶん、音の高さ)により、音の伝わる速度が変わってくることがわかる。(マイク間の時間差を使って叩いた位置を求める作戦が破綻orz)
10.11/19早朝寝床で4つのマイクにしたらどうなるかな?と考えていたら、叩いた場所から各マイクへの距離の比が求まるな、と思いつく。比が分かれば、音の高さによる伝達速度の問題は解決する。
11.11/19早朝6時の電車に乗って登校、マイクを板の4隅につけ、プログラムを改造し到達時刻を表示してみたら、良いデータが取れだし見通しが着く。これでいけそう。
(私の最後の卒研が、「峠を越えたかな」って感じです。ホッとし過ぎて、5時の大切な約束を忘れ、帰宅してしまいました。sorry)