stm32超声波测距代码_如何检测活人(四):TOF飞行时间测距传感器

798214af1752da14bada17b9ad266ae2.png

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

    TOF飞行时间测距传感器    

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

43b458fccab0a69110533344b012fcb3.png

66d2039f9a956184a28e0fc3b9c116a7.png

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

    VL53L0X模块    

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

d174817fb6c4a5a7605b14c448b2203f.png

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

28bfa5042052e6749f8473afb056d42f.png

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

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

模式

更新时间

检测距离

典型应用

默认

30ms

1.2米

标准

高精确度

200ms

1.2米 精确度

精确测量

长距离

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都可以。

54ed53f9efa9663f96b3820b11eaf90d.png

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

248b77e6194431dcc0fa3d6b0b415fb4.png

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

53f6157805c210899bc19353f961e8ba.png

安装好以后,我们重启一下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模块的测距数据:

e18369e495d4209780c33aa53733098c.png

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

917a009e8f97c07a4a821bb2d64d2232.png


如果您对VL53L0X模块感兴趣,可以在我们的小店里直接购买: 798214af1752da14bada17b9ad266ae2.png 409123ccc5e6b4a288be6bc001eae083.png bf8dad72689909b174beb61c2e46f25b.gif 4ff0983a50fba161cf179e51e0bae4f3.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值