Arduinoで超音波センサーを扱う

標準

今回は、Arduinoで超音波センサーを使って、距離を測定したいと思います。
使用した超音波センサーモジュールは「HC-SR04(400円)」です。モジュール化されているのでとても扱いやすいです。

回路図

基本的に、超音波センサーモジュールの基盤に書かれている配線にすれば完了です。念の為、ソフトで作図したものも貼っておきます。

超音波センサー回路図

Trigピンに、パルス波の信号を出し、反射するのに要した時間がEchoピンから返ってきます。

センサー特性

この超音波センサーモジュールは、データシートによると以下の特性を持っています。

  • 分解能:0.3[cm]
  • 測定可能距離:2~400c[cm]
  • 範囲:15°

スケッチ

Trigピンに10μsだけHIGHを書き込むとそのうちに8回のパルス波を出すそうなので、それに従って書いていきます。

double value = 0;
void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(3, LOW);
  delayMicroseconds(2);
  digitalWrite(3, HIGH );
  delayMicroseconds(10);
  digitalWrite(3, LOW);

  value = pulseIn(2, HIGH);
  value = value / 2 * 340 * 100 / 1000000;

  Serial.println(value);
  delay(100);
}

8~12行目でパルス波を出し、それをpulseInで拾います。この時、反射に要した時間がvalueに代入されているので、これを音速340[m/s]と仮定して、距離を算出します。

考察

シリアルプロッタを使って距離が正しく測定できているか確認してみました。

距離測定

概ね正常に測定できていますが、正常に拾えなかった時に極端に値が大きくなったり、超音波の特性上布状の材質は測定が困難なようです。実際、上記グラフの極端に値が上下しているところは、布に対して測定した時です。
また、手などの反射できる範囲が狭い材質に対しても測定に若干難がありそうです。

このセンサーは価格400円のわりには分解能が0.3cmという精密さを誇っているので、プログラムの改良によっては、実用的な何かが作れそうです。

投稿者プロフィール

yoshipc

コンピューター関連を得意としています。PHPが専門です(尚、技量はお察し)。このブログとMastodonのインスタンスを運営・管理しています。よろしくお願いいたします。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です