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

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

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

f:id:bamboomush:20210104173405p:plain

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

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

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

youtu.be

 

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

 

ESP32版はこちら

 

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

www.takeshi-1222.com

  • サーボモータ実装

www.takeshi-1222.com

  • OLED実装

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

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

Arduino Nano

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

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

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

超音波センサ

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

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

実験構成

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

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

 

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

実験

配線

Arduino Nanoのピンアサインは以下の通りとなっています。

Arduino NANO Pinout
@Arduino NANO Pinout Diagram | Microcontroller Tutorials

上記をもとに配線をします。

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

f:id:bamboomush:20210105091220p:plain
配線ができると以下のような画像のようになります。

f:id:bamboomush:20210105091246j:plain

実行コード

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

#define Trigger_Pin 3
#define Echo_Pin 2
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]単位でシリアルモニターに出力するものです。このデータを使って、移動ロボットの移動速度の閾値にするなど多くの応用が可能です。

まとめ

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

参考資料

ESP32 HC-SR04による距離測定