将VL53L0X激光测距仪与Arduino一起使用
在本教程中,我们将探讨如何将VL53L0X激光测距仪与 Arduino 一起使用。该设备允许您使用激光准确测量距离,使其成为机器人和自动化等各种应用的理想选择。在本教程结束时,您将拥有一个功能设置,可以测量距离并将其显示在串行监视器中。

对于我们的项目,我们将使用 Adafruit VL53L0X 库,它简化了与传感器接口的过程。该库提供了初始化传感器、读取测量值和处理可能出现的任何错误所需的功能。您可以参考视频以获取有关设置的视觉指南(在视频 02:15 处)。
硬件解释
该项目的主要组件包括VL53L0X激光测距仪和Arduino板。VL53L0X是一种飞行时间传感器,它使用激光高精度测量长达 2 米的距离。它通过 I2C 协议运行,可以轻松与 Arduino 通信。
Arduino板充当处理来自VL53L0X的数据的微控制器。它向传感器发送命令并接收距离测量值,然后可以在其他应用中显示或使用。正确的接线对于确保传感器的准确读数至关重要。
数据表详细信息
| 制造者 | 意法半导体 |
|---|---|
| 部件号 | VL53L0X |
| 工作电压 | 2.6 V 至 3.5 V |
| 范围 | 30 毫米至 2000 毫米 |
| 准确性 | 典型值 ±3% |
| 接口 | 工业2C |
| 温度范围 | -40 °C 至 +85 °C |
| 电流消耗 | <1 mA(待机),20 mA(有源) |
| 包 | VFLGA-8 型 |
- 确保传感器正确供电(2.6 V 至 3.5 V)。
- 保持正确的 I2C 地址设置以避免冲突。
- 保持传感器清洁,以便进行准确的距离测量。
- 如果需要,在I2C线路上使用适当的上拉电阻。
- 避免阳光直射传感器以获得可靠的读数。
接线说明

要将VL53L0X传感器连接到 Arduino,请将传感器的 VCC 引脚连接到 Arduino 上的 5V 引脚。GND 引脚应连接到 Arduino 的接地 (GND)。对于 I2C 通信,将 VL53L0X 的 SDA 引脚连接到 Arduino 上的 A4 引脚,并将 SCL 引脚连接到 A5 引脚。如果您使用的是不同的 Arduino 型号,请参阅该板的特定 SDA 和 SCL 引脚分配。
例如,在 Arduino Mega 上,您可以将 SDA 连接到引脚 20,将 SCL 连接到引脚 21。确保所有连接都是安全的,以避免通信问题。如果传感器没有响应,请仔细检查接线并确保 Arduino 已正确供电。
代码示例和演练
下面是初始化VL53L0X传感器的设置函数的片段:
void setup() {
Serial.begin(9600);
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
}此代码初始化串行通信并尝试启动VL53L0X传感器。如果传感器无法启动,它将打印错误消息并停止程序。
接下来,这是来自读取距离测量值的循环函数的片段:
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}该模块连续读取传感器的距离测量值并将其打印到串行监视器。如果测量超出范围,则相应地指示这一点。
演示/期待什么
运行程序时,您应该会在串行监视器中看到距离测量值。读数应每 100 毫秒更新一次。如果传感器指向物体,它将以毫米为单位显示距离。如果对象超出范围,它也会指示这一点。确保在其指定范围内测试传感器以获得最佳结果(在 10:00 的视频中)。
视频时间戳
- 00:00-介绍
- 02:15- 接线设置
- 05:30- 代码说明
- 10:00-示范
/*
* 此示例演示了如何使用连续模式与VL53L0X进行范围测量。
* // 原始来源于Adafruit https://github.com/adafruit/Adafruit_VL53L0X
* // Ahmad Shamshiri为RoboJax.com修改
* // 修改日期:2017年9月26日
* // Nejrabi
*
* 从Robojax.com获取此代码和其他Arduino代码
* 在一个结构化的课程中逐步学习Arduino,课程包含所有材料、接线图和库
* 所有内容一应俱全。
*
* 如果您发现这个教程有帮助,请支持我,这样我可以继续创作
* 像这样的内容。
*
* 或使用PayPal捐赠 http://robojax.com/L/?id=64
*
* 此代码为“按原样”提供,未提供任何保证或责任。可自由使用,只要您保留此说明不变。*
* 此代码已从Robojax.com下载
* 此程序是自由软件:您可以在GNU通用公共许可证的条款下重新分发和/或修改
* 它,许可证由自由软件基金会发布,版本为第3版,或
* (您选择的)任何更高版本。
*
* 此程序的发布是希望它对您有用,
* 但不提供任何保证;甚至不包括对
* 适销性或特定用途适用性的默示保证。有关更多详情,请参阅
* GNU通用公共许可证。
*
* 您应该已经收到与此程序一起分发的GNU通用公共许可证的副本。如果没有,请参见<https://www.gnu.org/licenses/>。
*
* 版权所有(c) 2015,Majenko Technologies
* 版权所有。
*
* 在不进行修改的情况下,允许以源代码和二进制形式进行再分发和使用,前提是满足以下条件:
*
* 源代码的再分发必须保留上述版权声明、本
* 条件列表和以下免责声明。
*
* 二进制形式的再分发必须在随分发提供的文档和/或
* 其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
* 除非获得特别的书面许可,否则不得使用Majenko Technologies的名称或其
* 贡献者的姓名来背书或推广来源于
* 该软件的产品。
*
* 此软件由版权所有者和贡献者“按原样”提供,且否认任何明示或暗示的保证,包括但不限于
* 对适销性和特定用途适用性的暗示保证。在任何情况下,版权持有者或贡献者均不对
* 任何直接、间接、附带、特殊、典范或结果性损害负责
* (包括但不限于获取替代商品或服务;
* 使用、数据或利润的损失;或业务中断)无论因何原因及在任何责任理论下,无论是合同、严格责任还是侵权
* (包括过失或其他),由于使用该软件而产生的,即使已被告知可能发生此类损害。
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// 等待串口为本机 USB 设备打开
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// 能量
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // 传入'true'以获取调试数据打印输出!
if (measure.RangeStatus != 4) { // 相位故障的数据不正确
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
资源与参考
-
外部VL53L0X 数据表 (PDF)st.com
文件📁
没有可用的文件。