部品 · 読了まで3分

HC-SR04距離センサー:Arduinoで超音波を使って距離を測る

HC-SR04超音波距離センサーはどう動き、Arduinoにどうつなぐのか。TRIGピンとECHOピン、距離の計算式、ESP32やPicoへの配線、精度を上げるコツを解説します。

HC-SR04は、前にある物体までの距離を音で測る、安くてとても普及しているセンサーです。コウモリが進む方向を見つけるのと同じしくみで、人には聞こえない高い周波数の音を出し、反響が戻ってくるまでの時間を測ります。駐車センサー、障害物をよけるロボット、タンクの水位計、身長計などの基本になっています。

HC-SR04
HC-SR04:送信用と受信用の2つの超音波トランスデューサーと、4本のピン(VCC、TRIG、ECHO、GND)。

HC-SR04はどう動く?

  1. ArduinoがTRIGピンに10マイクロ秒のパルスを送ります。
  2. センサーが40 kHzの音のパルスを8回出します。
  3. 音が物体に当たって戻ってきます。その間、ECHOピンはHIGHのままです。
  4. ArduinoはECHOがHIGHになっている時間を測り、距離を計算します。

音は空気中を約343 m/sで進むので、1センチメートル進むのに約29マイクロ秒かかります。測った時間は行きと帰りの合計なので、2で割ります:距離(cm)= 時間(µs)× 0.0343 / 2、簡単にいえば時間 / 58です。

仕様

項目値
電源5 V、約15 mA
測定範囲2〜400 cm
分解能約3 mm
測定角度約15°
ピンVCC、TRIG、ECHO、GND

Arduinoで距離を測る

VCCを5Vに、GNDをGNDに、TRIGを9番ピンに、ECHOを10番ピンにつなぎます。下のコードは距離をシリアルモニタに表示し、物体がないときや遠すぎるときはそのことを別に知らせます。

C++ (Arduino IDE)
1const int TRIG_PIN = 9;    // tetik / trigger
2const int ECHO_PIN = 10;   // yankı / echo
3
4void setup() {
5  pinMode(TRIG_PIN, OUTPUT);
6  pinMode(ECHO_PIN, INPUT);
7  Serial.begin(9600);
8}
9
10void loop() {
11  digitalWrite(TRIG_PIN, LOW);
12  delayMicroseconds(2);
13  digitalWrite(TRIG_PIN, HIGH);      // 10 µs darbe / 10 µs pulse
14  delayMicroseconds(10);
15  digitalWrite(TRIG_PIN, LOW);
16
17  long duration = pulseIn(ECHO_PIN, HIGH, 30000); // en fazla 30 ms bekle / wait max 30 ms
18  if (duration == 0) {
19    Serial.println("Menzil dışı / out of range");
20  } else {
21    float cm = duration * 0.0343 / 2;   // gidiş-dönüş / round trip
22    Serial.print(cm);
23    Serial.println(" cm");
24  }
25  delay(100);                          // ölçümler arası / between readings
26}
pulseInに指定している30,000 µsのタイムアウトは、約5メートルに相当します。タイムアウトがないと、物体がないときにコードが最大1秒待ってしまうことがあります。

ESP32やRaspberry Pi Picoで使う

HC-SR04のECHOピンは5 Vを出力しますが、ESP32とPicoのピンは3.3 Vです。ECHOを直接つながないでください。1 kΩと2 kΩの抵抗で分圧回路を作るか、3.3 Vで動作するHC-SR04P版を使いましょう。

正確に測るためのコツ

  • 柔らかい面や斜めの面:布、スポンジ、斜めの面は音をうまく反射しないため、測定できないことがあります。
  • 平均を取る:3〜5回の測定の中央値を使うと、急な飛び値を取り除けます。
  • 温度の影響:音速は1 °Cあたり約0.6 m/s変わります。精密な用途では、温度センサーで補正してください。
  • 複数のセンサー:同時にトリガーしたセンサーはお互いの反響を拾ってしまいます。1つずつ順番にトリガーしてください。
  • 測定間隔:前の反響が消えるように、測定の間は少なくとも60 ms空けてください。

センサーとブザーを組み合わせて駐車センサーを作るならブザーとは?を、ほかのセンサーについて知りたいならArduinoセンサーガイドを読んでみてください。

よくある質問

HC-SR04はどのくらいの距離まで測れますか?

理論上は4メートルまでです。実際には、平らで硬い面なら2〜3メートルまで信頼できる結果が得られます。

HC-SR04がいつも0やとても大きな値を表示するのはなぜですか?

TRIGとECHOが逆になっている、物体が範囲外にある、センサーが音を反射しない面を向いている、といった可能性があります。配線を確認し、pulseInでタイムアウトを使ってください。

HC-SR04で水位を測れますか?

