今回もArduinoでセンサーを扱う方法について扱ってみたいと思います。前回は、温度センサー(MCP9700E)を使って室温を測定する方法でしたが、今回は超音波距離測定センサー(HC-SR04)を使った距離測定のやり方です。

スポンサーリンク




目次

  1. 必要なもの
  2. 回路を組み立てよう!
  3. スケッチのサンプル
  4. まとめ

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)を使って距離を計測する方法について扱ってみました。ロボット車両の障害物検知等の目的では、最もポピュラーなセンサーです。使い方は簡単ですし、是非電子工作に役立てたいですね。