概要

超音波センサHC-SR04は、超音波の反射時間を利用して非接触で距離を測定することができる距離センサです。このHC-SR04を使ってArduinoで距離を測定する方法についてコードのサンプルを交えて解説します。

超音波センサHC-SR04

 HC-SR04

音波センサHC-SR04はこのような外観をしています。丸い網がけの部分が超音波を送受信する部分です。

左側の「T 」がついている方がトランスミッター(Transmitter)で、超音波を発することができます。右側の「R」がついている方がレシーバー(Receiver)で、超音波を受信することができます。

超音波の性質と注意点

人間の聞くことのできる音波は20Hz〜20KHzの周波数の領域とされており、その範囲外の周波数の音を超音波と呼びます。

いくつか超音波の特徴はありますが、距離測定において需要な性質は下記です。

指向性

超音波はまっすぐ飛びます。これを利用して物体に超音波が物体に反射して戻ってくる時間を計測することで距離を測定します。(ToF = Time of Flight型の距離センサー)

そのため、反射面が音を拡散しやすい、吸収しやすい材質だとうまく測定できなくなってしまう点に注意です。

温度の影響を受ける

超音波は音ですので、空気中を伝わる速度は一般的な音速の式に従います。

反射した超音波が戻ってくるまでの時間をもとに距離を測っているので、音速が変化するということは、周りの気温によって距離の値に誤差が生じるということになりますので、計算式を作る際は気温も考慮できるとより正確な距離を計測することが可能になります。

Arduinoで距離計測

では、ArduinoとHC-SR04を用いて、物体との距離を測っていきましょう。配線は次図のように繋ぎましょう。

HC-SR04とArduinoの接続

  • Vcc: 5V
  • Gnd: GND
  • Trig: 3番ピン
  • Echo: 2番ピン

続いて、Arduinoで距離を計測するサンプルは次の通りです。

int TRIG = 3;
int ECHO = 2;

double duration = 0;
double distance = 0;
double speed_of_sound = 331.5 + 0.6 * 25; // 25℃の気温の想定

void setup() {
  Serial.begin( 9600 );

  pinMode(ECHO, INPUT );
  pinMode(TRIG, OUTPUT );
}

void loop() {
  digitalWrite(TRIG, LOW); 
  delayMicroseconds(2); 
  digitalWrite( TRIG, HIGH );
  delayMicroseconds( 10 ); 
  digitalWrite( TRIG, LOW );
  duration = pulseIn( ECHO, HIGH ); // 往復にかかった時間が返却される[マイクロ秒]

  if (duration > 0) {
    duration = duration / 2; // 往路にかかった時間
    distance = duration * speed_of_sound * 100 / 1000000;
    Serial.print("Distance:");
    Serial.print(distance);
    Serial.println(" cm");
  }

  delay(200);
}

 シリアルモニタ

シリアルモニタで確認すると、上記のように物体までの距離が出力されているのがわかります。

コードの解説

  • Trigピンは10μ秒Highにすると、超音波パルス(40kHz)が発信されるため、delayMicroseconds( 10 )で、TrigピンをHIGHにしてから10μ秒待ち、TrigピンをLOWにしています。
  • すると、EchoピンがHIGHになって、超音波を受信するとLOWになりますので、その時間をpulseInで取得します。

関連商品 

Arduino超音波センサ

Related Posts

Arduinoのコードでキュー(Queue)を使う
Arduinoのコードでキュー(Queue)を使う
概要 Arduinoのコードを書く際に、処理をキューイングして順番に処理をしていきたい時がありました。Arduinoにはarrayはありますが、FIFO(後述)型のキューはデフォルトでは無いため、外部ライブラリをインクルードする必要が...
Read More
2輪駆動 ロボット台車・カーシャーシの組み立て方
2輪駆動 ロボット台車・カーシャーシの組み立て方
RoboStationで販売しているロボット台車・「積載重量4kg/3kg 2輪駆動 ロボット台車・カーシャーシ」の組み立て方について解説をします。   貼り付けられている写真はDCモータ版での組み立てですが、ステッピングモーター版...
Read More
L298PモータシールドとArduinoを使ってシンプルな配線でDCモータを制御しよう
L298PモータシールドとArduinoを使ってシンプルな配線でDCモータを制御しよう
DCモータコントローラについて DCモータを制御したい時に、1から制御回路を作るのは面倒ですので、DCモータコントローラを用いることが多いと思います。しかし、通常のモータコントローラでは、配線数が多くなってしまいがちなので、配線数を減...
Read More