Project 21.1 超音波測距モジュール/Ultrasonic Ranging

前回はLCDディスプレイに文字を表示してみました。

あわせて読みたい
Project 20.1 LCDディスプレイ/LCD1602 前回はステッピングモーターの制御について学びました。 https://kaneshige.org/?p=586 今回はLCDディスプレイに文字を表示してみましょう。 【I2C通信について】 I2C (...

今回は超音波モジュールを使用して距離を測定してみましょう。

目次

超音波測距モジュールについて

超音波測距モジュールは、超音波が障害物に当たると反射するという原理を利用しています。超音波の送受信の時間差を計測することで距離を測定することができます。この時間差は、超音波が送信されてから受信されるまでの往復の時間に相当します。空気中の音速はおよそv=340m/sと一定なので、超音波測距モジュールと障害物間の距離sは、s=vt/2で計算することができます。

HC-SR04超音波距離測定モジュールは、超音波送信機と受信機を内蔵しています。送信機は、電気信号(電気エネルギー)を人間には聞こえない高い周波数の音波(機械エネルギー)に変換し、受信機はこれとは反対の役割を果たします。HC-SR04超音波距離測定モジュールの外観と回路図は以下の通りです:

テクニカルスペック
動作電圧:5V
動作電流:12mA
最短計測距離:2cm
最長計測距離:200cm

Trig ピンに最低 10us(マイクロ秒)続くハイレベルのパルスを出力すると、モジュールは超音波の発信を開始します。同時に、Echo ピンはハイレベルに引き上げられます。モジュールが障害物に当たって反射した超音波を受信すると、Echo ピンはローレベルに引き下げられます。Echo ピンのハイレベルの継続時間は、超音波が送信されてから受信されるまでの往復の時間に相当し、s=vt/2 で計算できます。

回路図

接続図

コード

/**********************************************************************
  Filename    : Ultrasonic Ranging
  Description : Use the ultrasonic module to measure the distance.
  Auther      : www.freenove.com
  Modification: 2022/10/25
**********************************************************************/
#define trigPin 13 // define TrigPin
#define echoPin 14 // define EchoPin.
#define MAX_DISTANCE 700 // Maximum sensor distance is rated at 400-500cm.
//timeOut= 2*MAX_DISTANCE /100 /340 *1000000 = MAX_DISTANCE*58.8
float timeOut = MAX_DISTANCE * 60; 
int soundVelocity = 340; // define sound speed=340m/s

void setup() {
  pinMode(trigPin,OUTPUT);// set trigPin to output mode
  pinMode(echoPin,INPUT); // set echoPin to input mode
  Serial.begin(115200);   // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
  delay(100); // Wait 100ms between pings (about 20 pings/sec). 
  Serial.printf("Distance: ");
  Serial.print(getSonar()); // Send ping, get distance in cm and print result 
  Serial.println("cm");
}

float getSonar() {
  unsigned long pingTime;
  float distance;
  // make trigPin output high level lasting for 10μs to triger HC_SR04
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Wait HC-SR04 returning to the high level and measure out this waitting time
  pingTime = pulseIn(echoPin, HIGH, timeOut); 
  // calculate the distance according to the time
  distance = (float)pingTime * soundVelocity / 2 / 10000; 
  return distance; // return the distance value
}

setup()とメインループについては特に説明はいらないですね。
getSonar() は、超音波モジュールによる測定を開始し、測定された距離をcm単位で返すために使用されます。この関数では、まず trigPin に 10マイクロ秒のハイレベル信号を送信して超音波モジュールを起動します。するとechoPinはHIGHになります(ここがポイントです)。次に、pulseIn() を使用して超音波モジュールからの信号を読み取り、ハイレベル信号の継続時間(=LOWになるまでの時間)を返します。echoPinは反射波を受け取るとLOWにリセットされます。最後に、この時間に基づいて測定距離を計算します。

今回のコードでは音速(soundVelocity)を340m/sとして計算していますが、厳密には温度による変化があります。

音速=331.5+0.6T(℃)

次回は温度補正をして距離を計算してみましょう。

あわせて読みたい
Project 21.2 超音波測距モジュール温度補正版/Ultrasonic Ranging 前回は超音波測距モジュールを使用して距離を測定してみました。 https://kaneshige.org/?p=608 今回はライブラリを使用して温度補正できるようにしてみましょう。使用...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次