3089浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 14:31:54

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
  项目之一:使用连续模式进行简易测量(读数以毫米为单位)
   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
  4.   项目之一:使用连续模式进行简易测量(读数以毫米为单位)
  5.   模块接线:
  6.   VL53L0X  Arduino
  7.   VCC        5V
  8.   GND        GND
  9.   SCL        A5
  10.   SDA        A4
  11. */
  12. #include <Wire.h>
  13. #include <VL53L0X.h>
  14. VL53L0X sensor;
  15. void setup() {
  16.   Serial.begin(9600);
  17.   Wire.begin();
  18.   sensor.setTimeout(500);
  19.   if (!sensor.init()) {
  20.     Serial.println("Failed to detect and initialize sensor!");
  21.     while (1) {}
  22.   }
  23.   // Start continuous back-to-back mode (take readings as
  24.   // fast as possible).  To use continuous timed mode
  25.   // instead, provide a desired inter-measurement period in
  26.   // ms (e.g. sensor.startContinuous(100)).
  27.   sensor.startContinuous();
  28. }
  29. void loop() {
  30.   Serial.print(sensor.readRangeContinuousMillimeters());
  31.   if (sensor.timeoutOccurred()) {
  32.     Serial.print(" TIMEOUT");
  33.   }
  34.   Serial.println();
  35. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 15:38:38

                                            


实验串口返回情况

14.jpg
                                                                           
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 15:41:51

本帖最后由 驴友花雕 于 2021-8-15 15:45 编辑

                                            


实验串口绘图器返回情况

15.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 15:45:55

                                            


实际测试,简易激光测距的范围在80—850mm左右

16.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 15:51:37

本帖最后由 驴友花雕 于 2021-8-15 16:43 编辑

                                            


实验场景图

17.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 18:46:32

                                            


【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
  项目之二:使用单发射程模式进行简易测量(读数以毫米为单位,测量范围50mm-2000mm)

  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
  4.   项目之二:使用单发射程模式进行简易测量(读数以毫米为单位,测量范围50mm-2000mm)
  5.   模块接线:
  6.   VL53L0X  Arduino
  7.   VCC        5V
  8.   GND        GND
  9.   SCL        A5
  10.   SDA        A4
  11. */
  12. #include <Wire.h>
  13. #include <VL53L0X.h>
  14. VL53L0X sensor;
  15. // Uncomment this line to use long range mode. This
  16. // increases the sensitivity of the sensor and extends its
  17. // potential range, but increases the likelihood of getting
  18. // an inaccurate reading because of reflections from objects
  19. // other than the intended target. It works best in dark
  20. // conditions.
  21. #define LONG_RANGE
  22. // Uncomment ONE of these two lines to get
  23. // - higher speed at the cost of lower accuracy OR
  24. // - higher accuracy at the cost of lower speed
  25. #define HIGH_SPEED
  26. //#define HIGH_ACCURACY
  27. void setup()
  28. {
  29.   Serial.begin(9600);
  30.   Wire.begin();
  31.   sensor.setTimeout(500);
  32.   if (!sensor.init())
  33.   {
  34.     Serial.println("Failed to detect and initialize sensor!");
  35.     while (1) {}
  36.   }
  37. #if defined LONG_RANGE
  38.   // lower the return signal rate limit (default is 0.25 MCPS)
  39.   sensor.setSignalRateLimit(0.1);
  40.   // increase laser pulse periods (defaults are 14 and 10 PCLKs)
  41.   sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
  42.   sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
  43. #endif
  44. #if defined HIGH_SPEED
  45.   // reduce timing budget to 20 ms (default is about 33 ms)
  46.   sensor.setMeasurementTimingBudget(20000);
  47. #elif defined HIGH_ACCURACY
  48.   // increase timing budget to 200 ms
  49.   sensor.setMeasurementTimingBudget(200000);
  50. #endif
  51. }
  52. void loop(){
  53.   Serial.print(sensor.readRangeSingleMillimeters());
  54.   if (sensor.timeoutOccurred()) {
  55.     Serial.print(" TIMEOUT");
  56.   }
  57.   Serial.println();
  58. }
复制代码

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 18:49:55

                                            


实验串口返回情况

18.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 18:54:38

                                            


实验串口绘图器返回情况

19.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 19:25:05

                                            


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

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


20.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 19:27:15

                                            


实验串口返回情况

21.jpg
   
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 19:37:42

本帖最后由 驴友花雕 于 2021-8-15 19:39 编辑

                                            


实验串口绘图器返回情况

22.jpg
   
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 20:09:16

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
  项目之四:简易测量距离(读数以毫米为单位,可测范围40mm-2200mm)
  模块接线:
  VL53L0X  Arduino
  VCC        5V
  GND        GND
  SCL        A5
  SDA        A4

  实验开源代码

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

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 20:13:14

                                            


实验串口返回情况

23.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-15 20:16:07

                                            


实验串口绘图器返回情况

24.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 07:13:02

                                            


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

单次测量,只测量一次,测量完毕处于待机状态,需再一次触发才会测量
连续测量,启动测量后会连续测量,除非用户主动停止
定时测量,用户指定测量周期的连续测量

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

25.jpg

  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 07:15:26

                                            


3、测量方式
轮询,测距线程周期调用API测距,获取距离;该方式消耗一定CPU资源。
中断,VL53L0X测量完毕通过GPIO1发送中断信号,通知测距线程读取数据;该方式效率比较高,消耗CPU资源少。


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


26 (1).jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 07:28:59

                                            


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

27.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 07:36:55

本帖最后由 驴友花雕 于 2021-8-16 07:44 编辑

                                            


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

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


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 09:12:44

                                            


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

29.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 09:15:41

                                            


实验串口返回情况

30.jpg
  
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-8-16 09:19:00

本帖最后由 驴友花雕 于 2021-8-16 09:20 编辑

                                            


                                            
实验场景图    WeChat_20210816090848.gif

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail