Menu
CoddyTech

超音波のエコー時間

CoddyのArduinoジャーニー「ディスプレイとセンサー」セクションの一部。レッスン 18/24。

HC-SR04はコウモリのように距離を測ります。私たちには聞こえないほど高い音のクリック音を発し、その反響が戻ってくるまでの時間を測ります。物体が遠いほど、反響が戻るまでの時間は長くなります。

信号ピンが2つあります。TRIGに短いHIGHパルスを送ると、クリック音を発します。するとECHOがHIGHになり、反響が戻ってくるまでHIGHの状態を保ちます。そのため、このHIGHパルスの長さが音の伝わった時間になります。

delayMicroseconds()は100万分の1秒単位で待機するため、10マイクロ秒のトリガーパルスに十分な短さで待機できます。pulseIn(pin, HIGH)はピンがHIGHになるまで待機し、HIGHの状態が続いたマイクロ秒数を返します。1秒以内にパルスが来なければ、待機をあきらめて0を返します。

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);     // トリガーパルス
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);

反響は最大38000マイクロ秒続くことがあり、intで保持できる値を超えるため、longに格納しましょう。

challenge icon

チャレンジ

中級

TRIGはピン9、ECHOはピン10に接続されています。loop()内では:

  • TRIGに10マイクロ秒のHIGHパルスを送信する
  • pulseIn(echoPin, HIGH)でエコーを測定する
  • Serial.println()で時間を出力する

Runを押し、ボード上で物体を近づけたり遠ざけたりしてから、Checkを押してください。

自分で試してみよう

const int trigPin = 9;
const int echoPin = 10;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  // TRIGに10マイクロ秒のパルスを送る
  // pulseIn()でエコーの時間を測定して表示する
  delay(200);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ディスプレイとセンサーのすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド