概要

超音波センサ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型の距離センサー)

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

温度の影響を受ける

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

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

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

Arduino超音波センサ

Related Posts

rospyでImageデータを取得してOpenCVの配列として扱う
rospyでImageデータを取得してOpenCVの配列として扱う
概要 PythonでROS開発をする際、sensor_msgs/Image型のトピックを受信して色々な処理をかけたいときには、OpenCVの配列に変換した上で処理を行うと便利です。CvBridgeというsensor_msgs/Imag...
Read More
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
概要 ROSを起動させているロボットに対して、スマートデバイスからROSで通信を行いたい時があるときは、Flutterを用いたネイティブアプリで実装するのがおすすめです。 roslibjsを使ってJavaScriptでROSトピックの...
Read More
Arduinoでサーボモータを動かす【簡易版】
Arduinoでサーボモータを動かす【簡易版】
概要 Arduinoでサーボモータを動かす方法について解説します。複数個を同時に制御する場合はPCA9685など追加モジュールを導入してi2cで制御することもできますが、今回はシンプルに1つのサーボモータを動かすサンプルを紹介します。...
Read More