超音波距離センサー (HC-SR04) で距離を計測する方法
ここでは超音波距離センサーを用いて、距離を計測する方法を説明します。
次のビデオでは実際に測定のデモを行っていますので、参考にご覧ください。プログラムのコードについては、下に書いてあります。
超音波というのは人間の耳に聞こえない周波数の音波 (空気の振動) のことです。超音波距離センサーというのは、 超音波を出して、その反射が返ってくる時間を測ることで、距離を測定するセンサーのことです。
山に登って、山頂から「ヤッホー」と声を出したとします。 だいぶ遅れて「ヤッホー」とこだま (エコー) が返ってくれば、遠くの山から声が跳ね返ってきたと判断できます。
逆に速くエコーが返ってくれば、山が近いということになりますよね。
超音波センサーは、まさに同じことを非常に短時間のエコーの跳ね返りをみて距離を計測します。
ちなみに、音波を使う距離センサーの他、光を使う光学式の距離センサーもあります。光学式の場合は、基本的に高い精度での計測が可能でありますが、 光が反射する面の色の影響を受けやすいなどの問題もあります。音波は制度が低いものの、反射面の色や材質の影響を受けにくい、 測定距離が長い、障害物の影響を受けにくい、などの特徴があります。
今回使用するセンサーは HC-SR04 という超音波距離センサーです。
Arduino で HC-SR04 を利用するには、NewPing ライブラリが使用できます。
Arduino のライブラリページから NewPing のダウンロードページにリンクがあるので、そこから *.zip ファイルをダウンロードしてください。
Arduino Playground - NewPing ライブラリ
zip をダウンロードしたら、Arduino IDE のメニューから Sketch > Include Library > Add .ZIP Library... と選択して、 ダウンロードした zip ファイルを追加します。
今回は超音波距離センサー HC-SR04 とLCD 1602A I2C アダプターを使って、測定した距離を LCD に表示する仕組みを作ってみましょう。
HC-SR04 は電源電圧 5V、動作周波数 40kHz、測定角度 15° で動作します。
ピン配置は次の通りです。
今回は測定結果を LCD に表示するため、次のように配線しています。
LCD については「LCD 1602A I2C アダプター」をみてください。
プログラムは次のようにしました。
#include <NewPing.h>
#include <LiquidCrystal_I2C.h>
const int PIN_SONAR_TRIGGER = 12;
const int PIN_SONAR_ECHO = 11;
const int MAX_DISTANCE = 200;
NewPing sonar(PIN_SONAR_TRIGGER, PIN_SONAR_ECHO, MAX_DISTANCE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
delay(50);
unsigned long microSec = sonar.ping_median();
unsigned long dist = sonar.convert_cm(microSec);
lcd.clear();
lcd.setCursor(0, 0);
if( !dist ){
lcd.print("-");
return;
}
else{
String s = String(dist);
s += "[cm]";
lcd.print(s);
}
}
ping_median メソッドを使って、Ping の応答時間を取得しています。 デフォルトで 5 回繰り返し ping を試行し、中央値を取得することによって安定した値を取得することを試みています。