Pololu ToFセンサシリーズは、光の反射時間で距離を測定するセンサモジュールです。距離測定モジュールと定電圧レギュレータが1つになったセンサモジュールで、I2C通信でマイコンボードと通信ができます。距離測定モジュールの違いにより3種類が販売されています。
Arduino用ライブラリが提供されていて、手軽に使えるようになっています。今回は、ArduinoとPololu ToFセンサを使って、距離取得するサンプルプログラムを動かしていきます。
| 製品名 | VL6180X | VL53L0X | VL53L1X |
|---|---|---|---|
| 測定範囲(mm) | 1~600 | 30~2000 | 40~4000 |
| 分解能(mm) | 1 | 1 | 1 |
| サイズ(mm) | 13×18×2 | 13×18×2 | 13×18×2 |
| 重さ(g) | 0.5 | 0.5 | 0.5 |
| インターフェース | I2C | I2C | I2C |
| 動作電圧(V) | 2.7~5.5 | 2.6~5.5 | 2.6~5.5 |
| Pololu型番 | #2489 [suzaku-shop code=’pololu-2489′] | #2490 [suzaku-shop code=’pololu-2490′] | #3415 [suzaku-shop code=’pololu-3415′] |
この記事では各センサの概要と、VL53L0XをArduinoから制御して距離測定をしていきます。
セット内容は以下の通りで、3種類とも同じ付属品です。
使用用途に合ったピンヘッダをはんだ付けしてください。
VL53L0XをArduinoで使っていきます。
次のようにArduinoとVL53L0Xを接続します。

| Arduino側 | VL53L0X側 |
|---|---|
| 3.3V または 5V | VIN |
| GND | GND |
| SCL | SCL |
| SDA | SDA |
VL53L0Xには、4つの端子以外にもありますが、距離測定だけなら接続はいりません。
Arduino Unoの I2C は、リセットボタンがある側のピンから、SCL、SDA、AREF、GND、13、12……の配置になっています。A4、A5ピン側のは I2C ではないので注意。
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で接続して、手軽に距離を測定できるセンサモジュールです。次のページにライブラリ関数一覧と資料もありますので参考にしてください。