【Arduino】168种传感器系列实验(183)VL53L0X激光测距模块

2021-08-148.5万
精华项目
AI 快速预览详细 收起
本文介绍了使用Arduino与VL53L0X激光测距模块进行ToF测距的实验。通过IIC通信协议,实现了精确的飞行时间测距。文章提供了详细的实验步骤和代码示例,适合初学者和有一定经验的创客。
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议


紫色微型版
【Arduino】168种传感器系列实验(183)VL53L0X激光测距模块图1

【Arduino】168种传感器系列实验(183)VL53L0X激光测距模块图2


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(55)
glwz007
glwz007
谢谢分享!非常详细的教程。
驴友花雕
驴友花雕
作者
回复glwz007
谢谢鼓励!
驴友花雕
驴友花雕
作者
Arduino 系列传感器和执行器模块实验目录清单:
一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
https://mc.dfrobot.com.cn/thread-280845-1-1.html
连杆形式的腿机构十一种:盘点机器人行走背后的机械原理
https://mc.dfrobot.com.cn/thread-308097-1-1.html
【花雕动手做】超低成本,尝试五十元的麦克纳姆轮小车!
https://mc.dfrobot.com.cn/thread-307863-1-1.html
【花雕动手做】超迷你哦,用徽商香烟盒做个智能小车!
https://mc.dfrobot.com.cn/thread-307907-1-1.html
【花雕动手做】太搞笑啦,一支胶管制成二只蠕动机器人
https://mc.dfrobot.com.cn/thread-308046-1-1.html
【花雕动手做】快餐盒盖,极低成本搭建机器人实验平台
https://mc.dfrobot.com.cn/thread-308063-1-1.html
【花雕动手做】特别苗条,使用微波传感器控制的纤细小车
https://mc.dfrobot.com.cn/thread-308866-1-1.html
【花雕动手做】脑洞大开、五花八门的简易机器人66种
https://mc.dfrobot.com.cn/thread-307900-1-1.html
实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
https://mc.dfrobot.com.cn/thread-308195-1-1.html
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
https://mc.dfrobot.com.cn/thread-310371-1-1.html
实验一百六十五:2.4 英寸 TFT LCD 触摸屏模块 XPT2046 PCB ILI9341 240x320 像素 8 位 SPI 串口显示器
https://mc.dfrobot.com.cn/thread-309803-1-1.html
实验一百七十六:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
https://mc.dfrobot.com.cn/thread-309845-1-1.html
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
https://mc.dfrobot.com.cn/thread-310273-1-1.html
实验一百八十五:MAX4466声音传感器 驻极体话筒放大器 麦克风可调功放模块 microphone
https://mc.dfrobot.com.cn/thread-310193-1-1.html
实验一百八十九:TDA1308 硅麦克风 数字咪头放大模块 拾音器放大板 楼氏SUNLEPHANT
https://mc.dfrobot.com.cn/thread-310246-1-1.html
实验一百九十三:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor
https://mc.dfrobot.com.cn/thread-310209-1-1.html
实验二百:RCWL-0515微波雷达感应开关 人体感应 智能感应探测传感器 12-15米远距离2.7G微波检测模块
https://mc.dfrobot.com.cn/thread-310313-1-1.html
实验二百零三:Air724UG合宙 Cat14G模块 DTU物联网UART串口通信数据TCP透传 核心板组合套餐
https://mc.dfrobot.com.cn/thread-310342-1-1.html
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块 NB-IoT广域低功耗无线通信 GPS/北斗精准定位
https://mc.dfrobot.com.cn/thread-310433-1-1.html
驴友花雕
驴友花雕
作者
实验串口绘图器返回情况

驴友花雕
驴友花雕
作者
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
实验开源仿真编程(Linkboy V4.62)
项目之十:串口显示VL53L0X测距波形

驴友花雕
驴友花雕
作者

