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