VL53L1X ToFセンサーをラズベリーパイで使う方法|高精度距離測定の始め方

目次

はじめに

ラズベリーパイでToF方式のレーザー距離センサVL53L1X使ってみます。これまでも距離を計測するセンサを紹介してきましたが、それらとの違いも説明します。

VL53L1Xとは?

VL53L1Xは、ToF(Time of Flight)方式で距離を測定するレーザーセンサです。 赤外線レーザーを発射し、対象物に反射して戻ってくるまでの時間を測定して、距離を算出します。

従来の赤外線反射型センサや超音波センサと比べて、対象物の色や材質の影響を受けにくいのが特徴です。

センサ種類測定方式特徴
超音波センサ音波の反射時間を計測拡散しやすく、精度はやや低め
赤外線反射センサ反射光の強さを計測色や材質に強く依存する
ToFセンサ(VL53L1X)光の往復時間を計測材質・色に左右されにくく高精度

配線

XSHUTというピンはセンサーのON/OFFを制御できます。省エネしたいときにつきます。
GPIO(2.8V)というピンはセンサ内部電圧を出力します。他の定電圧(2.8V)部品に電圧基準を与えることができますが、基本使わないと思います。

今回、Picoではなくラズベリーパイで使います。当モジュールとpicoは相性が悪く、実装が難しいです。

Raspberry PiVL53L1X
3.3V(1)5V
GND(6)GND
GPIO2(3)SDA
GPIO3(5)SCL
()内はピン番号

距離を表示する

以下のライブラリをインストールしてください。

pip install vl53l1x

以下のコードを実行すれば距離が計測できます。うまくいかない場合はI2Cが検出されるか?を確認ください

import time
import sys
import signal

import VL53L1X

# Open and start the VL53L1X sensor.
# If you've previously used change-address.py then you
# should use the new i2c address here.
# If you're using a software i2c bus (ie: HyperPixel4) then
# you should `ls /dev/i2c-*` and use the relevant bus number.
tof = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29)
tof.open()

# Optionally set an explicit timing budget
# These values are measurement time in microseconds,
# and inter-measurement time in milliseconds.
# If you uncomment the line below to set a budget you
# should use `tof.start_ranging(0)`
# tof.set_timing(66000, 70)

tof.start_ranging(1)  # Start ranging
                      # 0 = Unchanged
                      # 1 = Short Range
                      # 2 = Medium Range
                      # 3 = Long Range

running = True


def exit_handler(signal, frame):
    global running
    running = False
    tof.stop_ranging()
    print()
    sys.exit(0)

signal.signal(signal.SIGINT, exit_handler)

while running:
    distance_in_mm = tof.get_distance()
    print("Distance: {}mm".format(distance_in_mm))
    time.sleep(0.1)

まとめ

0.1m~4mまでかなり正確に計測することができます。ぜひいちど試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次