之前我们已经介绍如何用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使用的例子,稍作包装就可以做一个“激光尺”。