目次>5章 第2ステップ(色々な実験) (25)超音波を扱う(距離を測定)

超音波を扱う
− 距離を測定 −

更新日2008.7.5

前のページで、超音波を使って物体までの距離を測れる事が確認できました。
今回は、実際に距離を測って液晶ディスプレイ(LCD)に表示して見ましょう。

回路図

前のページでは送信回路のみで動作を確認しましたが、今回は受信回路と表示回路を追加します。

受信回路は、超音波受信器の微小信号をオペアンプで増幅します。最後にダイオードとコンデンサで、整流・昇圧・平滑し、PICがHレベルと認識する2V以上に増幅します。
この信号をPICのRB4に入力します。RB4はPORTBピン変化割込みで使用し、超音波の反射波を検出します。

表示回路にはLCD(液晶ディスプレイ)を使います。
LCDのビジーフラグをチェックしない方法にしましたので、R/WはGNDに接続します。また、PICのピンに余裕がありませんので、LCDの制御は4ビットモードにしました。
LCDの使い方は、こちらを参考にして下さい。

【参考】
オペアンプ2つで2V以上まで増幅していますが、2つ目のオペアンプをコンパレータとして使う方法もあります。(今回は試していませんが)

【参考】
RB4のピン変化割込みではなくRB0/INT割込みを使いたかったのですが、INT割込みの入力がシュミットトリガで4V以上必要なのでRB4(ピン変化割込み)にしました。
ピン変化割込みはTTL入力で、2VでHレベルと認識します。
2つ目のオペアンプをコンパレータにすれば解決できるかも知れません。

この回路の波形

プログラムの説明に入る前に、この回路の波形を見ておきましょう。

緑は、RA0(送信側)/黄色はRB4(受信側)の波形です。
反射物は、235cm先の壁です。
受信側は、前のページのようなノイズは無くなり、必要な信号のみになっています。

それでは、受信側(黄色)に注目して見ましょう。

(1)送信直後に受信波がある(小さな山)
これは反射波ではなく、送信器からの超音波が直接受信器に回り込んでいるものです。
無視する必要がありますが、PICがHレベルと認識する電圧は2V以上ですので、特に意識する事なく無視できます。
(2)送信から13.5ミリ秒後に受信波がある(大きな山)
これが235cm先の壁から反射してきた反射波です。
約3VですのでPICでHレベルと識別できます。

プログラムの考え方

超音波送受信
 
下のイメージ図を使ってプログラムの考え方を説明します。

(1) 超音波送信

送信する超音波のパルス幅(12.6μ秒)は、TMR0割込みにより作ります。
1回当たりの超音波送信は、パルス20サイクル分です。そして、51.6ミリ秒毎に送信します。
尚、超音波送信中はCPUに余裕が無いので、他の処理は行わないようにします。
超音波送信関連は、前のページも参考にして下さい。

(2) 超音波受信

1回の超音波送信完了時、ピン変化割込みを有効にして超音波受信を待ちます。
この間、TMR0割込みをカウントし、距離測定を行います。
TMR0割込み間隔は、28.8μ秒に変更しておきます。(28.8μ秒は、音が1cm進む時間)

(3) 超音波送信以外の処理

超音波送信処理中はCPUに余裕がありませんので超音波送信に専念し、LCDの制御などは超音波を送信していない時に行うようにします。

割込み処理

上でも一部触れましたが、今回のプログラムでは2つの割込みを使います。
・TMR0割込み
・PORTBピン変化割込み
(1)TMR0割込み
TMR0割込みは、超音波のパルス幅の時間(12.6uS)と、超音波送信から反射波を受信するまでの距離測定(28.8uS)の2種類の時間を使います。
下の図を参考にして下さい。
(2)PORTBピン変化割込み
ピン変化割込みは、反射波受信を検出するために使います。
1回の超音波送信完了時に、ピン変化割込みを有効にし、ピン変化割込み発生(反射波受信)時にピン変化割込みを禁止します。
こちらも下の図を参考にして下さい。

プログラム

概略処理フローを載せておきます。

今回のプログラムはこちらです。

動作確認

こちらは、ブレッドボードに組んで実験しているところです。

精度は以下の通りでした。(2008年5月18日11時,気温22度C,曇り,屋内)

物体距離表示誤差
箱ティッシュ8cm
箱ティッシュ10cm10
箱ティッシュ20cm20
箱ティッシュ30cm30
箱ティッシュ100cm100
木のタンス233cm234+1cm
ふすま318cm319+1cm
この表には載せていませんが、5m以上まで測定可能でした。6〜7mまで行けそうでしたが、家の中に障害物が存在しない空間が無かったので5m程度までしか確認していません。

実用には充分だと思いますが、温度が20度C以下や30度C以上の場合は温度補正も考慮が必要です。
例えば、357cmの距離測定では、温度が10度C変わると6cmの誤差になります。