[backcolor=rgb(255, 255, 255)][font="]实验串口输出情况[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]
[/font][/backcolor]

驴友花雕
驴友花雕
作者

[backcolor=rgb(255, 255, 255)][font="]实验开源仿真编程(Linkboy V4.62)
项目之九:串口显示VL53L0X测距

[/font][/backcolor]
驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font="]实验场景[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]动态图

[/font][/backcolor]
驴友花雕
驴友花雕
作者

实验场景图

驴友花雕
驴友花雕
作者

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
项目之八:使用 VL53L0X 进行范围测量并在 SSD1306 OLED 上显示(mm)
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
项目之八:使用 VL53L0X 进行范围测量并在 SSD1306 OLED 上显示(mm)
模块接线:SSD1306 OLED模块相同
VL53L0X Arduino
VCC 5V
GND GND
SCL A5
SDA A4
*/
#include
#include "Adafruit_VL53L0X.h"
#include
#include
#include
Adafruit_SSD1306 display = Adafruit_SSD1306();
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
// init done
display.display();
delay(1000);
Wire.begin();
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while (1);
}
// text display big!
display.setTextSize(4);
display.setTextColor(WHITE);
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
display.clearDisplay();
display.setCursor(0, 0);
display.print(measure.RangeMilliMeter);
display.print("mm");
display.display();
Serial.println();
delay(50);
} else {
display.display();
display.clearDisplay();
return;
}
}[/code]
驴友花雕
驴友花雕
作者
回复修远
加你了,月月鸟吗
修远
修远回复驴友花雕
你好,我是新手,能解答我的一些困惑吗?
可以的话加一下VX吗
P733000
驴友花雕
驴友花雕
作者

实验串口返回情况

驴友花雕
驴友花雕
作者
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
项目之七:查询VL53L0X模块和SSD1306 OLED模块的IIC地址
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
项目之七:查询VL53L0X模块和SSD1306 OLED模块的IIC地址
模块接线:
VL53L0X Arduino
VCC 5V
GND GND
SCL A5
SDA A4
*/
#include
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}[/code]
驴友花雕
驴友花雕
作者

实验串口绘图器返回情况

驴友花雕
驴友花雕
作者

实验串口返回情况

驴友花雕
驴友花雕
作者

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
项目之六:使用Adafruit_VL53L0X.h库测量距离(范围40mm-1000mm)
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
项目之六:使用Adafruit_VL53L0X.h库测量距离(范围40mm-1000mm)
模块接线:
VL53L0X Arduino
VCC 5V
GND GND
SCL A5
SDA A4
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(115200);
// wait until serial port opens for native USB devices
while (! Serial) {
delay(1);
}
Serial.println("Adafruit VL53L0X test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while (1);
}
// power
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); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}[/code]
驴友花雕
驴友花雕
作者
实验场景图

驴友花雕
驴友花雕
作者

实验串口返回情况

驴友花雕
驴友花雕
作者

[backcolor=rgb(255, 255, 255)][font="]实验开源图形编程(Mind+、Mixly、编玩边学)[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]项目之五:简易测距,设置超范围提示,近距离灯光报警(阙值80毫米)[/font][/backcolor]

驴友花雕
驴友花雕
作者
来自 VL53L0X传感器的参考精度
除了操作模式的设置外,传感器的精度主要取决于被测物体的表面。可以非常精确地测量木材、亚光塑料、纸板等非反射物体。不会反射太多的金属也能提供非常好的效果。使用反射物体(例如玻璃或非常光滑的反射表面)获得的效果明显较差。在实际测试中,对各种物体(塑料、玻璃、金属)进行了不同距离的测量,从中可以得到以下结果:

总而言之,可以说与已知的 Arduino 超声波传感器相比,该传感器要准确得多。实际上,该传感器在 50 到 350 毫米左右的近距离范围内可以很好地使用。应该注意的是,该传感器不是点状测量的,而是具有一个小锥体。这意味着在 30 厘米以上的距离内,可能会出现来自周围物体或表面的清晰反射,进而影响测量。尽管如此,该传感器最多可以测量两米的距离。因此,在对墙壁或天花板进行测量时,即使在超过一米的距离内也能获得精确的结果。另一个影响因素是太阳辐射和多个传感器同时在附近运行。
驴友花雕
驴友花雕
作者

Time of flight(TOF)
中文翻译为“飞行时间”。飞行时间技术在广义上可理解为通过测量物体、粒子或波在固定介质中飞越一定距离所耗费时间(介质/距离/时间均为已知或可测量),从而进一步理解离子或媒介某些性质的技术。TOF的基本原理是通过灯光发射器发射光脉冲,遇到障碍物后反射;接收器接收反射回来的光脉冲,并根据光脉冲的往返时间计算与物体之间的距离。

驴友花雕
驴友花雕
作者

3、测量方式
轮询,测距线程周期调用API测距,获取距离;该方式消耗一定CPU资源。
中断,VL53L0X测量完毕通过GPIO1发送中断信号,通知测距线程读取数据;该方式效率比较高,消耗CPU资源少。
4、测量流程
VL53L0X用户手册提供了一个轮询方式的测距流程图,根据该流程图调用相应的库函数API即可完成一个测量过程。