HC-SR04超音波距離センサ徹底解説:動作原理からArduino実装まで
超音波とは、人間の可聴域(20kHz)を超える高周波音波です。HC-SR04は約400cm先までの距離を非接触で測定できる低コスト・定番センサモジュール。本記事では動作原理、ピン配置、Arduinoとの接続・スケッチ例、注意点まで完全網羅します。
HC-SR04 概要と仕様
| 項目 | 仕様 |
|---|---|
| 動作電圧 | DC 5V |
| 動作電流 | 約15mA |
| 動作周波数 | 40kHz |
| 測定範囲 | 2cm 〜 400cm(実用2〜300cm) |
| 精度 | ±3mm |
| 測定角度 | 15°(指向角) |
| トリガパルス | 10μs以上のHighパルス |
| 寸法 | 45×20×15mm(メーカーにより微差あり) |
ピン配置(4ピン)
| Pin | 名称 | 機能 |
|---|---|---|
| 1 | VCC | 5V電源入力 |
| 2 | Trig (Trigger) | 測定開始トリガ入力(10μs High) |
| 3 | Echo | 測定結果出力(High幅=往路+復路時間) |
| 4 | GND | グランド |
動作原理:飛行時間(Time-of-Flight)測定
- Trigピンに10μs以上のHighパルスを入力
- 内部で8サイクルの40kHz超音波バーストを送信
- EchoピンがHighになる(送信完了時点)
- 物体で反射した超音波を受信するとEchoがLowに戻る
- Echo High継続時間 = 音波の往復時間
距離計算式
距離(cm) = (音速 34000 cm/s × Echo High時間 μs) / 2 ÷ 1,000,000
簡易式:距離(cm) ≈ Echo時間(μs) × 0.017 または 距離(cm) = Echo時間(μs) / 58
例:Echo High = 1,500μs → 距離 = 1500 × 0.017 = 25.5cm
タイムアウト処理
物体がない場合、約38ms(約6.5m相当)でEchoが自動的にLowになります。スケッチ側でタイムアウト判定を入れると安全です。
Arduino UNOとの接続・プログラミング
配線図
| Arduino | HC-SR04 |
|---|---|
| 5V | VCC |
| GND | GND |
| D2 | Trig |
| D3 | Echo |
スケッチ例(ライブラリ不要・標準関数のみ)
const uint8_t TRIG_PIN = 2;
const uint8_t ECHO_PIN = 3;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(115200);
}
void loop() {
// トリガパルス生成
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Echoパルス幅測定(タイムアウト30ms設定)
unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000);
if (duration == 0) {
Serial.println("Out of range / Timeout");
} else {
float distance_cm = duration * 0.017f; // または duration / 58.0
Serial.print("Distance: ");
Serial.print(distance_cm, 1);
Serial.println(" cm");
}
delay(100); // 測定間隔
}
コード解説ポイント
pulseIn(pin, HIGH, timeout):Highパルス幅をμs単位で取得。第3引数でタイムアウト指定可能- 音速340m/s = 34000cm/s = 0.034cm/μs。往復なので÷2 → 0.017cm/μs
- 測定間隔は60ms以上空ける(前回の残響消失待ち)
寸法図
既知の制限・注意点
- 柔らかい/吸音材質(ぬいぐるみ、カーテン等):反射弱く検出不可
- 床面近くに取付:床反射で誤検知。センサを上向き/傾斜設置で回避
- 小さな物体・薄い物体:反射面積不足で検出漏れ
- 浅い入射角:鏡面反射で受信機に戻らない
- 400cm超:信号減衰で検出不可
- 複数センサ同時使用:相互干渉あり。時分割駆動が必要
- 3.3V MCU接続時:Echo出力5Vレベル→レベルシフト或いは分圧必要
応用例
- ロボット障害物回避・壁追従
- 液面/残量レベル検出
- 駐車場空き検知・バックソナー
- 非接触スイッチ・ジェスチャ検出
- ドローン高度保持(地面追従)
結論
HC-SR04は安価・低消費・扱いやすく、2cm〜4mの距離測定に最適なエントリーセンサです。Arduinoとの相性も良く、pulseIn関数だけで簡単に実装できます。上記の制限を理解し、用途に合わせてフィルタリング(移動平均/メディアン)や複数センサ融合を施せば、実用レベルのシステム構築が可能です。ご質問はお気軽にお問い合わせください。
産業技術
- コンパクトなArduinoレーダーシステム – HC-SR04超音波センサー & 1.8インチST7735ディスプレイ搭載
- Arduino UNOとSR04超音波センサーで作る距離測定器 – 入門ガイド
- Arduino HC-SR04 超音波距離センサー 完全チュートリアル
- PIRモーションセンサー: 動作原理とArduino連携ガイド
- コンデンサの仕組み:エネルギー蓄積の原理と現代エレクトロニクスでの役割
- 3Dプリンティング完全ガイド:種類、プロセス、仕組み、材料、活用事例
- アーク溶接完全ガイド:種類・仕組み・メリット・デメリット
- ベベルプロトラクター:精密角度測定の原理、構造、用途
- CNCボーリングミルを理解する:仕組みと主なメリット
- クラウドコンピューティングを理解する:仕組みと重要性
- 超音波洗浄機があらゆる産業を変革する仕組み