以前我在不同的项目中成功使用过飞行时间(ToF)传感器VL6180X 。 VL6180X非常棒,但最大只能测量20厘米的距离,并且在“扩展模式”下能达到60厘米的距离。在使用距离超过该极限的项目中,合理的选择是VL53L0X,其测量距离在30厘米到100厘米之间,最大可测量200厘米。本文中,我使用的是Adafruit的VL53L0X分线板,但有类似的产品可供选择,如Pololu。
恩智浦K20dx128连接Adafruit VL53L0x传感器
Adafruit的分线板模块(https://www.adafruit.com/product/3317)包含所有需要的电平转换器,并且易于与微控制器连接:
vl53l0x分线板模块
在本文中,我使用的是tinyK20 NXP Kinetis K20DX128微控制器(运行频率为50 MHz的ARM Cortex-M4)。需要的引脚是GND、3.3V(VIN)以及I2C SCL和SDA信号。 GiHub上提供了一个Eclipse(GNU gcc)示例项目。
软件代码 与VL6180X不同,VL53L0X比较复杂,有些难以初始化和运行。 STM意法半导体提供了一个相当繁重的驱动程序库,我发现如果没有该驱动程序库中,则可能无法使用该设备。并且似乎运行传感器所需的初始化序列仅在该驱动程序库“文档化”。所以我花了一段时间才把它弄好,但最后它起作用了:-)。
eclipse中的示例项目文件
我已经集成了STM库文件,并通过vl53l0x.c和vl53l0x.h添加了一个简单的接口。这使得使用传感器相当容易,我在应用程序中所要做的就是初始化传感器,之后我可以在无限循环中读取传感器的距离值: - #include "Application.h"
- #include "LED1.h"
- #include "WAIT1.h"
- #include "CLS1.h"
- #include "PORT_PDD.h"
- #include "Shell.h"
- #include "vl53l0x.h"
-
- void APP_Start(void) {
- int16_t mm;
- uint8_t res;
- int cntr;
-
- /* need pull-up on UART Rx pin (PTC3) on tinyK20 */
- PORT_PDD_SetPinPullSelect(PORTC_BASE_PTR, 3, PORT_PDD_PULL_UP);
- PORT_PDD_SetPinPullEnable(PORTC_BASE_PTR, 3, PORT_PDD_PULL_ENABLE);
-
- CLS1_SendStr("\r\n*****************************\r\nVL53L0X with tinyK20\r\n*****************************\r\n", CLS1_GetStdio()->stdOut);
- /* initialization */
- do {
- res = VL53L0X_Init();
- if (res!=ERR_OK) {
- CLS1_SendStr("ERROR: failed VL53L0X_Init()!\r\n", CLS1_GetStdio()->stdOut);
- WAIT1_Waitms(1000);
- }
- } while(res!=ERR_OK);
-
- cntr = 0;
- for(;;) { /* main loop */
- cntr++;
- if (cntr>60) { /* slow down measurements */
- cntr = 0;
- do {
- res = VL53L0X_MeasureSingle(&mm);
- if (res!=ERR_OK) {
- CLS1_SendStr("ERROR: failed VL53L0X_MeasureSingle()!\r\n", CLS1_GetStdio()->stdOut);
- WAIT1_Waitms(1000);
- }
- } while(res!=ERR_OK);
- CLS1_printf("\r\nRange: %dmm\r\n", mm);
- }
- LED1_Neg();
- WAIT1_Waitms(50);
- SHELL_Parse();
- }
- }
复制代码
这将定期进行测量并在控制台上打印。 此外,该示例还包括命令行(shell)集成,可用于检查传感器状态和数据:
控制台输出
总结 我只使用传感器的基本功能在默认模式下进行“一次性”测量,因为这就是我所需要的。 到目前为止它的效果非常好,我可以精确测量距离达100厘米甚至更远的距离。 您可以在GitHub上找到源代码和项目文件。 |