年末年始で手を付けていなかった超音波測距だが、ソフトを作って実際に動かしてみた。PICは14ピンのPIC16F18326を使った。
Timer1に入力するクロック(LFINTOSC=31KHz)をプリスケーラで2分周する事で、計測値1カウント当たり1.1cmの距離とした。これで1カウント当たりほぼ1cmと考える事ができる。音波の反射や回り込みによる相互干渉を避けるため Right, Front, Left の3つのセンサーを(同時でなく)順番に起動し測距する。これを連続で行うと3回/秒程度の頻度の測定になる。次図で上のトレースは右(R)のセンサーのトリガーであり、100msずつ遅れて起動する他のセンサーのトリガーは見えていない。下のトレースはTimer1のゲート信号で3つのセンサー(R,F,L)のエコーに対応している。各エコーのパルス幅が距離に対応しており、エコーが無い場合は次のような波形になる。中央の幅広のパルスを生成しているのがUS-015であり、それ以外はHC-SR04である。
測定結果はシリアルインターフェイスを通じてホストへ送信する。
測定したデータの扱いには次の3つのモードを設けた。
- 生データ表示モード
- 測定結果表示モード
- 最接近表示モード
1.生データ表示モードはデバッグ用で、測定した3方向の生データを16進表示する。
#0049:0021:001e
#0049:0022:001f
#0049:0022:001f
#0049:0021:001e
#004a:0023:001e
2.測定結果表示モードでは測定した3方向のデータを10進表示するが、この時測定したい距離の閾値(最大距離、最小距離)を適用し、その範囲外のデータは0とする。
> R:144 F:63 L:32
> R:144 F:63 L:31
> R:73 F:33 L:31
> R:73 F:34 L:32
> R:73 F:32 L:31
> R:144 F:64 L:32
> R:144 F:63 L:31
3.最接近表示モードでは、3方向のうち最も距離の近い対象までの方向と距離を表示する。3方向とも範囲内に対象物が検知されなかった場合は何も表示しない。
=L23
=L30
=F51
=F53
=F48
=F52
=R71
=R71
3つのLEDは夫々のセンサーが対象範囲内にエコーを捉えていることを表す。
これを、これまで作った回路と組み合わせることで纏まった動作をさせるよう今後インテグレーションしたい。
(続く)