Arduinoで超音波距離センサを使う

前回のR2D2のやつがたくさんの人に読んでいただけているみたいですごい嬉しいです、ありがとうございます

今回もアルディーノで遊んでいきます。

今回使うのは「超音波距離センサ」というモジュールです。

f:id:ten0313:20170728165340j:plain

うしろのは食べてる途中のメロンです。趣味の悪い香水ってかんじの香りが苦手であんまり好きじゃない

電子工作とかに興味はなくても、多分ロボット競技を見たことのある方なら見たことはあると思います。 

簡単に能力を説明すると「超音波を発し、モノに当たり反射して帰ってきたそれを受け取る」ことができます。(能力っていうとなんだかかっこいいですね)

 

つまりこのモジュールの前に存在する障害物までの距離を知ることができるんです。

自立式の(外部からの操作を必要としていないという意味で)競技用ロボットには大体

このモジュールが実装されているイメージがあります。

形がちょうど目のように見えてすこし愛らしく思ってしまいます。

f:id:ten0313:20170728170921j:plain

データシートの読み解き

...というよりは「どうやってつかうんかなー?」ってのいうのを説明していきます。

f:id:ten0313:20170728171940j:plain

端子部分のアップです。

左から

  • Vcc
  • Trig
  • Echo
  • Gnd

となっています。電源電圧は5Vで駆動、測定可能な距離は400cmです。

なんと3mmの精度で距離の測定ができるんですよね、これ。すごい。

 

Vccが電源電圧、GndがGNDなのは言うまでもありませんが問題はTrigピンとEchoピンです。

 

モジュールの動き

簡単に説明します(難しいことが説明できないだけですが)。

  1. Trig端子をHIGHにする
  2. パルス、つまり超音波がモジュールから発せられる。
  3. 2のパルス発信と同時にEcho端子がHIGHになる。
  4. 2で発信したパルスが反射して帰ってき、モジュールが受信する。
  5. Echo端子がLOWになる。

といった流れになっています。つまり、Trig端子に入力で測距開始、Echo端子より「HIGH時間の長さ」という形で測定結果が出力されるということですね。

 

f:id:ten0313:20170728180602p:plain

やまびこが返ってくる時間を測定すると考えるとイメージしやすいかもです。

 

距離を測定してみる。

このモジュールがすることは「パルスが帰ってくるまでの時間を測定する」ことです。

ポイントは、あくまでも帰ってくるまでの時間の測定しかできないということなんですよね。つまるところ時間を距離に変換するのはこちら側。今回で言えばArduinoが演算を行う必要があります。

そのことを念頭においてスケッチ、回路作成を行っていきます。

Vccピンを5Vピンに、GndピンをGNDピンに接続しTrigピンをデジタル8ピン、Echoピンをデジタル9ピンしておきます。


int Trig = 8;
int Echo = 9;
int Duration;
float Distance;

void setup() {
Serial.begin(9600);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
}

void loop() {
digitalWrite(Trig,LOW);
delayMicroseconds(1);
digitalWrite(Trig,HIGH);
delayMicroseconds(11);
digitalWrite(Trig,LOW);
Duration = pulseIn(Echo,HIGH);
if (Duration>0) {
Distance = Duration/2;
Distance = Distance*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us
Serial.print(Duration);
Serial.print(" us ");
Serial.print(Distance);
Serial.println(" cm");

}
delay(500);
}

ごめんなさい、長々と解説しておきながらスケッチはSWITCHSIENCEさんのホームページにあったサンプルスケッチを使用しています。

音の速さから、返ってくるまでの時間をつかい距離を測定する、中学校でやりましたっけ。音の速さは340m/sですよね。スケッチ内ではそれをもとに演算、距離を割り出しています。

youtu.be

動いている様子です。かなり精度高いんですよね。わかっていたことですけどやっぱりびっくりしました。

 

まとめ

かなり雑な記事になってしまったかもしれません(最近の更新が少なくなってしまい焦っています)。

とてもおもしろいモジュールの話でした。これで本当にロボットとか作ってみたいですよね、最近動画で見た海外の壊しあいをしているロボットをみてから自走式のロボットを作ってみたい欲が湧いてきました。

実験的に今回は使いましたが、今後これを使った何かをつくりこの場でひろうしてみたいです。 

ありがとうございました。

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

 

twitter.com