今回もArduinoでセンサーを扱う方法について扱ってみたいと思います。前回は、温度センサー(MCP9700E)を使って室温を測定する方法でしたが、今回は超音波距離測定センサー(HC-SR04)を使った距離測定のやり方です。
目次
- 必要なもの
- 回路を組み立てよう!
- スケッチのサンプル
- まとめ
1.必要なもの
まずは必要なものについてです。下記にまとめてみました。ArduinoはポピュラーなUNOを使用します。超音波距離測定センサー(HC-SR04)は秋月電子通商でもamazonでも入手可能です。
Arduinoをまだ持っていない人は、スイッチサイエンスの「Arduinoをはじめようキット」もオススメです。UNOだけでなくブレッドボードやジャンパーワイヤー、LED、光センサー等が入ったスターターキットになっています。自分も最初はこれを買いました。
※上記のリンクはamazonへのリンクとなっています。
2.回路を組み立てよう!
それでは早速回路を組み立ててみましょう。下記の写真と接続図を参考に組み立てしてみてください。


HC-SR04には4つの端子が付いていますが、それぞれの役割は下記の通りです。
- Vcc … 電源入力
- Trig … 超音波出力用の信号を送信
- Echo … 超音波入力用の信号を受信
- Gnd … グランド
3.スケッチのサンプル
では次に、距離を測定するためのスケッチを完成させましょう。下記のようにコーディングします。計測した距離はシリアルモニタで出力します。
#define echoPin 2
#define trigPin 3
double dur = 0;
double dis = 0;
void setup() {
Serial.begin(9600);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
// 超音波を出力
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 反射波の入力
dur = pulseIn(echoPin, HIGH);
if (dur > 0) {
// 往復距離を半分にする
dur = dur/2;
// 音速を340m/sに設定し、さらにマイクロ秒に変換
dis = dur*340*100/1000000;
Serial.print("Distance:");
Serial.print(dis);
Serial.println("cm");
}
delay(500);
}
スケッチの解説
7〜9行目:
計測した距離はシリアルモニタで出力するので、setup関数内で「Serial.begin(9600)」を宣言します。またpinMode関数でピンの設定を行います。
15〜19行目:
超音波の出力をします。
22、27行目:
反射して帰ってきた反響を入力し、半分にします。
30行目:
距離は反射波のタイムラグから計算しますが、マイクロ秒(100万分の1秒)でタイムラグを計算する必要があるため、このような計算式となっています。
音速は実際には温度や気圧などの影響を受けるので、必ずしも340m/sではないのですが、HC-SR04の使用目的が障害物検知などの近距離測距が目的なら、ほとんど無視できる誤差となります。上記の写真のように計測すると、センサーの筒の先端から障害物までの距離の誤差は数ミリ程度です。
秋月電子通商が公開しているデータシートでは、仕様上の距離測距範囲は2cm〜4mとなっています。もし1m以上の距離測距を目的とするなら、温度センサー、気圧センサー等を併用した精度の高い計算式にする必要があるかもしれません。
4.まとめ
今回はArduinoで超音波距離測定センサー(HC-SR04)を使って距離を計測する方法について扱ってみました。ロボット車両の障害物検知等の目的では、最もポピュラーなセンサーです。使い方は簡単ですし、是非電子工作に役立てたいですね。