你好!欢迎来到深圳市品慧电子有限公司!
语言
当前位置:首页 >> 技术中心 >> 传感技术 >> 如何检测活人(四):TOF飞行时间测距传感器

如何检测活人(四):TOF飞行时间测距传感器


之前我们已经介绍如何用PIR人体红外、超声波测距还有雷达微波模块来检测活人/物体接近,今天我们再介绍一种传感器--飞行时间测距传感器,也叫激光测距传感器。


????TOF飞行时间测距传感器????


TOF(Time of Flight) 飞行时间测距传感器的工作原理和超声波测距的原理非常相似,只不过TOF传感器发射的不是声波,而是特定波长的激光。通过光束反射回来的时间T以及已知的光速(3×10^8米/秒),就可以算出距离L。有些TOF是利用相位差,

与传统的PIR人体红外传感器被动地感应红外线不同,TOF传感器会主动发射特定波长(常见的是940nm不伤眼的非可见激光)的方向性一致的光束,这样能较好地排除掉日光等外部光源的干扰,而且光传播的速度远远快于声音传播的速度。测距时间短,精度高,而且体积又很小。这是TOF传感器被广泛地运用到各种电子产品上,普通到比如皂液器、干手机等卫浴产品,高级到比如无人机、无人汽车、扫地机器人、智能手机的相机等等。


????VL53L0X模块????


市面上有很多TOF传感器,它们的能探测的范围,反应时间、成本都不尽相同,本篇我们着重介绍的是由ST(意法半导体)推出的基于VL53L0X芯片的TOF测距模块。

VL53L0X模块主要由VL53L0X芯片和一些外围支持元件构成。VL53L0X芯片上集成了激光发射和接受模块,上面有两个孔,大一点的就是发射孔,它以35度扩散角向外射出940nm波长的不可见光。

VL53L0X虽然探测精度虽然比较高,但测距范围并不长,只有2米以内。VL

53L0X一共有四种测距模式:


模式

更新时间

检测距离

典型应用

默认

30ms

1.2米

标准

高精确度

200ms

1.2米 精确度<±3%

精确测量

长距离

33ms

2米

长距离,仅昏暗条件(无红外线干扰)

高速

20ms

1.2米 精确度±5%

精确度非首要考虑条件


VL53L0X模块基本参数:

  • 工作电压:2.8V-5V

  • 测距范围:3cm - 200cm

  • 通信接口:I2C


????Arduino控制VL53L0X模块????


接下去,我们实际操作一下,如何用Arduino控制VL53L0X模块。一般VL53L0X模块有6个引脚,我们只需要用到电源针脚(VCC+GND)和I2C针脚(SCL和SDA),GPIO1和XSHUT不用接,VCC接5V或3.3V都可以。

如下图连接好Arduino和VL53L0X模块。

打开Arduino IDE,我们还需要安装VL53L0X模块的库文件。在Sketch(程序)>Include Library(加载库)>Manage Libraries(管理库)打开库管理器,搜索VL53L0X,我们安装Adafruit最新版的VL53L0X库即可。

安装好以后,我们重启一下Arduino IDE,从文件>示例>Adafruit_VL53L0X>vl53l0x打开,或者直接复制以下代码:


#include?"Adafruit_VL53L0X.h"?//引入VL53L0X库文件

Adafruit_VL53L0X?lox?=?Adafruit_VL53L0X();?//创建VL53L0X实例

void?setup()?{
??Serial.begin(115200);

??//?等待串口启动
??while?(!?Serial)?{
????delay(1);
??}
??
??Serial.println("Adafruit?VL53L0X?test");
??if?(!lox.begin())?{?//启动VL53L0X
????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);
}


上传烧录,然后打开Arduino IDE的串口监视器。选择115200的波特率,我们就可以看见VL53L0X模块的测距数据:

可以看到,虽然测距范围有限,但VL53L0X模块的测距精度是非常高的(毫米级),Adafruit库的示例里还有VL53L0X模块配合OLED使用的例子,稍作包装就可以做一个“激光尺”。




如果您对VL53L0X模块感兴趣,
可以在我们的小店里直接购买:



用户评论

发评论送积分,参与就有奖励!

发表评论

评论内容:发表评论不能请不要超过250字;发表评论请自觉遵守互联网相关政策法规。

深圳市品慧电子有限公司