2021年07月30日 更新
どうも、クラゲです。
レーザー距離センサVL53LOXをRaspberryPiに接続して、I2C通信で距離を測定します。
レーザー距離センサVL53LOX
http://akizukidenshi.com/catalog/g/gM-12590/
ジャンパー線(オスーメス)
http://akizukidenshi.com/catalog/g/gC-08935/
距離センサ側のXSHUTとGPIO1はNC(Non Connection)、つまりRaspberryPiに接続しなくてOKです。
レーザー距離センサICと外部端子の間にI2Cの電圧変換があり、レーザー距離センサ側はプルアップ抵抗が有り、外部端子側はプルアップ無しです。
一方のRaspberryPiのI2C端子は内部で1.8kΩのプルアップ抵抗があるため、結果としてプルアップ抵抗は不要です。
ラズパイアイコン > 設定
> RaspberryPiの設定
でI2C
を有効
にします。
git cloneします。
git clone https://github.com/johnbryanmoore/VL53L0X_rasp_python.git
移動してmakeします。
cd VL53L0X_rasp_python
make
実行します。
cd python
python3 VL53L0X_example.py
このような画面が出て、100回の測定が終わると自動的に終了します。
ちなみに、レーザーセンサ部に貼ってある保護フィルムを取らないと、正確な距離が出ませんので注意してください。
距離センサを動作させるのに必要なファイルは先程ダウンロードしたフォルダの中にある以下3つです。
この3つを自分の作業ディレクトリにコピーしてください。
vl53l0x_python.so
と VL53L0X.py
はライブラリとしてそのまま活用します。ただし、パス構成が変わったため、VL53L0X.py
の68行目だけを書き換えます。
変更前
tof_lib = CDLL("../bin/vl53l0x_python.so")
変更後
tof_lib = CDLL("./vl53l0x_python.so")
後は、VL53L0X_example.pyの中身を書き換えればオリジナルでコードが出来ます。ファイル名を変えてもOKです。
以下はOpenCVの表示を使ってリアルタイム表示する例です。
import time
import VL53L0X
import cv2
import numpy as np
#黒画像800x600を作成
img = np.zeros((600, 800, 3), np.uint8)
img_disp = img.copy() #img_dispにimgをコピー
# Create a VL53L0X object
tof = VL53L0X.VL53L0X()
# Start ranging
tof.start_ranging(VL53L0X.VL53L0X_BETTER_ACCURACY_MODE)
# 連続測定するときに必要な時間間隔を得る
timing = tof.get_timing()
if (timing < 20000):
timing = 20000
print ("Timing %d ms" % (timing/1000))
while True:
#黒画でキーが押されたら終了
key = cv2.waitKey(1)
if key != -1:
break
#必要な時間間隔を空けてから距離をcm単位にして取得
time.sleep(timing/1000000.00)
distance = tof.get_distance()/10
text = str(distance) + 'cm'
#黒画に距離の文字列を描画
img_disp = img.copy() #img_dispにimgをコピー
cv2.putText(img_disp, text, (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 16)
cv2.imshow('black', img_disp)
#終了処理
tof.stop_ranging()
cv2.destroyAllWindows()
実行の様子
距離センサを動かすとリアルタイムに表示が変更し、キーが押されるまで無限に続けます。
以上、「ラズパイにレーザー距離センサを接続!」でした!