#はじめに
前にUS-100超音波センサーを使った記事を投稿しましたが、VL53L1XというToF(Time-of-Flight)センサーも使ってみたので、そのことを書いていこうと思います。
#ToFセンサーとは
ToFセンサーは、赤外線レーザーの飛行時間を用いて距離を測るセンサーです。超音波センサーでは超音波の跳ね返ってくる時間で距離を出していましたが、ToFセンサーはそれがレーザーになった形です。
今回用いたToFセンサーは、VL53L1Xです。SwitchScienceにて購入しました。
こちらのボードは2.6V~5.5Vの入力電圧で動作するように、2.8Vのリニアレギュレータとレベルシフタが搭載されています。I2Cで通信します。
#回路図
回路図は次の画像の通りです。(画像はVL53L0Xになっていますが、VL53L1Xと思ってください。ポートは変わらないです)
I2C通信なので、SDA, SCL同士をつなげます。今回はVCCに3.3Vを与えています。実際につなげたものが次の画像です。(前回の記事の流用です…すみません)
#プログラム
サンプルプログラムがGitHubにあったので、これを用いました。ただ、これをそのまま使ったときに、なぜか終了(Ctrl+C)ができなかったので、その部分だけ改変しました。なお、あらかじめターミナルで次のコマンドを実行してインストールする必要があります。
sudo pip install vl53l1x
#!/usr/bin/env python
import sys
sys.path.insert(0, "build/lib.linux-armv7l-2.7/")
import VL53L1X
import time
from datetime import datetime
tof = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29)
print("Python: Initialized")
tof.open()
print("Python: Opened")
tof.start_ranging(1)
# try:
# while True:
# distance_mm = tof.get_distance()
# print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm))
# time.sleep(0.001)
# except KeyboardInterrupt:
# tof.stop_ranging()
while True:
flug_stop = input("Pless Enter to measure, input \"EXIT\" to exit... : ")
if(flug_stop != "EXIT"):
distance_mm = tof.get_distance()
print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm))
time.sleep(0.001)
else:
tof.stop_ranging()
break
途中コメントアウトしている部分は、サンプルプログラムでの測定のプログラムですが、これだとなぜかCtrl+Cがきかなかったので、EXITと入力することで処理を終了するように変更しました。
tof.get_distance()で距離を測定しています。
#使ってみた
実際にこのプログラムを使ったところ、次の画像のようになりました。
きちんと距離が測れていることが分かります。一応、巻き尺を使って正確に測れているかも見てみました。
距離(cm) | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
---|---|---|---|---|---|---|---|---|---|---|
測定結果(cm) | 11.3 | 20.6 | 29.6 | 39.3 | 49.4 | 59.3 | 69.1 | 78.8 | 88.3 | 98.0 |
距離(cm) | 110 | 120 | 130 | 140 | 150 | 160 | 170 | 180 | 190 | 200 |
---|---|---|---|---|---|---|---|---|---|---|
測定結果(cm) | 108.0 | 116.7 | 126.8 | 135.8 | 146.2 | 155.3 | 165.7 | 174.5 | 183.6 | 194.3 |
140㎝あたりから、最初に全然違う値が測定された時がありました。ただ、何回か計測をするとちゃんとした値が出たので、測定用の遮蔽物を動かす時に出たレーザーの値がでていたと考えています。
#感想
超音波センサーよりも精度良く出るのかなと思っていたのですが、意外と変わらなくて驚きました(ただしこっちの精度が悪いのではなく、超音波センサーの精度が想像以上に良かったというほうです)。大きさとしてはこっちのほうが小さいので、利便性みたいなものはこっちのほうがいいと思います。まあ目に安全とはなっているとはいえ、レーザーですので、どのような状況でも使えるものではないかもしれないですが…(超音波センサーなら超音波なので直視しても一切問題なし)
測定した後で気づいたのですが、どうやらスタートするときに長さにおけるいくつかのモードがあるらしく(start_ranging(1)の部分)、そのモードを長距離のものにすれば、長距離の精度が上がるかもしれません。多分自分はそっちの測定はやらないので、興味がある方は買って試してみるのもいいかもしれませんね。
ここまでご覧くださり、ありがとうございました。