Arduino(16) 超音波センサーによる距離の測定
アマゾンで購入した音波センサーHC-SR04を使って距離の測定を行いました。
概要
超音波は、音響振動の一種で、人間の耳では聞こえない周波数の音波のことです。身近なもので言えばコウモリやイルカなどが、超音波を自ら発生し、その反射波を聞き分けることが出来ます。通常人間は約 20Hz~20kHz の周波数の音波は聞くことができ、これを可聴周波数といいますが、範囲以外の音は聞くことができません。(年齢を重ねてくると、20kHzの音なんて全く聞こえません。)人間の耳には聞こえない 20Hz 以下の音の事を低周波音波といい 20kHz 以上の音の事を超音波といいます。
超音波は、空気などの音を伝える媒体の、密度の濃淡として伝わるもので疎密波といわれています。このため特性は、媒体の性質により大きく左右されます。音波の伝わる速さは媒体によって決まり、周波数にはあまり影響されませんが、温度には影響されるのでそれを考慮しなければなりません。一般に超音波の伝播速度は速度を V[m/s]とすると
V=331.5+0.60714×t
と表されます。この時の t は摂氏温度[℃]です。
超音波センサとは、その名の通り、超音波を発して、対象物に反射して超音波が返ってくるまでの時間を計測します。この時間が計測できれば、速さがわかっているわけですから、距離が計算できることになります。
回路図
スケッチ
int TRIG = 3; int ECHO = 2; double duration = 0; double distance = 0; double speed_of_sound = 331.5 + 0.6 * 15; // 15℃の気温の想定 void setup() { Serial.begin( 9600 ); pinMode(ECHO, INPUT ); pinMode(TRIG, OUTPUT ); } void loop() { digitalWrite(TRIG, LOW); delayMicroseconds(2); digitalWrite( TRIG, HIGH ); delayMicroseconds( 10 ); digitalWrite( TRIG, LOW ); duration = pulseIn( ECHO, HIGH ); // 往復にかかった時間[マイクロ秒] if (duration > 0) { duration = duration / 2; // 往路にかかった時間 distance = duration * speed_of_sound * 100 / 1000000; Serial.print("Distance:"); Serial.print(distance); Serial.println(" cm"); } } delay(1000); }
結果
これだけの回路で距離が測れるなんて、感動ものです。