超音波センサー HC-SR04

超音波センサー HC-SR04

超音波センサーとは

超音波センサー HC-SR04 は、2つの目のうち片方の目(T:Transmit)から超音波を発して、もう片方の目(R:Receive)で反射した超音波を受信して、その時間差で障害物までの距離を測定するセンサーです。

●測距範囲:2~400cm
●精度:分解能 0.3cm
●電源電圧:DC5V
●動作周波数:40kH

空気中の音の速さは、秒速 331.5 + 0.6 × 気温(℃) m/s で求めることができるので、例えば気温が摂氏 20℃ のとき、音速は

331.5 + 0.6 × 20 = 343.5 m/s

となります。この時、超音波信号を出力して、反射波を受信するまでにかかる時間が 0.001 秒だったとすると、障害物までの距離は

343.5 x 0.001 / 2 = 0.17175 m

となり、17.175cm であると求められます。(2で割っているのは障害物までの往復の距離を計算するためです)

4本の端子は、

●Vcc:5V電源入力
●Trig:超音波出力用の信号を送信
●Echo:超音波入力用の信号を受信
●Gnd:グランド

にそれぞれ接続します。

回路を作る

マイコンボードと超音波センサーを接続します。

サンプルスケッチ

サンプルスケッチを以下からダウンロードして、ZIPファイルを開きます。

HCSR1.ino

#define echoPin 6 //定数echoPinを6に設定
#define trigPin 8 //定数tgigPinを8に設定
float duration, distance; //変数duration/distanceを少数と設定

void setup() {
  
  Serial.begin (9600); //9600bpsで通信開始
  pinMode(trigPin, OUTPUT); //trigPin(6番ピン)を出力に設定
  pinMode(echoPin, INPUT); //echoPin(8番ピン)を入力に設定
}

void loop() {
  
  digitalWrite(trigPin, LOW); //trigPinをオフにする
  delayMicroseconds(2); //2マイクロ秒待つ
 
  digitalWrite(trigPin, HIGH); //trigPinをオンにして超音波発信
  delayMicroseconds(10); //10ミリ秒待つ
  digitalWrite(trigPin, LOW); //trigPinをオフにする
    
  duration = pulseIn(echoPin, HIGH); //echoPinにパルスが入力するまでの時間
  distance = (duration / 2) * 0.0344; //入力時間を2で割って音速を掛けて距離を算定
  
  if (distance >= 400 || distance <= 2){ //算定距離が2cm以下または400cm以上の場合
    Serial.println("Out of range"); //「測定不能」と表示
  }
  else { //測定距離範囲内の場合
    Serial.print(distance); //算定距離を表示
    Serial.println(" cm"); //「cm」と表示
    delay(500); //0.5秒待つ
  }
  delay(500); //0.5秒待つ
}

スケッチ内の関数等について

●#define 定数名 値 : 定数名を値として定義(以下のコードでは定数名に値が代入される)

●Serial.begin (値) : シリアル通信のデータ転送レートをbpsで指定(シリアルモニタで確認できる)

●pulseIn (ピン番号, 値) : 指定したピン番号に入力されるパルス(HIGH または LOW)の時間をマイクロ秒で測定

●Serial.println (値) : 値をシリアルポートに出力(シリアルモニタで確認できる)

距離を測定する

マイコンボードとパソコンをUSBケーブルで接続して書き込み

シリアルモニタを起動し、センサー前で手を前後させて距離を測定