5.12 距離の測定

超音波モジュールは、距離測定や物体検出に使用されます。このプロジェクトでは、障害物までの距離を測定するためにモジュールをプログラムします。超音波パルスを送信し、それが反射して戻ってくるまでの時間を測定することで、距離を算出できます。これにより、距離に基づいた行動や障害物回避行動を実装することが可能になります。

必要な部品

このプロジェクトには以下のコンポーネントが必要です。

全キットを購入することは確かに便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ジャンパーワイヤ

BUY

超音波モジュール

BUY

利用可能なピン

こちらは、このプロジェクトのためにESP32ボードで利用可能なピンのリストです。

入力用

IO13, IO14, IO27, IO26, IO25, IO33, IO32, I35, I34, I39, I36, IO4, IO18, IO19, IO21, IO22, IO23

出力用

IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

回路図

../../_images/circuit_5.12_ultrasonic.png

ESP32は10秒ごとに超音波センサーのTrigピンに一連の方形波信号を送信します。これにより、超音波センサーから40kHzの超音波信号が外向きに放出されます。前方に障害物がある場合、超音波波は反射して戻ります。

信号を送信してから受信するまでの時間を記録し、2で割って光速を掛けることにより、障害物までの距離を特定できます。

配線図

../../_images/5.12_ultrasonic_bb.png

コード

注釈

  • esp32-starter-kit-main\c\codes\5.12_ultrasonic のパスの下にある 5.12_ultrasonic.ino ファイルを開いてください。

  • ボード(ESP32 Dev Module)と適切なポートを選択した後、 Upload ボタンをクリックします。

  • "Unknown COMxx"が常に表示されますか?

コードが正常にアップロードされると、シリアルモニターは超音波センサーと前方の障害物との間の距離を出力します。

どのように動作するのか?

超音波センサーの応用については、サブファンクションを直接チェックしてください。

float readSensorData(){// ...}
  • 超音波モジュールの trigPin は、2usごとに10usの方形波信号を発信します。

    // Trigger a low signal before sending a high signal
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    // Send a 10-microsecond high signal to the trigPin
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    // Return to low signal
    digitalWrite(trigPin, LOW);
    
  • 障害物が範囲内にある場合、 echoPin は高レベルの信号を受信し、送信から受信までの時間を pulseIn() 関数で記録します。

    unsigned long microsecond = pulseIn(echoPin, HIGH);
    
  • 音速は秒速340メートルで、これはセンチメートルあたり29マイクロ秒に相当します。障害物までの方形波の往復の時間を測定し、その合計時間を2で割ることで、音波源から障害物までの距離を計算できます。

    float distance = microsecond / 29.00 / 2;
    

超音波センサーは動作している間プログラムを一時停止するため、複雑なプロジェクトを書いているときにいくらかの遅延を引き起こす可能性があります。