![見出し画像](https://assets.st-note.com/production/uploads/images/169268274/rectangle_large_type_2_3d86e6c1c88f5f630ad7f406df3605c5.jpeg?width=1200)
【ESP32プログラム】超音波距離センサ
前回作成したラジコンカーなどを自動走行させたりする場合に、障害物を検知するのに役に立つのが超音波距離センサです。安価で入手できるわりには、そこそこの精度で距離を検出できますし、簡単に使うことができます。
結線図
図1に結線図を示します。電源とGNDを接続したら、あとは超音波を発信するTRIGER信号(出力)と反射した超音波を検出するECHO信号(入力)をそれぞれGPIO32とGPIO34に接続します。
![](https://assets.st-note.com/img/1737948648-rndiGNkCShMueIzPXyO2p9UK.png?width=1200)
プログラム
ESP32のプログラムを以下に示します。
TRIGERで信号を発射して、ECHOで検出したduration(物体に反射して戻ってくるまでの時間)をpulseIn()関数で取得して、音速(344[m/s])をかけて、往復の時間なので2で割るだけです。
なお、本記事では短い距離を測るの場合を想定していますので単位はcmで出るようにしています。
#define TRIG_PIN 32 // トリガーピン(出力)
#define ECHO_PIN 34 // エコーピン(入力)
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// 超音波センサーにトリガー信号を送る
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// エコーの信号を受け取り、距離を計算する
long duration = pulseIn(ECHO_PIN, HIGH);
// 距離計算 (音速: 343m/s)
long distance = duration * 0.0344 / 2;
// 結果をシリアルモニタに表示
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500); // 0.5秒待機
}
購入部品
最新情報は「電子工作お買い物一覧」の記事を参照ください。
リンク切対応や代替部品の紹介もしています。