RaspberryPi

ToFセンサーとラズパイ(raspberry pi)で測距。Pythonサンプルコードも紹介。

ToFセンサ(VL53L1X)を、ラズパイからI2C通信で制御し、測距を行いました

本記事では、ラズパイでToFセンサ(VL53L1X)で測距を行うために必要な情報をまとめています

本記事が、皆様の参考になれば幸いです。

この記事で分かること

本記事を読み終わると、下記の内容が分かるようになります。

  • 必要な部品
  • ToFセンサ(VL53L1X)とラズパイの回路図、結線図
  • ToFセンサ(VL53L1X)のPythonサンプルコード
  • ToFセンサ(VL53L1X)の各測距モードのおおよその精度の目安

スポンサーリンク

使用した部品

はじめに、今回ToFセンサで測距を行うにあたり、使用した部品を紹介します。

ToFセンサ

スイッチサイエンスで、VL53L1X搭載の測距モジュールを購入しました。

ピンヘッダのハンダ付けが必要です。

■スペック

  • 寸法:13 × 18 × 2 mm
  • 重量:0.5 g
  • 解像度:1 mm
  • 最大範囲:400 cm
  • 最小範囲:4 cm
  • インタフェース:I2C
  • 最小動作電圧:2.6 V
  • 最大動作電圧:5.5 V
  • 電源電流:15 mA

ブレッドボード

Amazonでベストセラーになっているブレッドボードです。

ジャンパワイヤ

オス-オス、オス-メス、メス-メスのジャンパワイヤがセットになっています。

電子工作を進めると必ず必要になるので、ひととおり持っておくことをオススメします。

スポンサーリンク

ToFセンサ(VL53L1X)とラズパイの配線図、I2C通信設定

次に、ToFセンサ(VL53L1X)とラズパイの回路について紹介します。

ラズパイのピン配置

配線図を紹介する前に、ラズパイのピン配置を載せておきます。

I2C通信を使うので、PIN番号3、5を使うことになります。

ラズパイ ピン配置

ラズパイ ピン配置

こちらが、ToFセンサ(VL53L1X)とラズパイの配線図になります。

なお、配線図に使用しているToFモジュールは、VL53L1Xが無かったので他の物を使用しています。

基本は全く同じです。

ラズパイとtofセンサの回路図
ラズパイとToFセンサの結線図

ToFセンサとラズパイのSDA同士、SCL同士を結線します。

また、ToFセンサの電源には、ラズパイの5V出力を使用しています。

GNDも忘れず接続するようにしましょう。

こちらが実際に配線した写真です。

ToFセンサとラズパイ(RaspberryPi)の結線
ToFセンサとラズパイ(RaspberryPi)の結線

こちらがToFセンサの正面。

この写真で気づくと思うのですが、買ったばかりだとセンサに保護シールが貼ってある場合があるので注意してください

ToFセンサの前面
ToFセンサの正面。センサ部に保護シールが貼ってある。

こちらが、ToFセンサの保護シールを剥がした後の写真になります。

ToFセンサの前面
ToFセンサの正面。保護シール除去後。

ラズパイ(Raspberry Pi)のI2C通信を有効にする

次にラズパイのI2C通信を有効にします

「設定」 → 「RaspberryPi の設定」の順に進みます。

ラズパイのI2C通信を有効にする
ラズパイのI2C通信を有効にする

インターフェースタブで、"I2C" を有効にします。

ラズパイのI2C通信を有効にする
ラズパイのI2C通信を有効にする

これで、ラズパイでI2C通信ができるようになりました。

ToFセンサ(VL53L1X)のI2Cアドレス確認

配線がおわったら、ToFセンサのI2Cアドレスを確認してみましょう。

ラズパイのターミナルに下記コマンドを入力します。

$ sudo i2cdetect -y 1
tofセンサ i2cアドレス
tofセンサ i2cアドレス

ToFセンサのI2Cアドレスが 0x29 であることが分かりました。

スポンサーリンク

ToFセンサ(VL53L1X)のPythonサンプルコード

測距に必要な、Pythonのサンプルコードを紹介します。

VL53L1Xのライブラリのインストール

まず初めに、VL53L1Xのライブラリをインストールします。

ラズパイのターミナルに下記のコマンドを入力します。

$ sudo pip3 install vl53l1x
tofセンサ vl53l1x インストール
vl53l1x用のライブラリ インストール

Pythonのサンプルコード

Pythonのサンプルコードになります。

サンプルコード : ToF_test.py

### ToF_test.py

import VL53L1X
import time

tof = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29)
print("Python: Initialized")
tof.open()
print("Python: Opened")


time_start = time.time()

try :
    while True:


        ### ------------------- get_time ----------------- ###

        time_end = time.time()
        time_elapsed = time_end - time_start

        print("")
        print("--- Time : {:.1f}s ---".format(time_elapsed))



        ### ------------------- get_distance ----------------- ###

        ### --- Short Range --- ###
        tof.start_ranging(1)    # 1 = Short Range
        distance_mm = tof.get_distance()
        print("Short Range Distance: {}mm".format(distance_mm))
        tof.stop_ranging()

        ### --- Medium Range --- ###
        tof.start_ranging(2)    # 2 = Medium Range
        distance_mm = tof.get_distance()
        print("Medium Range Distance: {}mm".format(distance_mm))
        tof.stop_ranging()

        ### --- Long Range --- ###
        tof.start_ranging(3)    # 3 = Long Range
        distance_mm = tof.get_distance()
        print("Long Range Distance: {}mm".format(distance_mm))
        tof.stop_ranging()


        time.sleep(1)

except KeyboardInterrupt:
        print("\nCtrl+C")

※このコードでラズパイ上は動作していますが、サイト移植時にインデントを手打ちしています。

もしエラーが出た場合は、インデント部分を確認いただければと思います。

スポンサーリンク

ToFセンサの動作確認

最後に実際に動作している様子を紹介します。

ToFセンサをラズパイから制御できている様子(動画)

こちらが動画になります。

ToFセンサの各測距モードの特徴確認(簡易実験)

VL53L1Xには、距離に応じた3つの測距モードが用意されてます。

それぞれの測距モードの特徴を確認するために、簡単な実験を行ってみました。

実験環境はこちらです。

ToFセンサの測距精度の簡易確認実験環境
ToFセンサの測距精度の簡易確認実験環境

白い紙を被写体にしています。

ToFセンサと被写体の距離を変えながら、3つの測距モードで測定しています。

なお、ToFセンサから被写体までの距離は、メジャーで適当に測っているので精度はありません。

また、ToFセンサの向きや被写体の向きを正確に正対させているわけではありません。

なんとなくモードごとの特徴を把握できれば良いな、程度の実験なので、

精度についてはあまり参考にしないようにお願いします。

こちらが測定結果になります。

Short RangeMedium RangeLong Range
50cm47.6cm47.5cm46.2cm
100cm96.9cm99.2cm99.8cm
150cm154.9cm156.1cm157.1cm
200cm184.1cm189.5cm192.2cm
250cm204.5cm217.8cm235.1cm
300cm166.9cm205.2cm255.4cm

被写体距離が近い場合は、モードごとに有意差はありませんでしたが、

被写体距離が250cmを超えたあたりから、Short Rangeモードではうまく測定ができなくなりました。

この結果は被写体の反射率や、形状でも変わることが予測されますので、

あくまで参考程度にして頂ければと思います。

スポンサーリンク

まとめ

ToFセンサ(VL53L1X)をラズパイからI2C通信で制御し、測距を行う方法について紹介していきました。

ToFセンサVL53L1Xは、専用のライブラリがあるので、Pythonで簡単に制御することができます。

是非、ToFセンサを使った電子工作にチャレンジしてみてください。

本記事が、皆様の参考になれば幸いです。

スポンサーリンク

-RaspberryPi
-