note.nkmk.me

超音波センサーモジュールHC-SR04

Date: 2014-05-06 / tags: Arduino

Arduinoにいろんなセンサーを付けてみたかったので試してみた。

スポンサーリンク

購入

色んな所で売ってる。(値段は2014年5月6日時点)

AliExpressは届くのに時間がかかるので、Amazonで買った。470円。

仕様

ピンは4つ。

  • VCC - 5V
  • Trig
  • Echo
  • GND - 0V

細かい仕様・使い方はスイッチサイエンスのページが詳しい。

超音波の反射を利用して対象物までの距離を測る測距センサです。

仕様

  • 電源電圧 5V
  • 待機電流 2mA未満
  • 信号出力 0-5V
  • センサ角度 15度以下
  • 測定可能距離 2cm-450cm
  • 分解能 0.3cm
  • 端子間隔 2.54mm

使い方

  1. トリガ端子を10us以上Highにしてください。
  2. このセンサモジュールが40kHzのパルスを8回送信して受信します。
  3. 受信すると、出力端子がHighになります。
  4. 出力端子がHighになっている時間がパルスを送信してから受信するまでの時間です。
  5. 出力端子がHighになっている時間の半分を音速で割った数値が距離です。

Arduinoのプログラム

EchoがHighになっている時間 $\Delta t$ [us]はpulseIn()で求める。

温度t℃のときの音速cは、

$$ \begin{align} c &= 331.5 + 0.61*t [m/s] \\ &= (331.5 + 0.61*t) * 100/1000000 [cm/us] \end{align} $$

20℃で考えると、求める距離d[cm]は、

$$ \begin{align} d &= (\Delta t/2) * (331.5+0.61*20)/10000 [cm] \\ &= (\Delta t/2) * 0.3437 [cm] \end{align} $$

となる。

1mぐらいまではそこそこ精度よく測れる。近づいたかどうかの判定ぐらいには十分使えると思う。

#define trigPin 8
#define echoPin 9

int duration;
float distance;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(1);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) * 0.03437;

  if (distance <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(duration);
    Serial.print(" us / ");
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事