Arduinoの基礎 - 測距センサ

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2020年8月7日 (金) 23:45時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

ここでは、超音波距離センサ(HC-SR04)を使用して、距離を計測する方法を記載する。

超音波は、人の耳に聞こえない周波数の音波(空気の振動)で、超音波距離センサとは、超音波を出してその反射が返ってくる時間を測ることで距離を測定するセンサのことである。
音波を使う距離センサの他に、光を使う光学式の距離センサもある。 光学式の場合は、基本的に高い精度での計測が可能であるが、光が反射する面の色の影響を受けやすいなどの問題もある。 音波は精度が低いものの、反射面の色や材質の影響を受けにくい、 測定距離が長い、障害物の影響を受けにくい、などの特徴がある。

超音波距離センサ(HC-SR04)の使用

Arduinoにおいて、HC-SR04を使用するには、NewPingライブラリを使用する。
ArduinoのライブラリのWebサイトに、NewPingのダウンロードのリンクがあるので、zipファイルをダウンロードする。
Arduino Playground - NewPingライブラリ

zipファイルをダウンロード後、Arduino IDEを起動して、[Sketch]メニューバー - [Include Library] - [Add .ZIP Library...]を選択して、zipファイルを追加する。

HC-SR04とSC1602A(I2Cアダプタ)を使用して、測定した距離をLCDに表示する仕組みを作成する。
HC-SR04は電源電圧5[V]、動作周波数40[kHz]、測定角度15[度]で動作する。

HC-SR04のピン配置は、以下の通りである。

Arduino HCSR04 1.png


また、測定結果をLCDに表示するため、以下のように配線している。

Arduino HCSR04 2.png


以下に、サンプルコードを記述する。

ping_medianメソッドを使用して、Pingの応答時間を取得している。
pingを5回試行して中央値を取得することにより、安定した値を取得することを試みている。

 #include <NewPing.h>
 #include <LiquidCrystal_I2C.h>
 
 const int PIN_SONAR_TRIGGER = 12;
 const int PIN_SONAR_ECHO = 11;
 const int MAX_DISTANCE = 200;
 
 NewPing sonar(PIN_SONAR_TRIGGER, PIN_SONAR_ECHO, MAX_DISTANCE);
 LiquidCrystal_I2C lcd(0x27, 16, 2);
 
 void setup()
 {
    lcd.init();
    lcd.backlight();
    lcd.clear();
 }
 
 void loop()
 {
    delay(50);
 
    unsigned long microSec = sonar.ping_median();
    unsigned long dist = sonar.convert_cm(microSec);
 
    lcd.clear();
    lcd.setCursor(0, 0);
 
    if( !dist )
    {
       lcd.print("-");
       return;
    }
    else
    {
       String s = String(dist);
       s += "[cm]";
       lcd.print(s);
    }
 
 }