ソナー開発実験「スピーカーでプログラミング通りに出力できる周波数の限界値を調べる」
前回までの段階で3つのスピーカーの位相の差を特定の目処がつき、「マイクの位置を三次元的に特定する系を開発」は完成できる見通しがつきました。
しかし、使用しているスピーカーから出力される周波数が、プログラミングで意図した通りに出力されない場合がありました。今後ソナー開発を行う上で、正確に出力できる周波数の限界値を知る必要があるます。従って、今回はこの「スピーカーで正確に出力できる周波数の限界値」を調べるためのプログラミングを考えました。
実験方法
①PICマイコンを用いてスピーカーに1秒毎に10[Hz]ずつ発生させる周波数を大きくするプログラミングを組む
②オシロスコープを用いて、PICマイコンから出力されるパルス波の波形がプログラミング通りの周波数となっているか調べる
③PICマイコンから出力されるパルス波の波形とマイクでパソコンに取り込み解析した音の波形を比べる以上の方法で、「スピーカーで正確に出力できる周波数の限界値」を調べる
問題点
問題点は実験方法の①、「周波数を10[Hz]ずつ大きくするプログラミング」ができないことである。
原因は、使用しているPICマイコンが8bit、すなわち定義できる変数が0~255までの整数しか扱えないためである。オシロスコープでPICマイコンの電圧の波形を測定した際に、ある時間からパルス波の波形がが急激する。
なぜこのような現象が起きるのか?理由は以下の通りである。
まず、10[Hz]毎に周波数を変化させる場合、10[Hz],20[Hz]・・・とプログラミングすると莫大な行数になってしまう。これを避けるため、変数とループを使用し1ループ毎に変数を10ずつ大きくすることでプログラミングを簡潔にする。しかし、この際に使用する変数が0~255までの整数しか使用できないため、255を超えた時点で誤作動を起こす。オシロスコープで測定しているとパルス波が急激に変化する。
これを回避するには0~255までの整数を用いて256以上の数値を表現しなければならない。
問題解決への指針
一つの解決方法として、パルスの間隔の指定にforループを用いた。この方法により、例えば10[ms]を100回繰り返すことで0~255の変数のみで1000という数値を表現することが可能になる。
しかし、この方法は積によって256以上の数値を表現するので素数は表現できない。また、数値をプログラミングす上でも不便である。以上の理由から、今回は「周波数を10[Hz]ずつ大きくするプログラミング」は成功まで至らなかった。
次回は以上の問題を解決し「周波数を10[Hz]ずつ大きくするプログラミング」を完成させ、今回に引き続き「スピーカーでプログラミング通りに出力できる周波数の限界値」を調べる。