#27初級

HC-SR04で距離を測定(シリアルモニタ表示)

4.6(46)
70 完了
HC-SR04で距離を測定(シリアルモニタ表示)
HC-SR04センサーは、コウモリが暗闇で道を見つけるのと同じ仕組みで動作します。人には聞こえない音を出し、その反響を捉えて前方の物体までの距離を測ります。Arduinoは0.5秒ごとに距離をセンチメートル単位でコンピューターの画面に表示し、3〜100センチメートルの測定値を示します。駐車センサーや障害物を避けるロボットなどのプロジェクトの基礎になります。

動画

回路図

HC-SR04で距離を測定(シリアルモニタ表示) - Circuit

ソースコード

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   HC-SR04 Distance Measurement (Serial Display)
4// ─────────────────────────────────────────
5// Measures distance with the HC-SR04 ultrasonic sensor and prints results
6// between 3 and 100 cm to the Serial Monitor in cm every 0.5 s.
7//
8// Pins:
9//   D7 -> HC-SR04 Trig
10//   D6 -> HC-SR04 Echo
11//   HC-SR04 VCC to 5V, GND to GND
12
13int echoPin = 6;        // Echo input
14int trigPin = 7;        // Trigger output
15int maxDistance = 100;  // Largest distance shown (cm)
16int minDistance = 3;    // Smallest distance shown (cm)
17
18void setup() {
19  pinMode(trigPin, OUTPUT);
20  pinMode(echoPin, INPUT);
21  Serial.begin(9600);
22}
23
24void loop() {
25  // A 10 us trigger pulse sends the sound burst
26  digitalWrite(trigPin, HIGH);
27  delayMicroseconds(10);
28  digitalWrite(trigPin, LOW);
29
30  // How long Echo stays HIGH (us) is the round-trip time. Sound travels at 0.034 cm/us; halving the
31  // path gives the distance
32  unsigned long duration = pulseIn(echoPin, HIGH);
33  double totalPath = (double)duration * 0.034;
34  int distance = totalPath / 2;
35
36  // Print only inside the valid range
37  if (distance > minDistance && distance < maxDistance) {
38    Serial.print("Distance: ");
39    Serial.print(distance);
40    Serial.println("cm");
41  }
42
43  delay(500);   // Wait 0.5 s
44}
45

よくある質問

HC-SR04はどのように距離を測りますか?▾

センサーは40 kHzの音波を出し、反響が戻るまでの時間を測ります。音は空気中を約343 m/sで進みます。distance = time × 0.0343 / 2の式で距離をセンチメートルに換算します(往復の時間なので2で割ります)。

測定できる最短距離と最長距離はどのくらいですか?▾

実用上の測定範囲は約2 cm〜400 cmです。2 cmより近い場合や遠すぎる場合、布やスポンジなど音を吸収する表面では、測定が不正確になったり0になったりすることがあります。

測定値がときどき0や非常に大きな値になるのはなぜですか?▾

反響が戻ってこないと、`pulseIn`はタイムアウトします。センサーが平らで硬い面に向いていることを確認し、測定の間隔を少なくとも60 ms空け、コードで異常値を除外してください。

ESP32でも使えますか?▾

HC-SR04は5 Vで動作し、ECHOピンから5 Vを出力します。ESP32のロジック電圧は3.3 Vなので、ECHO信号線に分圧回路(例:1 kΩ + 2 kΩ)を入れるか、3.3 V対応のHC-SR04Pを使ってください。