[ESP32]超音波距離センサー(AJ-SR04M) with Arduino IDE

ESP32
スポンサーリンク

超音波距離センサー(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)

\ポイント最大11倍!/
楽天市場
\ポイント最大24.5%還元!/
Yahooショッピング
\管理人おすすめ!/
Aliexpress

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

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

作業内容

配線図

AJ-SR04M とは Echoピンに GPIO 16、Trigピンに GPIO 17 を接続します。

AJ-SR04MESP32開発ボード(38Pin)
Vcc5V
Trig GPIO 17
EchoGPIO 16
GNDGND

ライブラリインストール

なし。

スケッチ作成

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

#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(超音波距離センサー)は、防水加工されているので、水がかかる恐れのあるところで使用ができます。
最近の車に取り付けられているクリアランスソナーと同じ形をしており、おなじく超音波距離センサーによって検知しています。

コメント

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