この記事では、Arduinoと超音波距離センサ(HC-SR04)で対象物までの距離を測定する方法をソースコード付きで解説します。
超音波距離センサ(HC-SR04)
超音波距離センサ(HC-SR04)は、超音波を用いた距離センサーです。
このセンサーは、2~450cmまでの範囲内にある対象物までの距離を測定できます。
アマゾンで200円で入手できました。
出力した超音波が対象物に跳ね返って戻ってくるまでの時間と音速(超音波の速度)から距離を求めます。
【計算式】
(対象物までの距離)=(音速)×(出力してから戻ってくるまでの時間÷2)
(対象物までの距離)=(音速)×(出力してから戻ってくるまでの時間÷2)
今回は、これをArduinoで使ってみました。
回路構成
赤:5V、黒:GND、黄:8番ピン、緑:9番ピン
| 部品名 | 個数 |
|---|---|
| Arduino UNO | 1個 |
| 超音波距離センサ(HC-SR04) | 1個 |
| ブレッドボード | 1個 |
| ジャンパーワイヤ | 数本 |
HC-SR04の仕様
| 仕様 | 内容 |
|---|---|
| 電源電圧 | 5V |
| 待機電流 | 2mA未満 |
| 信号出力 | 0-5V |
| センサ角度 | 15度以下 |
| 測定可能距離 | 2cm-450cm |
| 分解能 | 0.3cm |
HC-SR04の端子
超音波センサの4本の端子の構成は以下の通りです。
(本体にもラベルが刻まれています)
| ラベル | 内容 |
|---|---|
| Vcc | 電源入力(5V) |
| Trig | 超音波信号を送信 |
| Echo | 超音波信号を受信 |
| GND | グランド |
処理手順
| – | 説明 |
|---|---|
| ① | 出力ピン(8)で超音波を出力します。(トリガ端子を10μs以上Highにすると40kHzのパルスを8回送信) |
| ② | 入力ピン(9)で超音波を受信します。(エコー端子がHIGHになってからLOWに変化するまでの時間=超音波が送信されてから受信するまでの時間[μs]を計測) |
| ③ | 以下の式で時間から距離を求めます。 |
【計算式】
距離[cm] = (0.034) × (②で求めた時間[μs]÷2)
距離[cm] = (0.034) × (②で求めた時間[μs]÷2)
※音速=340[m/s] = 34000[cm/s] = 0.034[cm/μs]
ソースコード
サンプルプログラムのソースコードです。
int trig = 8; // 出力ピン
int echo = 9; // 入力ピン
void setup() {
Serial.begin(9600);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
}
void loop() {
// 超音波の出力終了
digitalWrite(trig,LOW);
delayMicroseconds(1);
// 超音波を出力
digitalWrite(trig,HIGH);
delayMicroseconds(11);
// 超音波を出力終了
digitalWrite(trig,LOW);
// 出力した超音波が返って来る時間を計測
int t = pulseIn(echo,HIGH);
// 計測した時間と音速から反射物までの距離を計算
float distance = t*0.017;
// 計算結果をシリアル通信で出力
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
【参考】pulseIn関数の使い方
実行結果
サンプルプログラムの実行結果です。
シリアルモニター
19.21 cm 19.14 cm 18.76 cm 18.73 cm
今回は音速を340[m/s]に固定して計算しています。
音速は気温などにも影響されるので、計測精度を上げるにはこれらの影響を考慮する必要があります。
気温を考慮した場合については下記事で解説しています。

【Arduino】超音波距離センサ(HC-SR04)の測定精度を向上(気温考慮)
この記事では、Arduinoと超音波距離センサ(HC-SR04)で対象物までの距離を気温を考慮して測定する方法をソースコード付きで解説します。

【ArduinoでIoT入門】基本的な使い方から応用例まで解説
Arduinoで電子工作する方法やサンプルプログラム(ソースコード)を入門者向けに解説しています。
コメント