目次
はじめに
ラズベリーパイでToF方式のレーザー距離センサVL53L1X使ってみます。これまでも距離を計測するセンサを紹介してきましたが、それらとの違いも説明します。
リンク
VL53L1Xとは?
VL53L1Xは、ToF(Time of Flight)方式で距離を測定するレーザーセンサです。 赤外線レーザーを発射し、対象物に反射して戻ってくるまでの時間を測定して、距離を算出します。
従来の赤外線反射型センサや超音波センサと比べて、対象物の色や材質の影響を受けにくいのが特徴です。
| センサ種類 | 測定方式 | 特徴 |
| 超音波センサ | 音波の反射時間を計測 | 拡散しやすく、精度はやや低め |
| 赤外線反射センサ | 反射光の強さを計測 | 色や材質に強く依存する |
| ToFセンサ(VL53L1X) | 光の往復時間を計測 | 材質・色に左右されにくく高精度 |
配線
XSHUTというピンはセンサーのON/OFFを制御できます。省エネしたいときにつきます。
GPIO(2.8V)というピンはセンサ内部電圧を出力します。他の定電圧(2.8V)部品に電圧基準を与えることができますが、基本使わないと思います。
今回、Picoではなくラズベリーパイで使います。当モジュールとpicoは相性が悪く、実装が難しいです。
| Raspberry Pi | VL53L1X |
| 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までかなり正確に計測することができます。ぜひいちど試してみてください。
リンク
コメント