11 Arduino 超音波距離センサーを接続
この記事では、Arduino に超音波距離センサーを接続します。
使用する超音波距離センサーは写真のように、小さな基板に超音波送信用スピーカーと、受信マイク、処理回路が組み込まれ、入出力ピン(左から : 電源5v、Trig入力、Echo出力、GND)が出ています。
超音波距離センサーを以下の手順で使用し距離を測定します。
- Arduino からユニットのTrig入力に、10us のパルスを入力します。
- トリガーされると超音波送信機は 8 バーストの指向性の強い 40KHz 超音波を放射し、Echo出力を HIGH にします。
- 超音波パルスは直進し、物体で反射されユニットに戻ってきます。
- 超音波受信機が反射波を検出すると、Echo出力を LOW にします。
- Arduino でEcho出力のパルス幅を測定し HIGH の継続時間を取得します。
超音波バーストの速度は 340m/sec ですからEcho出力の継続時間から対象物とユニットの間の距離を計算することができます。
測定距離 = 超音波の速度 (340m/s) x 時間 / 2
測定距離を最後に 2 で割るのは、超音波バーストがユニットと対象物間を往復しているからです。
今回超音波距離センサーを以下のように接続しました。
- 電源 - 5v
- Trig - pin 12(出力)
- Echo - pin 11(入力)
- GND - GND
スケッチ内容
以下の動作を1秒に1回実行します。
- 超音波距離センサーの操作手順に従い、10us のTrig信号を出力します。
- Echoピンの波形を計測し、cm 距離に変換します。
- 変換結果は、シリアル通信でPCに送信します。
// 超音波距離センサー // 2021-6-4 #define TrigPin 12 // Trig Pin10 指定 #define EchoPin 11 // Echo Pin11 指定 void setup() { Serial.begin(9600); // シリアル通信の9600bps pinMode(TrigPin, OUTPUT); // TrigPinを出力指定 digitalWrite(TrigPin, LOW); // TrigPinに LOW を出力 pinMode(EchoPin, INPUT); // EchoPinを入力に指定 } void loop() { //超音波出力のため Trig信号を出力 digitalWrite( TrigPin, HIGH ); // High にする delayMicroseconds( 10 ); // 10μs待ち digitalWrite( TrigPin, LOW ); // Low に戻す //EchoPinを監視し、High時間を測定 (単位 us) long pulseLen = pulseIn( EchoPin, HIGH ); if (pulseLen > 0) { // 有効な値なら下記を実行 float distance = 340*pulseLen/2; // 音速340m/sで距離計算 distance = distance/10000; // cmへ換算 Serial.print(distance); // シリアルモニタに結果表示 Serial.println(" cm"); // 単位を追加表示して改行 } delay(1000); //1000ms待ち }
使用した Arduino命令
今回使用したArduino関連の命令の簡単な説明とその日本語レファレンスの掲載されているリンクを紹介します。
- pulseIn(pin, value)
pin に入力されるパルスをus単位で計測します。
パルス種類(value)をHIGHに指定した場合、
入力の立ち上がりで計測を始め、立ち下がりでパルス長を返します。 - Serial.begin(speed)
シリアル通信のデータ転送レートをbps(baud)で指定します。 - Serial.print(data,)
データをテキストに変換してシリアルポートへ出力します。 - Serial.println(data, format)
Serial.print()と同じですが、データの末尾に改行コードを付けて送信します。
動作の確認
スケッチを Arduino に書き込みプログラムがスタートしたら、Arduino IDE 右上の「シリアルモニタ」アイコンをクリックします。
下のようなシリアルモニタ画面が開き、測定した距離が1秒に1度の頻度で書き込まれていきます。
次回は、温度湿度センサーを接続します。