■ PIC-BASIC で超音波距離センサーを使う ■

浅草ギ研の超音波距離センサーの測定値を PIC-BASIC で読み取ります。
使用するセンサーは最近バージョンアップした3ピン端子のものです。 浅草ギ研のHPに 使用事例がそのうち載るでしょうから、そちらも参考にしてください。
参考までに「取り扱い説明書」を抜粋
電源電圧 5V DC
消費電流 平均30mA 最大35mA
測定範囲 3cm 〜 3m
入力トリガ TTLレベル電圧 5μsのパルス
エコーパルス TTLレベル電圧 115μs 〜 18.5msのパルス
エコーホールドオフ時間350μs
次回測定までの待ち時間200μs

■回路
何も考えずに結線するだけです。
回路図はセンサーを正面から見た時のピン配置になっています。

電解コンデンサはベースボードからの電源にノイズ成分がのっていたので取り付けたものです。 測定結果が安定しているよう(頻繁に0を返していない)なら取り付ける必要はありません。

■プログラム
超音波センサーのSIGピンを5μs High にしてから Low にすると超音波を発信します。
センサーは自分の出した瞬間の超音波を拾わないように350μs待ってからSIGピンを距離に比例して High にします。この長さを測ることで対象物までの距離を計測します。

カウント部は待ち処理と計測処理の2つの WHILE文 で構成しています。
旧超音波距離センサーは、このアルゴリズムだとセンサーを塞いだ時に無限ループに陥ったのですが、 さすがは新型!大丈夫ですね。センサーを塞ぐと最大遠値を返してきます。
次回読み込みまでに200μs必要なのですが、連続して読み込んでいないので特に入れていません。 間髪入れずに読み込むような処理の場合はWAITを入れたほうがいいでしょう。

プログラムは単純にカウンタを返すだけです。距離の算出は省きました(汗)
'	PIC-BASIC で超音波距離センサー(PING)を使う
'
DIM Pcnt    AS BYTE

    '------------- LCD初期設定
    INITLCD
    CLEARLCD

    WHILE(1)
        GOSUB PLUSCNT

        '--------- 距離表示
        SETPOS 1,0
        PUTLCD "CNT:",Pcnt, "   "
        SLEEP 500
    WEND

PLUSCNT:
    Pcnt = 0
    '------------- センサーON
    OUTPUT  re.BIT0
    HIGH    re.BIT0
    SLEEP 1
    LOW     re.BIT0
    REVERSE re.BIT0
    '------------- エコーホールドオフ時間
    WHILE (re.BIT0 = 0)
    WEND
    '------------- HIGH の時間をカウント
    WHILE (re.BIT0 = 1)
        Pcnt = Pcnt + 1
    WEND
    RETURN
 

■測定結果
縦置きと横置きの場合を測定しました。
組み合わせると3次元空間での測定値がイメージできるかと思います。
対象物なしの時の値は66でした。これは部屋の隅までの距離です。
最大遠(家外に向けて計測)の時の値は 113 でした。

縦置きの場合
距離 cm 2015 10← 5軸線上 → 510 1520
5 6666 66 3 2 366 6666
10 6666 5 4 4 4 5 6666
15 66 7 6 6 5 6 6 6666
20 66 9 8 7 7 7 8 6666
25 1110 9 9 9 9 9 1066
30 1211 111010 1011 1212
35 1413 121212 1212 1314
40 1514 141313 1314 1516

横置きの場合
距離 cm 2015 10← 5軸線上 → 510 1520
5 6666 5 3 2 3 5 6666
10 6666 5 4 4 4 5 6666
15 6666 6 5 5 5 6 866
20 6610 8 7 7 7 8 966
25 6611 10 9 9 910 1066
30 1312 111110 1011 1213
35 1413 131212 1213 1314
40 1515 141414 1414 1515


あらゆる被害についてオイラは一切の責任を負いませんのでご了承を。
記載漏れや間違いなどありましたらご指摘よろしくお願いします。


■戻る