HY-SRF05(超音波距離センサー) with Arduino IDE
はじめに
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-SRF05 | ESP32開発ボード(38Pin) |
Vcc | 5V |
Trig | GPIO 17 |
Echo | GPIO 16 |
OUT | – |
GND | GND |
ライブラリインストール
なし。
スケッチ作成
距離を計測するスケッチを作成します。
#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できることが広がります。
単純に距離を計測することにも使用できますが、接近検知でも使用できます。
最近の車に取り付けられているクリアランスソナーも同じ超音波距離センサーによって検知していますね。
コメント