
ESP32を用いて超音波センサを実装したので、そのやり方について紹介したいと思います。
この記事を読むことで、人気のWifi, Bluetooth搭載マイコン、ESP32で超音波センサが動かせるようになります。
動かしている動画が以下のものです。
youtu.be
超音波センサを使うことで、センサから障害物までの距離が計測できるので、ロボットの自動運転ができるようになります。これを組み合わせることで最近流行りのSLAMなども実装できるようになる。
Arduino Nano版はこちら
www.takeshi-1222.com
ESP32, 超音波センサの簡単な説明
ESP32
ESP32の大きな特徴はWifi, Bluetoothを搭載しているところです。そのうえでArduinoよりも安価に購入でき、ArduinoコードやC++などいくつかの言語の互換性があります。そのため、1つのマイコンでいろいろなことを試したい方には大変おすすめなマイコンです。
リンク
超音波センサ
超音波は物体に当たると反射し、その反射波をセンサの受波器で受け取ることで、超音波を発した時と受波した時の時間の差から距離を算出できます。また、レーザーセンサなどとは異なり、物体があれば距離が分かるので、レーザーセンサが透過してしまうガラスなどにも頑健です。
リンク
これは実際の自動車の自動運転等にも使用されているくらい需要のあるものなので、1度自身で実装する体験は貴重かと思います。
実験構成
今回の実験に使用する部品は以下のものです。
- ESP32
- 超音波センサ (HC-SR04)
- ジャンパ線多数
ESP32、超音波センサは上記のものを使用しています。
ジャンパ線は何を使用してもいいですが、一応リンクを張っておきます。(メスメスのみで配線可能です)
リンク
実験
ESP32のセットアップや自動書き込み機能の実装に関してはこちらの記事を参考にしてください。
www.takeshi-1222.com
配線
まず配線は以下のようにします。

配線ができると以下のような画像のようになります。

実行コード
ここまで出来たら以下のコードを実行することで動作確認ができます。
#define Trigger_Pin 13
#define Echo_Pin 12
int V = 340;
void setup() {
Serial.begin(115200);
pinMode(Trigger_Pin, OUTPUT);
pinMode(Echo_Pin, INPUT);
digitalWrite(Trigger_Pin, LOW);
}
void sendTrigger(){
digitalWrite(Trigger_Pin,HIGH);
delayMicroseconds(10);
digitalWrite(Trigger_Pin, LOW);
}
void loop() {
sendTrigger();
while(!digitalRead(Echo_Pin)){
}
unsigned long t1 = micros();
while(digitalRead(Echo_Pin)){
}
unsigned long t2 = micros();
unsigned long t = t2 - t1;
Serial.print(V * t /20000);
Serial.println("cm");
delay(100);
}
上記のソースコードでは、超音波センサで取得した距離を[cm]単位でシリアルモニターに出力するものです。このデータを使って、移動ロボットの移動速度の閾値にするなど多くの応用が可能です。
まとめ
今回は、ESP32で超音波センサを動かすために必要なものの紹介と、サンプルプログラムの紹介をしました。
参考資料
ESP32 HC-SR04による距離測定