超音波距離センサーモジュールHC-SR04を使ってみました!
このセンサーで2~400cmの距離が非接触で測れます!
因みにイルカはこの原理を使って目隠ししても回りの状況を正確に把握しているそうです!
1. 音速とは?
対流圏における音速は大気温度によって図1の様に変化してしまう為、便宜上国際標準大気(対流圏:気圧101,3kpa、気温15℃、気温減率6.5K/km)における音速340m/sがマッハ1として使用されています。
※参考に水中の音速は1,500m/s、ベリリウム固体中の音速は12,890m/sです!
図1:音速の温度依存性及びその近似式
2. 超音波距離センサーとは?
超音波の反射を利用して対象物までの距離を測る測距センサーです。
イルカのエコーロケーションをフルハイビジョンTVだとすると、この超音波センサーはLED1球位の性能差が有りそうです。
2.1 測定原理
遠くの山に「ヤッホー!」と叫ぶと「ヤッホー!」と返ってくる様に、音は波の性質を持ち、物体に当たると反射して返って来ます。
対流圏中の音速は340m/sで有る事から、この「ヤッホー!」の音が往復するのに掛かった時間(T)を測る事で、物体迄の片道の距離(D)を以下の式で求める事が出来ます。
D(cm) = T(μS) × 1/2(片道) × 340(m/s) × 100(cm/m) × 1/1000000(μS/S)・・・式1
式1を纏めると、
片道の距離 D(cm) = 往復の時間 T(μS) ÷ 58.8(cm/μs)・・・式2
式2より「ヤッホー!」と叫んでから戻ってくる迄に掛かった時間をμS単位で測定し、それを58.8で割るだけで対象物迄の距離がcm単位で計算出来ます!
2.2 HC-SR04の仕様
HC-SR04の外観及び端子図は図1、仕様は表1の通りです。
このモジュールを使えば非接触で2~400cmの距離を3mmの精度で測距する事が出来ます。
図2:超音波距離センサーモジュール(HC-SR04)外観写真(左表、右裏)及び端子図
※実測寸法(幅・高さ・奥行):45.25×20.35×15.2mm(ピンヘッダは含まず)
項目 | 内容 |
電源電圧 | 5V |
待機電流 | 2mA未満 |
信号出力 | 0~5V |
センサ角度 | 15度以下 |
測定可能距離 | 2~400cm |
分解能 | 0.3cm |
端子間距離 | 2.54mm |
2.3 測距の流れ
HC-SR04に下記(1)~(5)の流れを行う事で1回測距出来ます。
(1)Trig端子を10 us以上Highにする
(2)モジュールが自動的にパルス(40kHzの信号を8回)を送信する
(3)モジュールが測定物から反射したパルス信号を受信する
(4)パルス信号の送信~受信までに掛かった時間分だけEcho端子がHighになる
(5)Echo端子がHighになった時間をμS単位で測定し式2から距離を計算する
※ビニール袋、クリアファイル、コピー用紙なども距離が測定出来るそうです。
3. 実験!
実際に「HC-SR04」を使って測距実験をしてみました!
3.1 接続
Trig端子をArduinoUNOのD8、Echo端子をD9にジャンパーピンで接続します。
また、図3の通り実際に繋げた状態を図4に示します。
図3:ArduinoUNOと測距センサーを繋げ方
図4:実際に繋げた状態
3.2 プログラム
2.3の「測距の流れ」をプログラムで書くと図5の通りです。
このプログラムを実行すると0.5秒間隔で図5の様に測定結果がcm単位でシリアルモニタ(図6)上に表示されます。
void setup() { Serial.begin( 9600 ); } void loop() { Serial.println( USread(8, 9)); delay(500); } float USread(int Trig, int Echo) { int Duration; float Distance; const unsigned int MAX_DIST = 23200; //400cm(23200μs/pulse)以上は測定範囲外 pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); Duration = pulseIn(Echo, HIGH); if (Duration > 0) { Distance = Duration / 58.8; } if (Duration > MAX_DIST) { return 400; } else { return Distance; } }
図5:プログラム例
図6:上記プログラム実行結果
3.3 測定
「HC-SR04」の基板面を距離0cmとして図7の様に箱をセンサー正面から5cmずつ5~35cm迄離して行きその時の距離を測定しました。
図7:センサーからケース迄の距離を5~35cmに変化させ、都度300回測定
※室温10℃・・・寒い
3.4 結果
測定距離を左縦軸に、実際の距離を横軸にし青線で図8の通りグラフ化しました。
参考に300回測定した各データについて標準偏差を求めた結果を赤線で示します。
図8:測定結果
※室温が標準大気温度の15℃より5℃低い為か測定された距離が若干低め(a=0.9662)に出てます。
4. まとめ
図8測定結果より、標準偏差が最大2.24mm、最小0.25mmでした。
統計において±2σ(標準偏差の4倍)の範囲に95%のデータが集まる事が分かっており、今回使用したHC-SR04の測定精度は5~35cmの範囲において、調子の悪い時は誤差±4.48mm位で、調子の良い時は±0.5mm位で有る事が分かりました
400cmは試していませんが5~35cmの範囲においては、距離に比例して誤差が増えることも無く、また誤差も十分に少なかったのでラジコンを自動運転する際の"目"として使えそうです!
励みになりますのでよければクリック下さい(^o^)/