【Arduino】 超音波距離センサ

LESSON 025

超音波距離センサで距離を測る。

  
 物体との距離を測るのに超音波や光等用いて測定します。今回は超音波距離センサのHC-SR04を実験します。
   
    
 HC-SR04は超音波の信号を出して、物体に跳ね返って来る信号を捉えてその時間から計算式にて距離を算出します。
    測距範囲:2~400cm  
   
   超音波とは
 
          • 周波数が20kHzより高い音を超音波といいます。
             人間の周波数の領域 20Hz〜20KHz
          • 超音波は指向性があります。
          • 音波は温度に影響します。
          • 「音」は、気体、液体、固体などを媒体としてその中を伝搬します。
            伝搬効率 気体<液体<固体
            空気   約340m/秒
                水中   約1,500m/秒
          • 真空中では伝わりません。

             と言うことは月面自動走行車には使えません。

  
○ HC-SR04は超音波を超音波をT (Transmitter)側のトランスミッターから発信し、障害物に超音波が跳ね返りR(Receiver)側で超音波を受信する。

① Trigを10ns以上ONにすると物体感知用の超音波の発信が可能になります。
② 次に40kHz 8サイクルの信号をトランスミッターから発信
③ 障害物に超音波が跳ね返りR(Receiver)側で受信
④ Echoは40kHz 8サイクルの信号を発信から受信までの往復時間を出力しまう。      

 
○ 距離の計算式は

  対象物までの距離Lは、​

  L=C×t/2    C:音速​
            t:発信から受信までの時間​

音速の値は

① 空気中の音速(15℃)は 約340m/s​
  
② 音速は、温度、気体等によって変化する。
   
        $\sqrt{(\frac{κRT}{M})}$
  
        比熱比 κ=1.403​
        気体定数 R=8.314462​
        絶対温度 T=273.15+t(K)​
        分子量 M=0.028966(kg/mol)
   

③ 高校の物理基礎では、​
​  
    C=331.5+0.6T

の方法があります。今回は①を使用します。
    ​ 

目 次

    • 構成部品
    • 配線図
    • スケッチ
    • 解説
    • 結果
    • まとめ
       
構成部品

Arduino​
USBケーブル​
ブレッドボード​
HC-SR04​(超音波距離センサ)​
ジャンパー線 

      
配線図   
  5V              ⇒ VCC 
  GPIO  4      ⇒ Trig
  GPIO  3     ⇒ Echo  
  GND           ⇒  GND
 
 
    
         
スケッチ《 test020》   
   
const int Trig = 4;
const int Echo = 3;
float timer = 0;
float Distance = 0;
void setup() {
Serial.begin( 9600 );
pinMode( Trig, OUTPUT );
pinMode( Echo, INPUT );
}
void loop() {
digitalWrite(Trig, LOW);
delayMicroseconds(10);
digitalWrite( Trig, HIGH );
delayMicroseconds( 10 );
digitalWrite( Trig, LOW );
timer = pulseIn( Echo, HIGH );
if (timer > 0) { 
Distance = 340*timer/2/10000;
Serial.print("Distance:");
Serial.print(Distance);
Serial.println(" cm");
}
delay(1000);
}

  
解説
型情報 変数 = 定数 ;​
 float timer = 0;​
 変数の宣言、変数の初期化
 
  • void setup()

    シリアル通信​
      シリアル通信の初期化​
      他のコンピュータやデバイスと通信​
      ArduinoIDEはシリアルモニタを備えている。​

    Serial.begin(speed)​
      シリアル通信のデータ転送レートをbpsで指定​

    Serial.print(data, format) ​
        ASCIIテキストでデータをシリアルポートへ出力(改行なし)​
        data: 出力する値。すべての型に対応​
        format: 基数または有効桁数(浮動小数点数の場合) ​

    Serial.println(data, format)​
      改行あり​

    シリアルモニタ起動
       

    シリアルモニタに計算結果をf表示  

  • void loop() 

  delayMicroseconds(us) ​
   プログラムを指定した時間だけ一時停止​
   単位はマイクロ秒​
  

  pulseIn(pin, value, timeout) ​

パルスの種類(value)をHIGHに指定した場合、pulseIn関数は入力がHIGHに変わると同時に時間の計測を始め、またLOWに戻ったら、そこまでの時間(パルスの長さ)をマイクロ秒単位で返す
value パルスの長さ(マイクロ秒)​
​  

       
  

まとめ

○ 超音波距離センサより出力された値を元に計算結果を表示した値は多少のバラツキがありました。

  マイコンボードのArduino Uno や Raspberry Pi などと超音波距離センサとモータを組み合わせるとぶつからない車が出来ます。
    
○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。

目次