【雕爷学编程】Arduino动手做(158)---VL53L0X激光测距模块2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十八:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议

 

实验开源图形编程(Mind+、编玩边学)

项目之三:简易测距(串口显示动态数据)

 

实验串口返回情况

实验串口绘图器返回情况

 

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十八:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议

  项目之四:简易测量距离(读数以毫米为单位,可测范围40mm-2200mm)

  模块接线:

  VL53L0X  Arduino

  VCC      5V

  GND      GND

  SCL      A5

  SDA      A4

  实验开源代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
 
 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 
  实验一百五十八:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
 
 项目之四:简易测量距离(读数以毫米为单位,可测范围40mm-2200mm)
 
 模块接线:
 
 VL53L0X Arduino
 
 VCC    5V
 
 GND    GND
 
 SCL    A5
 
 SDA    A4
 
*/
 
 
 
#include <VL53L0X.h>
 
#include <Wire.h>
 
VL53L0X sensor; //Create the sensor object
 
int startTime = millis(); //used for our timing loop
 
int mInterval = 100; //refresh rate of 10hz
 
void setup() {
 
 Serial.begin(57600);
 
 Wire.begin(); //Setup your I2C interface
 
 Wire.setClock(400000); // use 400 kHz I2C
 
 sensor.setTimeout(500); //Set the sensors timeout
 
 if (!sensor.init())//try to initilise the sensor
 
 {
 
  //Sensor does not respond within the timeout time
 
  Serial.println("VL53L0X is not responding, check your wiring");
 
 }
 
 else
 
 {
 
  //SET THE SENSOR TO LONG RANGE MODE
 
  // lower the return signal rate limit (default is 0.25 MCPS)
 
  sensor.setSignalRateLimit(0.1);
 
  // increase laser pulse periods (defaults are 14 and 10 PCLKs)
 
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
 
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
 
  sensor.setMeasurementTimingBudget(40000); //Set its timing budget in microseconds longer timing budgets will give more accurate measurements
 
  sensor.startContinuous(50); //Sets the interval where a measurement can be requested in milliseconds
 
 }
 
}
 
void loop() {
 
 //We have to be careful here. If we request a measurement before the measurement has been taken your
 
 //code will be blocked until the measurement is complete. In order to stop this from happening we
 
 //must ensure that time between measurement requests is greater than the timing budget and the argument
 
 //given in the startContinuous() function. In our case our measurement time must be greater than 50mS.
 
 if ((millis() - startTime) > mInterval)
 
 {
 
  Serial.println(sensor.readRangeContinuousMillimeters()); //Get a reading in millimeters
 
  startTime = millis();
 
 }
 
 delay(80);
 
}

  

实验串口返回情况

 

实验串口绘图器返回情况

 

VL53L0X的测量功能

1、测量模式

VL53L0X提供三种测量模式,分别是单次测量(Single ranging)、连续测量(Continuous ranging)、定时测量(Timed ranging)。

单次测量,只测量一次,测量完毕处于待机状态,需再一次触发才会测量

连续测量,启动测量后会连续测量,除非用户主动停止

定时测量,用户指定测量周期的连续测量

2、测量精度

VL53L0X提供四种测距精度选择,默认配置、高速测距、高精度测距、长距离测距。这四种模式的适用于不同场合,优缺点互补。

 

3、测量方式

轮询,测距线程周期调用API测距,获取距离;该方式消耗一定CPU资源。

中断,VL53L0X测量完毕通过GPIO1发送中断信号,通知测距线程读取数据;该方式效率比较高,消耗CPU资源少。

4、测量流程

VL53L0X用户手册提供了一个轮询方式的测距流程图,根据该流程图调用相应的库函数API即可完成一个测量过程。

 

Time of flight(TOF)

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

 

来自 VL53L0X传感器的参考精度

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

 

 

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

 

实验开源图形编程(Mind+、编玩边学)

项目之五:简易测距,设置超范围提示,近距离灯光报警(阙值80毫米)

 

实验串口返回情况

Arduino实验场景图

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百五十八:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议

  项目之六:使用Adafruit_VL53L0X.h库测量距离(范围40mm-1000mm)

  实验开源代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
 
 【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);
 
}

  

实验串口返回情况

 

实验串口绘图器返回情况

 

 

posted @   行者花雕  阅读(291)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示