[ESP32]HY-SRF05(超音波距離センサー)

ESP32

HY-SRF05(超音波距離センサー)

はじめに

HY-SRF05とは、超音波の反射時間を利用して非接触で測距するモジュールです。
片方から超音波パルスを送信し、もう一方で受信するまでの時間を計算し、距離を計測します。
障害物の検知や、短距離でも距離測定に使用されます。

5Vで動作し、2cm~450cmを測定できます。
HY-SRF04とほぼ同じ性能ですが、若干精度が良くなっているようです。

Datasheet
(https://datasheetspdf.com/pdf-down/H/Y/-/HY-SRF05-ETC.pdf)

開発環境

OS : Windows 11 Pro
ESP32:ESP-WROOM-32
統合開発環境 : Arduino IDE 2.3.2
Arduino core for the ESP32:1.0.6
使用ライブラリ:なし

使用パーツ

ESP32開発ボード(38Pin)

電子工作ステーション https://electronicwork.shop/items/64134541d91711003035a5a6

超音波距離センサー (HY-SRF05)

電子工作ステーション https://electronicwork.shop/items/649bedc1675488002ff8f075

ジャンパーワイヤー(メスーメス)

電子工作ステーション https://electronicwork.shop/items/637f92415988dc5175f8a9ec

作業内容

配線図

HY-SRF05 とは Echoピンに GPIO 16、Trigピンに GPIO 17 を接続します。
OUTピンは使用しません。

HY-SRF05ESP32開発ボード(38Pin)
Vcc5V
Trig GPIO 17
EchoGPIO 16
OUT
GNDGND

ライブラリインストール

なし。

スケッチ作成

距離を計測するスケッチを作成します。

#include <Dusk2Dawn.h>

#define ECHO_PIN 16 // attach pin D2 Arduino to pin Echo of JSN-SR04T
#define TRIG_PIN 17 //attach pin D3 Arduino to pin Trig of JSN-SR04T

void setup()
{
  Serial.begin(115200);
  pinMode(TRIG_PIN, OUTPUT); // Sets the TRIG_PIN as an OUTPUT
  pinMode(ECHO_PIN, INPUT); // Sets the ECHO_PIN as an INPUT
}

void loop()
{
  delay(1000);

  long duration; // variable for the duration of sound wave travel
  int distance; // variable for the distance measurement

  // Clears the TRIG_PIN condition
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  // Sets the TRIG_PIN HIGH (ACTIVE) for 10 microseconds
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  // Reads the ECHO_PIN, returns the sound wave travel time in microseconds
  duration = pulseIn(ECHO_PIN, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
  // Displays the distance on the Serial Monitor
  Serial.println("Distance: " + String(distance) + " cm");
}

TRIGGERピンのLOW/HIGHを操作することにより超音波が発生し、超音波が跳ね返ってくる時間をECHOピンの出力により取得します。

①Trigger クリア(LOW)

②Trigger を10us間 HIGH

③Trigger LOW

④Echo HIGH の時間を計測

コード説明
#define ECHO_PIN 16 // attach pin D2 Arduino to pin Echo of JSN-SR04T
#define TRIG_PIN 17 //attach pin D3 Arduino to pin Trig of JSN-SR04T

ECHO_PIN を16、TRIG_PIN を17 に設定

  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);

①Trigger クリア(LOW)
念のためクリア後 2us 待機

  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);

②Trigger を10us間 HIGH

  digitalWrite(TRIG_PIN, LOW);

③Trigger LOW

  duration = pulseIn(ECHO_PIN, HIGH);

④Echo HIGH の時間を計測
ミリ秒(msec)で取得。

Echo の HIGH 時間から距離を計算します。

  distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)

超音波の速度は音速と同じであり、340m/sec です。
よって、「計測時間(msec)×340(m/sec)/100/100」により、距離(cm)を求めることができます。
そして、これは往復時間のため片道の距離は「/2で求めることができます。

動作確認

動作させてみると、シリアルモニタに取得した値が表示されます。

センサーの突き出している先からの距離になります。ちょうど10cmで計測できました。
2,3mでもおおよそ正確に計測できていると思います。

おわりに

なかなか面白いですね。センサーがあるとESP32できることが広がります。
単純に距離を計測することにも使用できますが、接近検知でも使用できます。
最近の車に取り付けられているクリアランスソナーも同じ超音波距離センサーによって検知していますね。

コメント

タイトルとURLをコピーしました