はい。タンクのふたに下向きに取り付けて、水面までの距離を測ります。湿気の多い環境では保護が必要なので、防水のJSN-SR04Tのほうが適しています。

Arduino用の距離センサーにはほかに何がありますか?

短い距離やライン検出には赤外線のTCRT5000、ミリ単位の精度にはレーザー方式のVL53L0Xが使われます。HC-SR04は価格と測定範囲のバランスがよく、いちばん普及しています。

全プロジェクトを見る
HC-SR04で距離を測定(シリアルモニタ表示)
#27初級

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

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

4.6(46)
71
HC-SR04で作る駐車センサー
#28中級
プレミアム

HC-SR04で作る駐車センサー

車の駐車センサーを小さく再現します。物体が近づくほど、ビープ音の間隔が短くなります。距離センサーが前方の物体までの距離を測り、20センチメートルより遠ければ緑のLEDが点灯します。近づくと赤いLEDが点滅してブザーが鳴り、さらに近づくほど警告の間隔が短くなります。車が壁にぶつからずに駐車できる仕組みを、机の上で確かめられます。

4.8(64)
85
LCDディスプレイを使った距離測定
#31上級
プレミアム

LCDディスプレイを使った距離測定

定規を使わずに距離を測る装置です。センサーの前で手を近づけたり遠ざけたりすると、数値が変わります。HC-SR04が音波を出して反響を捉え、Arduinoが距離をセンチメートル単位で計算し、2行のLCDディスプレイに1秒間に数回表示します。車の駐車センサーの仕組みを、机の上で確かめられます。

4.6(45)
59
身長測定プロジェクト
#33中級
プレミアム

身長測定プロジェクト

ドア枠に取り付けて、下に立った人の身長をセンチメートルで表示する身長計です。まず、下に誰もいない状態で1つ目のボタンを押し、距離センサーで床までの距離を測ります。次に、人が下に立って2つ目のボタンを押すと、Arduinoが2つの測定値の差を計算し、身長をディスプレイに表示します。病院にある身長計の電子版を自分で作れます。

4.5(25)
34
障害物回避ロボット
#81上級
プレミアム

障害物回避ロボット

自分で進む道を見つける、賢い車を作ってみませんか?障害物回避ロボットは、前面の超音波センサーで周囲を常に調べます。障害物を見つけると停止し、サーボモーターで左右を確認して、最も障害物の少ない方向を選んで進みます。自動運転の基礎を学ぶのにぴったりの入門プロジェクトです。

5.0(38)
49
ESP32とHC-SR04で作る超音波距離計
#116中級

ESP32とHC-SR04で作る超音波距離計

HC-SR04超音波センサーは、発した音波が物体に反射して戻るまでの時間(Time of Flight)を測定して距離を計算します。このプロジェクトでは、ESP32からセンサーのTRIGピンに10マイクロ秒のパルスを送り、ECHOピンからの反射波の持続時間をpulseIn()で読み取ります。計算した距離をcm単位で16x2 I2C LCDに表示します。HC-SR04は5Vで動作するため、ECHOピンには分圧回路が必須です。分圧しないとESP32の3.3V GPIOが破損します。

4.9(28)
45
ESP32の礼拝ラカア数カウンター(HC-SR04 + SSD1306 OLED + ボタン2個)
#136上級
プレミアム

ESP32の礼拝ラカア数カウンター(HC-SR04 + SSD1306 OLED + ボタン2個)

礼拝中に何ラカア行ったか忘れてしまうことはありませんか?このプロジェクトでは、礼拝マットの横に置き、手を近づけると平伏の回数を数えるラカア数カウンターを作ります。HC-SR04超音波距離センサーで手の接近を検知し、SSD1306 OLEDディスプレイにラカア数を表示します。2個のボタンで2・3・4ラカアの選択とリセットができます。状態遷移による制御に2.5秒のデバウンス処理と手が離れたことを確認するアルゴリズムを組み合わせ、誤検知を防ぎます。同じ平伏を2回数えることはありません。

4.8(11)
14
ESP32駐車センサー(HC-SR04 + 5連LEDバー + ブザー + OLED)
#142上級
プレミアム

ESP32駐車センサー(HC-SR04 + 5連LEDバー + ブザー + OLED)

車の駐車センサーをESP32で作ります!HC-SR04超音波センサーで前方の物体までの距離を測ります。距離が縮まるほど5連LEDバーが緑 → 黄 → 赤の順に点灯し、ブザーの鳴る間隔が短くなります。10 cm未満まで近づくとアラームが鳴り続け、すべてのLEDが点灯します。SSD1306 OLEDには現在の距離をcm単位の大きな文字で表示し、状態メッセージ(落ち着いて / 注意 / 接近 / 停止! / 危険)とLEDバーのシミュレーションも表示します。HC-SR04のpulseIn、複数のデジタル出力、ブザーを学べる定番のプロジェクトです。

0.0(0)
14