超音波距離センサー(AJ-SR04M)with Arduino IDE
はじめに
AJ-SR04Mとは、超音波の反射時間を利用して非接触で測距するモジュールです。
超音波パルスを送信し、受信するまでの時間を計算し、距離を計測します。
防水仕様のため、水がかかる可能性がある場所でも使用できます。
3-5.5Vで動作し、20cm~800cmを測定できます。
HY-SRF05に比べて、最小距離と最大距離が大きくなります。

Datasheet
(https://manuals.plus/m/4f3549b5e4ee5c38ece4f1568cabf9447d5f667b07a22233d50c6c45a6bbcbf0_optim.pdf)
開発環境
OS : Windows 11 Pro
ESP32:ESP-WROOM-32
統合開発環境 : Arduino IDE 2.3.2
Arduino core for the ESP32:1.0.6
使用ライブラリ:なし
使用パーツ
ESP32開発ボード(38Pin)

超音波距離センサー (AJ-SR04M)

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

作業内容
配線図
AJ-SR04M とは Echoピンに GPIO 16、Trigピンに GPIO 17 を接続します。

AJ-SR04M | ESP32開発ボード(38Pin) |
Vcc | 5V |
Trig | GPIO 17 |
Echo | GPIO 16 |
GND | GND |
ライブラリインストール
なし。
スケッチ作成
距離を計測するスケッチを作成します。
#define ECHO_PIN 16 // attach pin 16 esp32 to pin Echo of AJ-SR04M
#define TRIG_PIN 17 // attach pin 17 esp32 to pin Trig of AJ-SR04M
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 16 esp32 to pin Echo of AJ-SR04M
#define TRIG_PIN 17 // attach pin 17 esp32 to pin Trig of AJ-SR04M
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」で求めることができます。
動作確認
動作させてみると、シリアルモニタに取得した値が表示されます。


超音波距離センサーから30cmの距離にエアコンのリモコンを配置すると、ちょうど30cmを読み取ることができました。
おわりに
AJ-SR04M(超音波距離センサー)は、防水加工されているので、水がかかる恐れのあるところで使用ができます。
最近の車に取り付けられているクリアランスソナーと同じ形をしており、おなじく超音波距離センサーによって検知しています。
コメント