前書き

超音波センサーは、高周波の音波を送信し、何か物体にあたり反射するまでの時間を計測します。同センサーの前面には2つの開口部があり、超音波を送信し受信します。このレッスンでは、HC-SR04超音波センサーの動作と使用方法を学びます。
計算式でも求めることはできます。【対象物の距離=音速×出力して戻ってくる時間÷2】となります。

準備

ハードウェア

ソフトウェア

超音波センサーHC-SR04について

HC-SR04の機能

超音波センサーとは?

超音波センサーは、音波を使用して物体までの距離を測定できる機器のことです。特定の周波数で音波を送信し、その音波が物体に反射して戻ってくる時間を測定することで、物体までの距離を調べます。

WHAT IS HC-SR04 ?

HC-SR04超音波センサーは、音波を使用して、コウモリのように物体までの距離を決定します。同センサーは非接触型で安定した測定値を検出する高精度な機器となります。また同センサーは2~400cm間の物体までの距離を計測します。ただし、日の光や黒い素材は反応しません(布製品のように音波を吸収する素材も、検出が困難な場合がございます)。同センサーには、超音波トランスミッターおよびレシーバーモジュールが付属しています。

超音波センサー前面に、2つの目のような金属製の部品が付いています。これらはトランスデューサと言われるもので、機械的な力を電気信号に変換する変換機です。同センサーには、送信用と受信用の変換機があり、送信用は電気信号を超音波パルスに変換し、受信用は反射した超音波パルスを電気信号に変換します。また背面部には、送信側にMAX3232というラベルのICがあり、送信変換機を制御するICとなります。受信側には、LM324というラベルのICがあり、受信変換機によって生成された信号を、アルドゥイーノに送信するのに信号を増幅するクワッドオペアンプとなります。

タイミング図

下記図には、HC-SR04のタイミング図を示しています。測定を開始するには、SR04のTrigが少なくとも10usの間High(5V)のパルスを受信する必要があります。これによりセンサーは40kHzで8サイクルの超音波を送信し、反射して戻ってくるのを待ちます。センサーが受信機から超音波を検出すると、エコーピンを高(5V)に設定し、距離に比例する期間(幅)だけ待機します。距離を取得するにはエコーピンの幅(Ton)を測定します。

時間=エコーパルスの幅(単位:マイクロ秒)

または音が約344m/s(1129ft/s)で空中を移動することが知られているため、音の速度を利用することができます。音波が戻るのにかかる時間、344メートル(音波の総往復距離)。往復とは、センサーによって検出される前に、音波が物体までの距離の2倍の距離を移動したことを意味します。これは超音波センサーから物体へ当たり、反射して超音波センサーへの「トリップ」が含まれます(音波が物体から跳ね返った後)。物体までの距離を見つけるには、単純に往復距離を2で割ります。

時間変数は、超音波パルスがセンサーを離れ、物体から跳ね返り、センサーに戻るまでにかかる時間のことです。なので対象物の距離を測定するには、同センサーを用いる場合、送信側から受信側に戻ってこないと計測できないことから、掛かった時間を2で割ることになります。ちなみに速度変数は音が空気中を移動する速度です。

空気中の音速は、温度と湿度によって変化します。したがって距離を正確に計算するには、周囲の温度と湿度を考慮する必要があります。温度と湿度を考慮した空気中の音速の式は次のとおりです。

たとえば、20°C、湿度50%の場合、音は次の速度で移動します。

注意

対象物が極小や凹凸など、基本的に音波は反射するが、帰る段階で正確に反射しない場合もあります。また音波を吸収する布やカーペットなども正確に距離を検出することができないので注意してください。こういった場合の対処方法も、ロボットのプログラミングでは考慮すべき重要事項です。

超音波センサーHC-SR04を使い、シリアルモニターに物体までの距離を表示させます

シリアルモニターに出力距離を測定・表示させます。

接続

HC-SR04超音波距離計には、Vcc、Trig、Echo、GNDの4つのピンがあります。Vccピンは、超音波パルスを生成するための電力を供給します。GNDピンはグランドに接続されています。Trigピンは、アルドゥイーノが超音波パルスを開始する信号を送信する場所です。エコーピンは、超音波センサーが対象物に照射・往復の持続時間に関する情報をOsoyoo Unoボードに送信する場所です。

下記図のように回路を組立てます。

コードプログラム

上記の操作が完了したら、USBケーブルを使用してアルドゥイーノボードをコンピューターに接続します。緑の電源LED(PWRのラベル)が点灯します。アルドゥイーノIDEを開き、プロジェクトに対応するボードとポートタイプを選択し、アルドゥイーノに次の スケッチ をロードします。

#define echoPin 2
#define trigPin 3

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  float duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) * 0.0344;
  
  if (distance >= 400 || distance <= 2){
    Serial.print("Distance = ");
    Serial.println("Out of range");
  }
  else {
    Serial.print("Distance = ");
    Serial.print(distance);
    Serial.println(" cm");
    delay(500);
  }
  delay(500);
}

実行結果

アップロードが完了後、数秒間を空けて、シリアルモニターを開き、以下のように物体を動かすことで、

シリアルモニターに距離が表示されます。

注:「Out of range」とは、超音波センサーからの距離が2cm~400cm以外の距離で試した場合に表示されます。