趣味開発、実装をまとめるブログ

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

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

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

この記事を読むことで、話題のマイコンであるESP32で超音波センサが実装できるようになります。

超音波センサは以前も安価なものを実装しました。

 

www.takeshi-1222.com

 

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

 

前回実装した超音波センサ (HC-SR04)はアナログ観測のみの観測範囲が4mまでで、分解能も荒かったのに対し、今回のMB1013はアナログ、パルス、シリアルでの通信が可能なのに加え、5mの観測範囲、観測角度90°、パルス計測では高分解能を有しています。

自動運転にはできるだけ高性能なものを利用することで、安全性を担保できるので、このように性能にこだわる必要もありそうです。

 

Arduino Nano版はこちら


 

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

www.takeshi-1222.com

  • サーボモータ実装

www.takeshi-1222.com

  • 無線書き込み実装

www.takeshi-1222.com

  • Webサーバー実装

www.takeshi-1222.com

  • OLED実装

www.takeshi-1222.com

  • 超音波センサ実装

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

  • ほこりセンサ

www.takeshi-1222.com

  • 心拍センサ

www.takeshi-1222.com

  • 皮膚電位センサ

www.takeshi-1222.com

 

ESP32,MB1013の簡単な説明

ESP32

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

超音波センサ

超音波は物体に当たると反射し、その反射波をセンサの受波器で受け取ることで、超音波を発した時と受波した時の時間の差から距離を算出できます。また、レーザーセンサなどとは異なり、物体があれば距離が分かるので、レーザーセンサが透過してしまうガラスなどにも頑健です。
これは実際の自動車の自動運転等にも使用されているくらい需要のあるものなので、1度自身で実装する体験は貴重かと思います。

実験構成

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

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

 

ジャンパ線は何を使用してもいいですが、一応リンクを張っておきます。

実験

配線

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

f:id:bamboomush:20210321184125p:plain

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

f:id:bamboomush:20210321184152j:plain

実行コード

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

// MaxSonar ESP32
//      GND GND
//      +5V VCC
//       PW 33

const int pwPin1 = 33;
long anVolt, sensor, mm, inches;

void setup() 
{
  Serial.begin(9600);
  pinMode(pwPin1, INPUT); 
}


void read_sensor_pulse()
{
  sensor = pulseIn(pwPin1, HIGH);
  mm = sensor;
  inches = mm/25.4;
}

void print_range()
{
  Serial.print("S1");
  Serial.print("=");
  Serial.print(mm);
  Serial.print(" ");
  Serial.println(inches);
}

void loop() 
{ 
  read_sensor_pulse();
  print_range();
  delay(100);
}

今回は超音波センサの数値をシリアルモニタで確認できるようにしています。
今回はパルス入力で実装してます。アナログでの実装の場合、ESP32のAnalogReadでは12bitになっており、MB1013は10bitなのでここを合わせる処理が必要になります。

パルスを使った方が精度が高く、処理も早いので今回はこちらを使いました。

まとめ

今回は、ESP32で超音波センサを動かすために必要なものの紹介と、サンプルプログラムの紹介をしました。