創るたのしみを応援

測距センサ Pololu ToFセンサシリーズ

Pololu ToFセンサシリーズは、光の反射時間で距離を測定するセンサモジュールです。距離測定モジュールと定電圧レギュレータが1つになったセンサモジュールで、I2C通信でマイコンボードと通信ができます。距離測定モジュールの違いにより3種類が販売されています。

Arduino用ライブラリが提供されていて、手軽に使えるようになっています。今回は、ArduinoとPololu ToFセンサを使って、距離取得するサンプルプログラムを動かしていきます。

製品名VL6180XVL53L0XVL53L1X
測定範囲(mm)1~60030~200040~4000
分解能(mm)111
サイズ(mm)13×18×213×18×213×18×2
重さ(g)0.50.50.5
インターフェースI2CI2CI2C
動作電圧(V)2.7~5.52.6~5.52.6~5.5
Pololu型番#2489
[suzaku-shop code=’pololu-2489′]
#2490
[suzaku-shop code=’pololu-2490′]
#3415
[suzaku-shop code=’pololu-3415′]

この記事では各センサの概要と、VL53L0XをArduinoから制御して距離測定をしていきます。

概要

ピン配置

VL6180X
VL53L0X
VL53L1X
  • VDD
    • 外部へ電源(2.8V、約150mA)を供給できます。
  • VIN
    • 動作電源を供給します。
      • VL6180X:2.7~5.5V
      • VL53L0X:2.6~5.5V
      • VL53L1X:2.6~5.5V
  • GND
    • グランドです。
    • I2C通信の相手と共有する必要があります。
  • SDA
    • I2C通信のデータ線です。
    • HIGHがVIN、LOWが0Vになります。
  • SCL
    • I2C通信のクロック線です。
    • HIGHがVIN、LOWが0Vになります。
  • GPIO1
    • プログラム可能な割込み出力です。
    • VL6180Xはハードウェアがスタンバイ時にもLOWにします。
    • レベルシフトされていません。
  • GPIO0/CE(VL6180Xのみ)
    • 電源投入時にチップイネーブル入力として機能します。
    • このピンをLOWにすると、センサはスタンバイ状態になります。
    • 電源投入後にプログラム可能な割込み出力として再設定できます。
    • レベルシフトされていません。
  • XSHUT(VL53L0X、VL53L1Xのみ)
    • アクティブLOWシャットダウン入力として機能します。
    • このピンをLOWにすると、センサはスタンバイ状態になります。
    • レベルシフトされていません。

セット内容

VL6180X
VL53L0X
VL53L1X

セット内容は以下の通りで、3種類とも同じ付属品です。

  • センサモジュール本体×1
  • 1×7ライトアングルピンヘッダ×1
  • 1×7ピンヘッダ×1

使用用途に合ったピンヘッダをはんだ付けしてください。

VL53L0XをArduinoで使用する

VL53L0XをArduinoで使っていきます。

開発環境

ハードウェア

  • VL53L0X [suzaku-shop code=’pololu-2490′]
  • Arduino UNO [suzaku-shop code=’pololu-2191′]
  • USB TypeA-TypeBケーブル
  • パソコン
    • Windows10

ソフトウェア

  • Arduino IDE

配線接続

次のようにArduinoとVL53L0Xを接続します。

Arduino側VL53L0X側
3.3V または 5VVIN
GNDGND
SCLSCL
SDASDA

VL53L0Xには、4つの端子以外にもありますが、距離測定だけなら接続はいりません。

Arduino Unoの I2C は、リセットボタンがある側のピンから、SCL、SDA、AREF、GND、13、12……の配置になっています。A4、A5ピン側のは I2C ではないので注意。

ライブラリの導入

Arduino IDEで使用するライブラリを次の手順で導入します。

  1. Arduino IDEで「スケッチ」メニューを開き「ライブラリをインクルード」を選択、次に「ライブラリを管理」を選択します。
  2. 「VL53L0X」を検索します。
  3. リストの「VL53L0X」をクリックします。
  4. 「インストール」をクリックします。

もし、以上の手順がうまくいかない場合は、以下の方法で導入してください。

  1. GitHubから最新のリリースアーカイブをダウンロードし、それを展開します。
  2. フォルダ「vl53l0x-arduino-master」の名前を「VL53L0X」に変更します。
  3. 「VL53L0X」フォルダをArduinoスケッチブックディレクトリ内の「libraries」フォルダに移動します。スケッチブックの場所は、Arduino IDEの「ファイル」メニューより、「環境設定」を開くことで確認することができます。なお「libraries」フォルダがない場合、自身で作成してください。
  4. Arduino IDEを再起動します。

動作確認

Arduino UNOとパソコンをUSBケーブルで接続し、次のサンプルプログラムを書き込みます。

このサンプルプログラムは、シリアルモニタにセンサの距離情報を出力するプログラムです。

/*
 この例では、VL53L0Xからシングルショット範囲の測定値を取得する方法を示します。
 VL53L0X APIユーザーマニュアルに記載されているように、センサーはオプションでさまざまな測距プロファイルで設定することができ、特定のアプリケーションのパフォーマンスを向上させることができます。 
 このコードは、VL53L0X APIの4つの「SingleRanging」の例に基づいています。

  測定範囲はmm単位です。
*/

#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

/*
長距離モードを使用するには、この行のコメントを外してください。 これはセンサの感度を高め、その潜在的な範囲を広げるが、意図されたターゲット以外の物体からの反射のために不正確な読みを得る可能性を高める。 暗い場所では最も効果的です。
*/
//#define LONG_RANGE

/*
これら2行のうちの1つのコメントを外して、精度を下げてより高い速度を得るか、または速度を落としてより高い精度を得る
*/
//#define HIGH_SPEED
//#define HIGH_ACCURACY

void setup()
{
  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);

#if defined LONG_RANGE
  // 戻り信号のレート制限を下げます(デフォルトは0.25 MCPS)
  sensor.setSignalRateLimit(0.1);
  // レーザーパルス周期を長くする(デフォルトは14および10 PCLKs)
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif

#if defined HIGH_SPEED
  // タイミングバジェットを20ミリ秒に減らす(デフォルトは約33ミリ秒)
  sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
  // タイミングバジェットを200ミリ秒に増やす
  sensor.setMeasurementTimingBudget(200000);
#endif
}

void loop()
{
  Serial.print(sensor.readRangeSingleMillimeters());
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
}

最後に

Pololu ToFシリーズは、距離センサモジュールがそれぞれ違うため、Arduinoライブラリがそれぞれ用意されています。大まかな使用方法は同じなので、VL53L0Xの使用方法を参考に、VL6180XやVL53L1Xも同じ感じで使うことができます。使うセンサモジュールの型番で、Arduinoライブラリを検索して導入してください。

ArduinoとI2Cで接続して、手軽に距離を測定できるセンサモジュールです。次のページにライブラリ関数一覧と資料もありますので参考にしてください。