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

爱上Arduino 20201204

  • 激光测距传感器

之前我们已经介绍如何用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模块感兴趣,
可以在我们的小店里直接购买:



查看全文

点赞

爱上Arduino

作者最近更新

  • Arduino入门13: 电位器和舵机
    爱上Arduino
    2024-06-24
  • 如何检测活人(四):TOF飞行时间测距传感器
    爱上Arduino
    2020-12-04

期刊订阅

相关推荐

  • 日本软银最新推出新一代扫地机器人Whiz

    2018-12-04

  • 国内民用机场采用传感监测平台监控施工质量

    2018-12-09

  • 传感器技术在新型数字化瞄准镜系统中的应用

    2019-06-10

  • 解读传感器军事应用之轻武器视频瞄具

    2019-09-06

评论0条评论

×
私信给爱上Arduino

点击打开传感搜小程序 - 速览海量产品,精准对接供需

  • 收藏

  • 评论

  • 点赞

  • 分享

收藏文章×

已选择0个收藏夹

新建收藏夹
完成
创建收藏夹 ×
取消 保存

1.点击右上角

2.分享到“朋友圈”或“发送给好友”

×

微信扫一扫,分享到朋友圈

推荐使用浏览器内置分享功能

×

关注微信订阅号

关注微信订阅号,了解更多传感器动态

  • #{faceHtml}

    #{user_name}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 查看评论 回复

    共#{comment_count}条评论

    加载更多

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} #{reback} 回复

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 回复

  • 关闭
      广告