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

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

【低価格マイコン】【実装】Arduino Nanoで超音波センサ (MB1013)を動かす

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

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

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

www.takeshi-1222.com

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

 

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

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

 

 

ESP32版はこちら

 

 

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

www.takeshi-1222.com

  •  サーボモータ実装

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

Arduino Nano, KY-040の簡単な説明

Arduino Nano

Arduino Nanoは超安価で購入ができるマイコンで、電気やプログラミングの深い知識を持っていない電子工作初心者でも扱いやすい、オープンソースマイコンです。

Arduinoと比較すると、性能は劣るものの、安価で広い用途で使用可能なので初心者に適しています。

ちなみに、上記が純正品ですが、互換品である以下も性能面では変わらないので強いこだわりがない限りは、互換品の方がおすすめです。

超音波センサ

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

実験構成

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

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

 

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

実験

配線

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

f:id:bamboomush:20210321183115p:plain

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

f:id:bamboomush:20210321183134j:plain

実行コード

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

// MaxSonar Arduino
//      GND GND
//      +5V VCC
//       TX 2
//       RX 3
//       AN Analog 0
//       PW 4

const int anPin = 0;
const int pwPin1 = 4;
long sensor, mm, inches;

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

void read_sensor_analog()
{
  anVolt = analogRead(anPin);
  mm = anVolt * 5;
  inches = mm/25.4;
}

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_analog();
  read_sensor_pulse();
  print_range();
  delay(100);
}

今回は超音波センサの数値をシリアルモニタで確認できるようにしています。
アナログの時と、パルスの時で関数を切り替えれば使い分けができるようになっています。

アナログは容易に使用できますが、電圧入力が可能であれば、パルスを使った方が精度が高く、処理も早いようです。

まとめ

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