はじめに
超音波距離センサーモジュールと、PICマイコン内蔵Timer1モジュールのゲート機能を使った測距実験です。
概要
超音波距離センサーは、対象物に向けて発射した超音波の反射波を受信します。実験に使用したPING))) Ultrasonic Distance Sensor #28015(PARALLAX社)は、増幅器や演算器などを一体化したセンサーモジュールで、測距範囲は2~300[cm]です。センサーにStart Pulseが入力されると超音波を発射し、一定時間SIGピンをLowにホールド(発射直後の超音波の受信防止)した後、反射波(Echo)を受信するまでの間、距離に比例したEcho Time Pulseを出力します(下図)。PICマイコンのTimer1モジュールは、Echo Time Pulseの間カウント動作を行い、カウント値から距離を計算します。
Timer1 ゲート機能について
PICマイコン内蔵Timer1モジュールは、16ビットのタイマー/カウンターで、65,536までのカウントが可能なほか、ゲートが有効な間だけカウント動作させるGate Enableモードがあります。下は、その仕組みをTimer1モジュールのブロックダイヤグラムとタイミングチャートで表したものです。ハードウェアでカウントするので、ソフトウェアの負荷はありません。
カウント周期は、Timer1モジュールのクロックが基準になります。ここでは、PICマイコンのシステムクロック FOSCを4MHz、Timer1クロックをFOSC/4、プリスケーラを1:1に設定しています。従って、Timer1クロックの周波数は FOSC/4 = 4MHz/4 = 1MHz、周期は1usecです。プリスケーラは1:1なので、1usec/カウントです。この条件でのEcho Time PulseのTMR1カウントに対する距離の関係は下グラフになります。
結果
下は、ソースコードです。MCC(MPLAB Code Configurator)を使用しています。センサーにつながる信号線は1本だけなので、マイコン側はT1Gピンを出力モードにしてStart Pulseを送信した後、入力モードに切り替えてEcho Time Pulseを待ちます。測距範囲外の場合は「N/A」と表示します。
下は、実験回路をブレッドボードに組んで測距している様子です。実験ユニットのモビリティー化を見据えて、電池3Vで動作させています。マイコンや液晶表示器は3Vでも動作しますが、本センサーの供給電圧は5Vです。このため、DCDCコンバーター(AE-XCL102D503CR-G:秋月電子通商)を使って3Vを5Vに昇圧しています。
まとめ
超音波という性質上、指向性は劣りますが、床や天井、壁など面積が広く平らなものは精度良く測距できました。また、Timer1モジュールのゲート機能は、オプションにToggleモードやSingle-Pulseモードも用意されており、これらを併用すれば、T1GピンにおけるHigh/Lowの周期毎や、1パルスだけのカウントも可能になります。イベントの状態に応じて利用すれば、活用の幅が広がると思います。
– 以上 –
Appendix
ブレッドボードの実験ユニットをケースに入れてモビリティー化しました(左下写真)。また、測定ポイントを示すため、赤色レーザー発光モジュールを取り付けました。「レーザーポインタ」のスイッチを押している間、レーザー光が照射します(右下写真)。