3人と1匹の日常とモノづくりブログ

興味のあるものをとりあえず動かしてみた、実装してみたシリーズをガンガン上げていきたいと思います。あくまでも自身の備忘録としてですが、誰かの助けになったらうれしいです。

【Wifi , Bluetooth搭載マイコン】【実装】ESP32で超音波センサ (HC-SR04)を動かす

f:id:bamboomush:20210105095151p:plain

 ESP32を用いて超音波センサを実装したので、そのやり方について紹介したいと思います。

この記事を読むことで、人気のWifi, Bluetooth搭載マイコン、ESP32で超音波センサが動かせるようになります。

動かしている動画が以下のものです。

youtu.be

超音波センサを使うことで、センサから障害物までの距離が計測できるので、ロボットの自動運転ができるようになります。これを組み合わせることで最近流行りのSLAMなども実装できるようになる。

 

Arduino Nano版はこちら

www.takeshi-1222.com

 

◆ESP32関係の実装記事◆ 
  • DCモータ実装

www.takeshi-1222.com

  • サーボモータ実装

www.takeshi-1222.com

  • 無線書き込み実装

www.takeshi-1222.com

  • Webサーバー実装

www.takeshi-1222.com

  • OLED実装

www.takeshi-1222.com

  • LCDディスプレイ

www.takeshi-1222.com

  • 温湿度センサ (安価)

www.takeshi-1222.com

  • 温湿度センサ (ハイスペック)

www.takeshi-1222.com

  • 温湿度センサ (複数)

www.takeshi-1222.com

  • CO2センサ

www.takeshi-1222.com

 

ESP32, 超音波センサの簡単な説明

ESP32

ESP32の大きな特徴はWifi, Bluetoothを搭載しているところです。そのうえでArduinoよりも安価に購入でき、ArduinoコードやC++などいくつかの言語の互換性があります。そのため、1つのマイコンでいろいろなことを試したい方には大変おすすめなマイコンです。

超音波センサ

超音波は物体に当たると反射し、その反射波をセンサの受波器で受け取ることで、超音波を発した時と受波した時の時間の差から距離を算出できます。また、レーザーセンサなどとは異なり、物体があれば距離が分かるので、レーザーセンサが透過してしまうガラスなどにも頑健です。

これは実際の自動車の自動運転等にも使用されているくらい需要のあるものなので、1度自身で実装する体験は貴重かと思います。

実験構成

 今回の実験に使用する部品は以下のものです。
  • ESP32
  • 超音波センサ (HC-SR04)
  • ジャンパ線多数

ESP32、超音波センサは上記のものを使用しています。

 

ジャンパ線は何を使用してもいいですが、一応リンクを張っておきます。(メスメスのみで配線可能です)

実験

ESP32のセットアップや自動書き込み機能の実装に関してはこちらの記事を参考にしてください。

www.takeshi-1222.com

配線

まず配線は以下のようにします。

f:id:bamboomush:20210105101939p:plain

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

f:id:bamboomush:20210106151636j:plain

実行コード

ここまで出来たら以下のコードを実行することで動作確認ができます。

#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);
}

//Send Trigger pulse
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による距離測定