Arduinoで距離センサーを使う方法【超音波を利用する】

どうも、なかしーです。

僕は自動車のマイコンにプログラミングをする組み込みエンジニアとして働きつつ、YouTubeでArduinoの使い方を解説しています。

Arduino初心者
Arduino初心者

Arduinoで距離センサーを制御する方法を教えて欲しいなぁ。どういう仕組みで距離を測ってるんだろう?

という悩みや疑問を解決していきます。

距離センサーは音が伝わる速さと跳ね返る原理を使い、物体との距離を測定しています。

少しずつ自動運転技術を搭載した車が登場しており、前の車や周囲の壁や電柱を検出するために距離センサーと同じ仕組みが使われています。

なかしー
なかしー

ラジコンカーに距離センサーを搭載して、自走させると面白いかも!

この記事では「Arduinoで距離センサーを使う方法」について紹介します。

ちなみに、YouTubeでも解説しているので、この記事と合わせて見ると理解しやすいはずです!

距離センサーで距離を測定できる仕組み

距離センサーは音の性質を使って距離を測定する仕組みです。

  • 音の速さ
  • 指向性(広がり方)
  • 音の反射

詳しく解説します。

音の速さ

音が空気中を伝わる速さは約340m/sと言われています。

音とよく比較されるのは光の速さで30万km/sです。

なかしー
なかしー

大雨の日にカミナリが落ちるときをイメージしてみてください!

カミナリが落ちるときは、ピカっと光ってからドーンと音がなると思います。

光ったときを基準に音が鳴るまでの時間を計ると、カミナリがどれくらいの位置に落ちたか分かります。

距離センサで測れる距離は、せいぜい30cmぐらいです。

音の速さを元に時間を計算すると

0.3(m) / 340(m/s) = 約882us

1msにも満たない短い時間で人間では体感できませんが、Arduinoであれば検出することが可能です。

指向性(広がり方)

音には広がり方を表す指向性があります。

指向性が高いと音は真っ直ぐとなり、指向性が低いと周辺に広がるように伝わります。

例えば、スピーカーだと前だけでなく斜めの横の位置でも聞こえると思います。

指向性が高いスピーカーだと、音が真っ直ぐに伝わるので斜め横にいる人には聞こえません。

周波数が高いほど、指向性も高くなります。

距離センサーは前にある物体との距離を測定したいので、周波数が高い超音波を使っています。

仮に指向性が悪いと音が広がってしまい、どの物体との距離なのか分からなくなってしまいます。

音の反射

音は物体にぶつかると反射します。

分かりやすい例は「やまびこ」ですね!

「やっほー!」と叫んでから、時間が経つと山から自分の声が聞こえるのは反射しているからです。

距離センサーは、この3つの性質を使って距離を測定しています。

Arduinoと距離センサーの繋ぎ方

今回使う距離センサーは「HC-SR04」を使います。

僕が購入したArduinoのスタータキットにも入っていました!

この距離センサーのピン配置とArduinoへ繋ぐピンは次のとおりです。

  • Vcc:5V
  • Trig:デジタル2ピン
  • Echo:デジタル3ピン
  • Gnd:GND

Arduinoで距離センサーを制御するプログラミング

距離センサーの使い方は次のとおりです。

  • TrigピンをLow→Highにする
  • EchoピンがHighになっている時間を計測
  • 計測した時間を58で割る

58という数字はデータシートに書いてありました。

実際に計算してみると時間を距離(cm)に変換することができます。

この手順に沿ってプログラミングをするとこんな感じになります。

HTML
unsigned long distance_time = 0;

void setup() {
  pinMode(2,OUTPUT);
  pinMode(3,INPUT);

  Serial.begin(9600);
}

void loop() {

  digitalWrite(2,HIGH);
  delayMicroseconds(10); //10us over

  digitalWrite(2,LOW);

  distance_time = pulseIn(3,HIGH);

  Serial.print(distance_time / 58);
  Serial.println("cm");

  delay(100);
}

このプログラムを実行すると距離センサーで検出した距離をシリアルモニタに表示してくれます。

プログラムのポイントは、pulseIn関数を使っているところです。

pulseIn関数はパルス波のLowもしくはHighの時間を調べるときに使います。

引数(カッコの中)にはパルス波を検出したいデジタルピンの番号と、HIGHかLOWを入力します。

距離センサーとLEDを使ったインジケータ

周囲の壁や電柱などの存在を知らせてくれるコーナリングセンサーというものが付いている自動車があります。

同じような物をArduinoと距離センサーで作ることができます。

先ほどの回路にLEDを追加して、距離に応じてLEDが点滅する速さを変えるだけです。

LEDの代わりにブザーを使うともっとリアルになると思います。

ぜひ試してみてください!

LEDの点滅方法については「ArduinoでLEDを点滅させる方法【エンジニアが初心者向けに解説】」をご覧下さい。

ArduinoでLEDを点滅させる方法【つなぎ方やプログラムを解説】

Arduinoで距離センサーを使う方法|まとめ

この記事では「Arduinoで距離センサーを使う方法」について紹介しました。

距離センサーは「音の速さ」と「音の反射」と「音の指向性」を利用して距離を測定しています。

距離センサー「HS-SR04」の場合は、TrigピンにHighのパルスを送って、EchoピンのHighになっている時間を取得します。取得した時間を58で割ってあげる距離(cm)に換算することができます。

Arduino関連の人気記事

>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】

>>Arduinoをゼロから勉強する方法を紹介【参考書は不要】

>>Arduinoのプログラムの書き方【基本的なルールは4つある】

当ブログで人気のArduino入門キット

第1位:Arduino UNO スターターキット
Arduino UNOのスタータキットです。電子工作でよく使う部品が一式揃っており、バラバラで購入するより格段に安いです。
第2位:ELEGOO Arduino用のUNO R3 最終版スタータキット
こちらも電子工作によく使う部品が第一位のスタータキットよりたくさん入っています。とてもお買い得です。
第3位:ELEGOO Arduino MEGA 2560 R3
UNOの上位互換版MEGAのスターターキットです。これだけ入っていれば十分に電子工作の基本をマスターできることでしょう。
エンジニアが教えるArduino入門講座のまとめ【解説動画付き】