概要

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

超音波センサHC-SR04

https://rb-station.com/products/%E8%B6%85%E9%9F%B3%E6%B3%A2%E8%B7%9D%E9%9B%A2%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC-hc-sr04

 HC-SR04

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

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

超音波の性質と注意点

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

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

指向性

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

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

温度の影響を受ける

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

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

音速の簡易計算ツールはこちら

https://rb-station.com/blogs/tool/calculate-speed-of-sound

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で取得します。

関連商品 

https://rb-station.com/products/%E8%B6%85%E9%9F%B3%E6%B3%A2%E8%B7%9D%E9%9B%A2%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC-hc-sr04-%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88-%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%91%E7%B7%9A%E3%82%BB%E3%83%83%E3%83%88

pulseInを使いたくない場合

pulseInは実行中に他の処理が止まってしまうので、他の処理を止めたくない場合は下記記事を参考にしてください。

https://rb-station.com/blogs/article/arduino-pulsein

Arduino超音波センサ

Related Posts

ArduinoのpulseInで割り込み処理ができるようにする
ArduinoのpulseInで割り込み処理ができるようにする
概要 超音波センサーHC-SR04等を用いてArduinoで距離計測を行いたいときに、Trigピンで超音波を発生させた後にEchoピンで、超音波が反射されてくるまでの時間を計測することで距離を計測できます。その際、pulseInという...
Read More
DCモータ制御で配線が複雑になる場合はDCモータコントローラシールドMD04を使うと便利!
DCモータ制御で配線が複雑になる場合はDCモータコントローラシールドMD04を使うと便利!
概要 DCモータを動作させる際は、モータコントローラを用いると便利ですが、それでも複数のモータを動作させようとしたときには配線がごちゃごちゃになってしまいがちです。そのような時は、シールドタイプのDCモータコントローラを使えば、マイコ...
Read More
Arduino Nano互換ボードで書き込めない時はプロセッサを確認
Arduino Nano互換ボードで書き込めない時はプロセッサを確認
概要 安価なArduino Nano互換ボードを使っていると、Arduino IDEで書き込みができずにエラーになってしまうことがあります。本記事ではその対処法について解説をします。 対処法 書き込み時にエラーが出る原因はさまざまな...
Read More