概述
VL53L0X是飛行時間距離傳感器,與您使用過的其他傳感器不同!該傳感器包含一個很小的不可見激光源和一個匹配的傳感器。 VL53L0X可以檢測“飛行時間”,也可以檢測光線反射回傳感器所花費的時間。由于它使用非常窄的光源,因此僅用于確定直接在其前面的表面的距離是有利的。與反射超聲波的聲納不同,感應的“錐體”非常狹窄。與嘗試測量反射光量的紅外距離傳感器不同,VL53L0x精度更高,并且沒有線性問題或“雙成像”,您無法分辨出物體是很遠還是很近。 p》
這是VL6180X ToF傳感器的“大姐姐”,可以處理大約50-1200 mm的距離。如果您需要更小/更近的范圍,請查看VL6180X,其尺寸為5mm至200mm。
該傳感器體積小,易于在任何機器人技術或交互式項目中使用。由于它需要2.8V電源和邏輯,因此我們將這個小家伙放在了一個帶有穩壓器和電平轉換功能的分線板上。您可以將其與任何3-5V電源或邏輯微控制器一起使用,而無需擔心。每個訂單都帶有一小部分標題。
使用ST編寫的API在I2C上完成與傳感器的通訊,因此將其移植到該端口并不難您最喜歡的微控制器。我們已經為Arduino寫了一個包裝器庫,因此您可以將其與任何兼容Arduino的板一起使用。
傳感能力
在默認模式下,傳感器的尺寸約為50mm至1.2米。
在“遠程”模式下,您可以檢測到在良好的白色反光表面上1.5至2米。
根據環境照明和距離,您將獲得3至12%的測距精度-更好的照明和發亮的表面將為您帶來最佳效果。因為如果物體吸收激光,您將無法獲得良好的讀數。
插腳
VL53L0X是I2C傳感器。這意味著它使用了大多數微控制器上可用的兩條I2C數據/時鐘線,并且可以與其他傳感器共享這些引腳,只要它們沒有地址沖突即可。
默認I2C供以后參考地址為 0x29 。您可以進行更改,但只能在軟件中進行。這意味著您必須連接SHUTDOWN引腳,并在一次重新配置一個傳感器時將除一個傳感器以外的所有傳感器保持復位狀態。
電源引腳:
Vin -這是電源引腳。由于該芯片使用2.8 VDC,因此我們在板載了一個穩壓器,該穩壓器將采用3-5VDC電壓并將其安全地轉換為低壓。要為電路板供電,請為其提供與微控制器邏輯電平相同的功率-例如,對于像Arduino這樣的5V微型電池,請使用5V
2v8 -這是穩壓器的2.8V輸出,如果您愿意,您可以從中獲取100mA電流
GND -電源和邏輯的公共接地
I2C邏輯引腳:
SCL -I2C時鐘引腳,連接到微控制器的I2C時鐘線。
SDA -I2C數據引腳,連接到微控制器的I2C數據線。
控制引腳:
GPIO -這是一個引腳傳感器使用它來指示數據已準備就緒。在進行連續感應時很有用。請注意,此引腳上沒有電平轉換,您可能無法讀取5V微控制器上的2.8V邏輯電平電壓(我們可以在arduino UNO上讀取,但沒有保證)。我們的庫沒有使用此引腳,但對于高級用戶來說,它就在這里!
SHDN -傳感器的關閉引腳。默認情況下,它被拉高。有一個電平轉換二極管,因此您可以在此引腳上使用3-5V邏輯。當該引腳被拉低時,傳感器進入關機模式。
組件
別忘了卸下傳感器的保護蓋,它可能是透明或略帶色的塑料!否則您會得到錯誤的讀數
此頁面顯示VL53L0X或VL6180X傳感器-步驟相同!
準備標題欄:
如有必要,將條切成一定長度。如果將其插入面包板,則焊接會更容易-長按針腳
將分線板放在頂部,這樣插腳的短端就可以穿過所有焊盤了
焊料!
請務必焊接所有引腳以確保可靠性
(有關焊接的技巧,請務必查看我們的《 優良焊接指南》 )。
確定!檢查工作,然后繼續下一步
Arduino代碼
您可以輕松地將此分支連接到任何微控制器,我們將使用Arduino。對于另一種微控制器,只需確保它具有I2C,然后移植API代碼即可。我們強烈建議您使用Arduino來開始!
將 Vin 連接至電源,則3-5V即可。使用微控制器邏輯所基于的相同電壓。對于大多數Arduino,這是5V
將 GND 連接到公共電源/數據地
將 SCL 引腳連接到I2C在Arduino上的時鐘 SCL 引腳上。在基于UNO和‘328的Arduino上,這也稱為 A5 ,在Mega上也稱為 digital 21 ,在Leonardo/Micro上,也稱為數字3
將 SDA 引腳連接到Arduino上的I2C數據 SDA 引腳。在基于UNO&’328的Arduino上,這也稱為 A4 ,在Mega上也稱為 digital 20 ,在Leonardo/Micro上,也稱為數字2
VL53L0X的默認I2C地址為 0x29 !
您可以更改它,但只能在軟件中更改。這意味著您必須連接SHUTDOWN引腳,并在一次重新配置一個傳感器的同時將除一個傳感器以外的所有傳感器保持復位狀態
要開始讀取傳感器數據,您將需要安裝Adafruit_VL53L0X庫。
最簡單的方法是在Arduino IDE中打開 Manage Libraries 。.. 菜單
然后搜索 Adafruit VL53L0X ,然后單擊安裝
我們還提供了有關Arduino庫安裝的出色教程,網址為:
http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use
加載演示
打開演示文件-》示例-》 Adafruit_VL53L0X -》 vl53l0x 并上傳到與傳感器連接的Arduino
就是這樣!現在以115200的速度打開串行終端窗口以開始測試。
上下移動手以讀取傳感器數據。請注意,如果未檢測到任何內容,它將表示讀數超出范圍
使用前,請不要忘記從傳感器上卸下塑料保護蓋!
連接多個傳感器
I2C僅允許每個設備一個地址,因此您必須確保每個I2C設備都有一個唯一的地址。 VL53L0X的默認地址為 0x29 ,但是您可以 在軟件中進行更改。
要設置新地址,可以使用以下兩種方法之一。在初始化期間,不調用lox.begin(),而是調用lox.begin(0x30)將地址設置為0x30。或者,您以后可以隨時撥打lox.setAddress(0x30)。
好消息是它易于更改,令人討厭的部分是每個 other 傳感器都必須位于關掉。您可以通過將 XSHUT 引腳連接到微控制器引腳來關閉每個傳感器。然后執行類似此偽代碼的操作:
通過將所有XSHUT引腳的低電平設置為delay(10)來重置所有傳感器,然后將所有XSHUT的高電平設置為退出重置
通過將XSHUT引腳保持高電平來保持傳感器#1的喚醒狀態
通過將XSHUT引腳拉至低電平來將所有其他傳感器置于關閉狀態
使用lox.begin(初始化傳感器#1 new_i2c_address ),請選擇除0x29以外的任何數字,且該數字必須在0x7F以下。可以將0x30設置為0x3F。
保持傳感器#1處于喚醒狀態,現在通過將其XSHUT引腳設置為高電平使傳感器#2退出復位狀態。
使用以下命令初始化傳感器#2 lox.begin( new_i2c_address )選擇0x29以外的任何數字,以及將第一個傳感器設置為的第一個傳感器
為每個傳感器重復,打開每個傳感器,并設置唯一的地址。
請注意,每次打開電源時,必須每次執行此操作,地址不是永久性的!
Python和CircuitPython
將VL53L0X傳感器與Python和CircuitPython以及Adafruit CircuitPython VL53L0X模塊一起使用很容易。通過該模塊,您可以輕松編寫從傳感器讀取范圍的Python代碼。
您可以在任何CircuitPython微控制器板或具有GPIO和Python的計算機上使用此傳感器,這要歸功于我們的CircuitPython-for Adafruit_Blinka -Python兼容性庫。
CircuitPython微控制器接線
首先,將VL53L0X完全連接到Arduino的前幾頁,將其連接到板上。以下是通過I2C連接將Feather M0連接到傳感器的示例:
板3V 至傳感器VIN
板GND 到傳感器GND
板載SCL 到 sensorSCL
板載SDA 到傳感器SDA
Python計算機接線
由于有數十種Linux計算機/主板可以使用我們將展示Raspberry Pi的接線。對于其他平臺,請訪問Linux上的CircuitPython指南,以了解您的平臺是否受支持。
以下是與I2C相連的Raspberry Pi:
Pi 3V3 至傳感器VIN
Pi GND 到傳感器GND
Pi SCL 到傳感器SCL
Pi SDA 到傳感器SDA
CircuitPython安裝VL53L0X庫 》
您需要在CircuitPython板上安裝Adafruit CircuitPython VL53L0X庫。
首先請確保您正在為板運行最新版本的Adafruit CircuitPython。
下一步,您將需要安裝必要的庫才能使用硬件-請認真按照以下步驟從Adafruit的CircuitPython庫捆綁包中查找和安裝這些庫。我們的簡介指南上有一個很棒的頁面,介紹如何為快速和非表達板安裝庫包。
請記住非表達板,例如,您需要從束中手動安裝必要的庫:
adafruit_vl53l0x.mpy
adafruit_bus_device
您還可以從其發布頁面下載 adafruit_vl53l0x.mpy 。
在繼續之前,請確保您開發板的lib文件夾或根文件系統具有 adafruit_vl53l0x.mpy ,然后 adafruit_bus_device 文件和文件夾 已復制。
下一步連接到開發板的串行REPL,因此您在CircuitPython上》 》》 提示。
VL53L0X庫的Python安裝
您需要安裝Adafruit_Blinka庫,該庫在Python中提供了CircuitPython支持。這可能還需要在您的平臺上啟用I2C并驗證您正在運行Python3。由于每個平臺都略有不同,并且Linux經常更改,請訪問Linux上的CircuitPython指南以準備好您的計算機!
完成后,從命令行運行以下命令:
sudo pip3 install adafruit-circuitpython-vl53l0x
如果您的默認Python是版本3,則可能需要改為運行“ pip”。只要確保您不嘗試在Python 2.x上使用CircuitPython,就不支持它!
CircuitPython和Python用法
為演示傳感器的用法,我們將對其進行初始化,并從開發板的Python REPL中讀取范圍以及更多內容。
運行以下代碼以導入必要的模塊,并初始化與傳感器的I2C連接:
下載:文件
復制代碼
import board
import busio
import adafruit_vl53l0x
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_vl53l0x.VL53L0X(i2c) import board
import busio
import adafruit_vl53l0x
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_vl53l0x.VL53L0X(i2c)
現在您可以從中讀取值了
range -傳感器到物體前面的物體的距離(以毫米為單位)。
下載:文件
復制代碼
print(‘Range: {}mm’.format(sensor.range)) print(‘Range: {}mm’.format(sensor.range))
可以調整測量時間預算以更改傳感器的速度和準確性。獲取并設置 measurement_timing_budget 屬性,該屬性的值以納秒為單位。例如,將計時預算增加到更準確但更慢的200ms值:
下載:文件
復制代碼
sensor.measurement_timing_budget = 200000 sensor.measurement_timing_budget = 200000
有關每秒打印范圍的完整演示,請參見simpletest.py示例。將其保存為板上的 code.py 并檢查REPL輸出以查看每秒打印的范圍。
帶有CircuitPython的VL53L0X!
完整示例代碼
下載:Project Zip 或 vl53l0x_simpletest.py | 在Github上查看
復制代碼
# Simple demo of the VL53L0X distance sensor.
# Will print the sensed range/distance every second.
import time
import board
import busio
import adafruit_vl53l0x
# Initialize I2C bus and sensor.
i2c = busio.I2C(board.SCL, board.SDA)
vl53 = adafruit_vl53l0x.VL53L0X(i2c)
# Optionally adjust the measurement timing budget to change speed and accuracy.
# See the example here for more details:
# https://github.com/pololu/vl53l0x-arduino/blob/master/examples/Single/Single.ino
# For example a higher speed but less accurate timing budget of 20ms:
#vl53.measurement_timing_budget = 20000
# Or a slower but more accurate timing budget of 200ms:
#vl53.measurement_timing_budget = 200000
# The default timing budget is 33ms, a good compromise of speed and accuracy.
# Main loop will read the range and print it every second.
while True:
print(‘Range: {0}mm’.format(vl53.range))
time.sleep(1.0)
# Simple demo of the VL53L0X distance sensor.
# Will print the sensed range/distance every second.
import time
import board
import busio
import adafruit_vl53l0x
# Initialize I2C bus and sensor.
i2c = busio.I2C(board.SCL, board.SDA)
vl53 = adafruit_vl53l0x.VL53L0X(i2c)
# Optionally adjust the measurement timing budget to change speed and accuracy.
# See the example here for more details:
# https://github.com/pololu/vl53l0x-arduino/blob/master/examples/Single/Single.ino
# For example a higher speed but less accurate timing budget of 20ms:
#vl53.measurement_timing_budget = 20000
# Or a slower but more accurate timing budget of 200ms:
#vl53.measurement_timing_budget = 200000
# The default timing budget is 33ms, a good compromise of speed and accuracy.
# Main loop will read the range and print it every second.
while True:
print(‘Range: {0}mm’.format(vl53.range))
time.sleep(1.0)
下載
文件和數據表
數據表
ST產品頁面,其中包括API下載
Adafruit Fritzing庫中的Fritzing對象
EagleCAD PCB GitHub中的文件
Adafruit VL53L0X庫
Pololu Vl53L0X庫
示意圖和構造打印
使用M2.5或#2-56螺釘安裝
責任編輯:wv
-
距離傳感器
+關注
關注
3文章
75瀏覽量
15129
發布評論請先 登錄
相關推薦
評論