Adafruit VL53L0X飞行时间距离传感器的使用

电子说

1.2w人已加入

描述

概述

距离传感器

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

要开始读取传感器数据,您将需要安装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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
蒋坤达 2021-02-01
0 回复 举报
国产VI5300完全兼容VL53L0X,VL53L1X,VL53L3X系列,有需要可百度搜VL53L0兼容   收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分