超音波のエコー時間
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に格納しましょう。
チャレンジ
中級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);
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ディスプレイとセンサーのすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド