創るたのしみを応援

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

VL53L0X Arduinoライブラリ

初期設定

ライブラリのインクルード

#include <VL53L0X.h>

インスタンスの生成(nameは任意)

VL53L0X name;

name.init(); の形で使います。

サンプルプログラムでは、nameをsensorとして、VL53L0X sensor; でインスタンスを生成しています。

関数一覧

void setAddress(uint8_t new_addr)

I2Cアドレスを変更する関数です。

引数:uint8_t new_addr
7ビットのI2Cアドレス

戻り値:なし

inline uint8_t getAddress(void)

現在のI2Cアドレスを取得する関数です。

引数:なし

戻り値:I2Cアドレス(7ビット)

bool init(bool io_2v8 = true)

センサを初期化する関数です。引数:io_2v8がtrueの場合、センサは2V8モードに設定されます。falseの場合、1V8モードに設定されます。

引数:bool io_2v8
2V8モードに設定するかどうか

戻り値:true(初期化が正常に終了)、false(初期化が正常に終了せず)

void writeReg(uint8_t reg, uint8_t value)

センサレジスタに8ビットの値を書き込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数1:uint8_t reg
レジスタアドレス

引数2:uint8_t value
書き込む値(8ビット)

戻り値:なし

void writeReg16Bit(uint8_t reg, uint16_t value)

センサレジスタに16ビットの値を書き込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数1:uint8_t reg
レジスタアドレス

引数2:uint16_t value
書き込む値(16ビット)

戻り値:なし

void writeReg32Bit(uint8_t reg, uint32_t value)

センサレジスタに32ビットの値を書き込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数1:uint8_t reg
レジスタアドレス

引数2:uint32_t value
書き込む値(32ビット)

戻り値:なし

uint8_t readReg(uint8_t reg)

センサレジスタの8ビットの値を読み込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数:uint8_t reg
レジスタアドレス

戻り値:値(8ビット)

uint16_t readReg16Bit(uint8_t reg)

センサレジスタの16ビットの値を読み込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数:uint8_t reg
レジスタアドレス

戻り値:値(16ビット)

uint32_t readReg32Bit(uint8_t reg)

センサレジスタの32ビットの値を読み込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数:uint8_t reg
レジスタアドレス

戻り値:値(32ビット)

void writeMulti(uint8_t reg, uint8_t const * src, uint8_t count)

指定したレジスタを基点に指定したバイト数の範囲のレジスタに、指定した配列から値を書き込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数1:uint8_t reg
基点にするセンサレジスタ

引数2:uint8_t const * src
書き込む配列

引数3:uint8_t count
バイト数

戻り値:なし

void readMulti(uint8_t reg, uint8_t * dst, uint8_t count)

指定したレジスタを基点に指定したバイト数の範囲のレジスタの値を、指定した配列に読み込む関数です。レジスタアドレスはVL53L0X.hのregAddr列挙型によって定義されます。

引数1:uint8_t reg
基点にするセンサレジスタ

引数2:uint8_t * dst
読み込む配列

引数3:uint8_t count
バイト数

戻り値:なし

bool setSignalRateLimit(float limit_Mcps)

戻り信号のレート制限を1秒当たりのメガカウント(MCPS)で指定した値に設定する関数です。

引数:float limit_Mcps
指定する値(MCPS)

戻り値:true(値が有効)、false(値が無効)

float getSignalRateLimit(void)

現在の戻り信号のレート制限(MCPS)を取得する関数です。

引数:なし

戻り値:レート制限(MCPS)

bool setMeasurementTimingBudget(uint32_t budget_us)

測定タイミングバジェット(μs)を指定する関数です。測定タイミングバジェットは1回の距離測定に許容される時間です。最小値は20msです。

引数:uint32_t budget_us
指定する測定タイミングバジェット(μs)

戻り値:true(値が有効)、false(値が無効)

uint32_t getMeasurementTimingBudget(void)

測定タイミングバジェット(μs)を取得する関数です。

引数:なし

戻り値:測定タイミングバジェット(μs)

bool setVcselPulsePeriod(vcselPeriodType type, uint8_t period_pclks)

指定した周期タイプの垂直共振器面発光レーザー(VCSEL)のパルス周期(PCLK)を指定する関数です。周期タイプはVL53L0X.hのvcselPeriodType列挙型によって定義されます。

引数1:vcselPeriodType type
周期タイプ

引数2:uint8_t period_pclks
指定する周期

uint8_t getVcselPulsePeriod(vcselPeriodType type)

指定した周期タイプの垂直共振器面発光レーザー(VCSEL)のパルス周期(PCLK)を取得する関数です。周期タイプはVL53L0X.hのvcselPeriodType列挙型によって定義されます。

引数:vcselPeriodType type
周期タイプ

戻り値:パルス周期(PCLK)

void startContinuous(uint32_t period_ms = 0)

連続距離測定を開始する関数です。引数:period_msが0の場合、連続バックツーバックモード(センサができる限り高レートで測定を行う)が使用されます。0以外の場合、連続測定モード(測定間隔を指定した時間(ms)にして測定を行う)が使用されます。

引数:uint32_t period_ms
測定間隔(ms)

戻り値:なし

void stopContinuous(void)

連続距離測定を停止する関数です。

引数:なし

戻り値:なし

uint16_t readRangeContinuousMillimeters(void)

連続距離測定時の測定値(mm)を取得する関数です。

引数:なし

戻り値:測定値(mm)

uint16_t readRangeSingleMillimeters(void)

単発距離測定を実行し、測定値(mm)を取得する関数です。

引数:なし

戻り値:測定値(mm)

inline void setTimeout(uint16_t timeout)

タイムアウト期間(ms)を設定する関数です。タイムアウト期間は、センサが準備できていない場合に読み取り操作が中止されるまでの期間です。0を設定すると、タイムアウトを無効にします。

引数:uint16_t timeout
タイムアウト期間(ms)

戻り値:なし

inline uint16_t getTimeout(void)

タイムアウト期間(ms)を取得する関数です。

引数:なし

戻り値:タイムアウト期間(ms)

bool timeoutOccurred(void)

前回のtimeoutOccurred関数が呼び出された後に、タイムアウトが発生したか取得する関数です。

引数:なし

戻り値:true(タイムアウトが発生)、false(タイムアウトが発生していない)

Pololu ToF用ライブラリについて

距離センサモジュールの製造元 ST micro が提供しているライブラリもあります。PololuのToF用ライブラリは、よりコンパクトに設計されていて、Flashの使用量が小さいのが大きな特徴です。

一部の機能は制限されますが、ST microのデータシートに記載されている膨大な全ての機能が必要なことはなかなか無いので、Arduinoで開発するならPololuライブラリがおすすめです。

資料