ToF激光测距VL53L0X及直测干涉图样实验
我用VL53L0X的本意,是打算直接测量干涉水面上的某些质点,其振幅较相干波源之振幅为相加之和,以数据观察之,可直观说明振动加强及加强区的存在;而某些质点,若调整相干波源为相等之振幅,则可见其永不振动,藉此以说明振动减弱及减弱区的存在。
初心不忘。于今日尝试后,发现VL53L0X之精确度不甚好。但VL53L0X并非易用之物,我于百度、bing、墙外没少翻找资料,另有些内容则是DataSheet里面的。
VL53L0X封装形式比较多,各种各样、琳琅满目。我用的是ATK-VL53L0X封闭,淘宝上50元一片。
一.VL53L0X激光测距模块
据说VL53L0X身上有很多专利,是一款看起来朴素、但实际很高端的测距传感器。它用激光飞行时间来测量距离。
VL53L0X自带一个激光光源和检测器,用来检测“飞行时间(ToF)”获知距离。因为光源方向性好、光锥小,不依赖反射光量(内部为单光子雪崩二极管阵列),没有线性问题、无“双重成像”也(这会造成无法判断物体是非常远还是非常近),因此VL53L0X更精确。 少有VL53L0X的实验能说明它能否精确到1mm——但多数资料表明它能精确达到1cm以上的精度。
我的实验是,VL53L0X在大于6mm距离以上时,仍然能够正常测量、准确测量。但是,Adafruit VL53L0X Time of Flight Micro-LIDAR Distance Sensor Breakout里面则说到:“This is the 'big sister' of the VL6180X ToF sensor, and can handle about 50 - 1200 mm of range distance. If you need a smaller/closer range, check out the VL6180X which can measure 5mm to 200mm.”VL53L0X还有一个妹妹VL6180X,可以测到5毫米至200毫米范围,精度可达1mm。我去淘宝上查了下,比VL53L0X便宜得多。
二.接线、Adafruit库和代码
部分VL53L0X的封装为使用者留出了最小的4个必要的引脚,但多数为6脚均引出。
VL_INT是中断脚,VL_XSH是片选使能,这两个不用连。然后只剩下SDA、SCL及VDD和GND。在Arduino UNO/Nano上面的连线是相同的VL_SDA-SDA/A4、SCL-SCL/A5。
然后便是需要注意的事。
1.Adafruit库的安装。
Adafruit VL53L0X库的安装不能直接下载了库,然后直接放在libraries里了事,因为它有其他库的依赖,最好到IDE里安装。
然后我们会看到它依赖3个Ada的库。当然要选择Install all。
然后不但得到了包含VL53L0X的4个下载目录。它们需要联合使用。打开示例文件,进入编译。
2.编译和上传。
不论是Uno还是Nano,在编译上传的时候,经常发生上传出错、一直在上传等症状,这些问题可以通过按一下Arduino板上的复位键来解决。另外是Nano,除了把板卡设成Arduino Nano之外,还要注意尝试一下是否需要把处理器设置成ATmega328p(Older Bootloader)。有些Nano的引导程序是旧版的,有的则是新的。有人说以2018年之前和之后生产的Nano为界,总之尝试即可,即使错了,也不会损毁开发板。
三.3个实验
0.设备搭建。不解释。
1.水面高度变化
在酸奶盒中倒入水,测量倒水的过程中,水面的上升。
实测,水深10mm多一点儿,与VL53L0X测量值比较接近。
2.水面的振动。
让水杯倾斜,当水面静止时,突然把水杯放正直,水面即开始振动,观 察水面振动情况。
不必仔细调整,这样的大幅振动,很容易就检测到了。但透明的水、水面本身的凹凸不平等等情况,可能使测量并不能真正反映水面的高低变化情况,亦即,幅度的增减,并不只和水面振动逐渐减弱有关。
3.测量水面的两个相干波源干涉情况。
数据非常不好,VL53L0X不够精确,我们得不到稳定的波包图线。
其实好与不好又有什么重要呢?我们总是报有一种希冀与期望,企盼一切都会好,然后就在企盼中走下去。