7.超音波距離センサーの使い方

2020年6月1日

超音波距離センサーとは

クムクムロボットでは、HC-SR04という距離センサーを使用しています。
このセンサーは、センサーのTRIGピンに対してパルス(10μ秒)を与えると、40kHzの超音波を発生させて、その後センサーのECHOピンより8個のパルスを返します。
この8個のパルスを受信した時間の長さから障害物までの距離を計算で求めることになります。

計算式

距離=331.5 + 0.6 t (m/sec) tは摂氏温度

接続と関数

Arduinoとしてのポート センサー
D13 TRIGGER
A3 ECHO
+5V +5V
GND GND

 

プログラム

Arduinoにシリアルモニターを起動すると計測した距離を表示します。

#define Trig 13
#define Echo A3
int Duration;
float Distance;

void setup() {
    Serial.begin(9600);
    while (!Serial) { ; } //Leonardoの場合にはこの部分が必要
    pinMode(Trig,OUTPUT);
    pinMode(Echo,INPUT);
}

void loop() {
    digitalWrite(Trig,LOW); //まずLowにする
    delayMicroseconds(1); //1μ秒まつ
    digitalWrite(Trig,HIGH); //トリガー信号をあげる
    delayMicroseconds(11); //10μ秒だが念のため11μ秒HIGHを出す
    digitalWrite(Trig,LOW); //信号を落とす
    Duration = pulseIn(Echo,HIGH);//パルスがHIGHの間の時間を測る
    if (Duration>0) {
    //パルスの秒から距離を計算する
        Distance = Duration/2;
        Distance = Distance*340*100/1000000;
        Serial.println(Distance);//シリアルに書き出してみる
    }
    delay(1000);
}

pulseIn(pin, value, timeout)

引数[pin]からパルスがvalue(HIGHもしくはLOW)の間のパルスを読み取る。
例えばvalueをHIGHとして家いた場合、pulseIn()は、ピンがLOWからHIGHになるのを待ち、時間計測を開始します。そして、[pin]がLOWになるとそれまでの時間時間を関数の戻り値として返します。timeout時間内にパルスが開始されないとタイムアウトし、0を戻します。

引数 [pin]uint8_t
[value]uint8_t state
[timeout]unsigned long
パルスを受け取るピン番号
HIGH  または LOW
タイムアウト時間(マイクロ秒)デフォルト1μ秒
戻り値 unsigned long パルスが発生していた時間(マイクロ秒)
タイムアウトが発生した時は0

シリアルモニター

Arduinoには、プログラミング中にデータがどのようになっているかを知るための方法として、SerialMonitorという方法があります。
上のプログラムでも計測した距離をSerialで表示しているコードがあります。

Serial.println(Distance)

この命令は計算した Distance値をモニター画面に表示してくれます。
printlnはデータを表示した後に自動改行をする関数で、開業したくない場合は printを使用します。