TOF或飞行时间是通过各种距离测量传感器(如超声波传感器)测量远处物体距离的常用方法。粒子,波或物体通过介质传播距离所花费的时间的测量称为 飞行时间 (TOF)。然后可以使用该测量来计算速度或路径长度。它也可以用来了解介质的颗粒或特性,例如组成或流速。可以直接或间接检测出行进物体。
超声波测距设备是最早使用飞行时间原理的设备之一。这些设备发出超声波脉冲,并根据波反弹回到发射器所花费的时间来测量到固体材料的距离。我们在许多应用中都使用了超声波传感器来 测量距离:
- 基于Arduino和超声波传感器的距离测量
- 使用Raspberry Pi和HCSR04超声波传感器测量距离
- 如何测量两个超声波传感器之间的距离
飞行时间方法也可以用于估计电子迁移率。实际上,它是为测量低导电薄膜而设计的,后来又针对普通半导体进行了调整。该技术用于有机场效应晶体管以及金属-电介质-金属结构。通过施加激光或电压脉冲,会产生多余的电荷。
该 TOF原理 被用于测量传感器和物体之间的距离。测量信号从物体反射后到达传感器所花费的时间,并用于计算距离。可以使用TOF原理使用各种类型的信号(载波),例如声音,光。当TOF用于测距时,它在发光而不是声音时非常强大。与超声相比,它提供了更快的读取速度,更高的准确性和更大的范围,同时仍保持了其轻巧,小巧和低功耗的特点。
在本教程中,我们将使用带有Arduino的 VL6180X TOF测距仪传感器来计算传感器与物体之间的距离。该传感器还以LUX表示光强度值。
VL6180X飞行时间(ToF)测距仪传感器
VL6180与其他距离传感器不同,它使用精确的时钟来测量光从任何表面反射回去所花费的时间。这使VL6180比其他传感器更具优势,因为它更准确且不受噪声影响。
VL6180是3合1封装, 包括一个IR发射器,一个环境光传感器和一个距离传感器。它通过I 2 C接口进行通信。它具有一个板载2.8V稳压器。因此,即使我们插入大于2.8V的电压,它也会自动降档而不损坏电路板。它 测量范围可达25厘米。其中提供了两个可编程的GPIO。
电路原理图
在这里, 诺基亚5110 LCD 用于显示亮度和距离。诺基亚5110 LCD的工作电压为3.3V,因此无法直接与Arduino Nano数字引脚连接。因此,添加与数据信号串联的10k电阻器可以保护3.3V线路免受5V数字引脚的影响。了解有关将诺基亚5110 LCD与Arduino结合使用的更多信息 。
的 VL6180传感器 可以直接连接到Arduino。VL6180与Arduino之间的通信为I2C。实际上,I2C通信协议结合了SPI和UART的最佳功能。在这里,我们可以将多个从机连接到单个主机,并且可以有多个主机控制一个或多个从机。与UART通信一样,I2C使用两条线分别用于数据线和时钟线SDA(串行数据)和SCL(串行时钟)进行通信。
为电路图 与Arduino的连接VL6180的ToF测距仪传感器 如下所示:
- 通过10K电阻将LCD的RST引脚连接到Arduino的引脚6。
- 通过10K电阻将LCD的CE引脚连接到Arduino的引脚7。
- 通过10K电阻将LCD的DC引脚连接到Arduino的引脚5。
- 通过10K电阻将LCD的DIN引脚连接到Arduino的引脚4。
- 通过10K电阻将LCD的CLK引脚连接到Arduino的引脚3。
- 将LCD的VCC引脚连接到Arduino的3.3V引脚。
- 将LCD的GND引脚连接到Arduino的GND。
- 将VL6180的SCL引脚连接到Arduino的A5引脚
- 将VL6180的SDA引脚连接到Arduino的A4引脚
- 将VL6180的VCC引脚连接到Arduino的5V引脚
- 将VL6180的GND引脚连接到Arduino的GND引脚
添加VL6180 ToF传感器所需的库
三个库将用于将VL6180传感器与Arduino接口。
1. Adafruit_PCD8544
Adafruit_PCD8544是用于单色Nokia 5110 LCD显示器的库。这些显示器使用SPI进行通信。连接此LCD需要四个或五个引脚。下面提供了下载该库的链接:
github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/archive/master.zip
2. Adafruit_GFX
Arduino的Adafruit_GFX库是LCD显示器的核心图形库,提供通用语法和图形基元集(点,线,圆等)。对于我们使用的每个显示设备,它都需要与特定于硬件的库配对(以处理较低级别的功能)。下面提供了下载该库的链接:
github.com/adafruit/Adafruit-GFX-Library
3.金沙线上娱乐场VL6180
SparkFun_VL6180是具有VL6180传感器基本功能的Arduino库。VL6180由一个IR发射器,一个距离传感器和一个环境光传感器组成,它们通过I2C接口进行通信。该库可让您读取传感器的距离和光输出,并通过串行连接输出数据。下面提供了下载该库的链接:
downloads.arduino.cc/libraries/github.com/sparkfun/SparkFun_VL6180_Sensor-1.1.0.zip
进入 草图>>包含库>> 在Arduino IDE中 添加.ZIP库 ,一个接一个地添加所有库 。然后上传从上述链接下载的库。
有时您不需要添加线和SPI库,但是如果遇到错误,请下载并将其添加到Arduino IDE。
github.com/PaulStoffregen/SPI
github.com/PaulStoffregen/Wire
编程及工作说明
本教程的结尾给出了带有工作视频的完整代码,在这里我们将解释完整的程序以理解项目的工作。
在此程序中,大部分零件都由我们添加的库处理,因此您不必担心。
在 设置 部分中,将波特率设置为115200,并初始化I2C的Wire库。然后检查VL6180传感器是否正常工作,如果不正常,则显示错误消息。
在下面的部分中,我们将设置显示,您可以将对比度更改为所需的值,这里我将其设置为50
void setup() { Serial.begin(115200); //以115200bps的 速度 启动Serial Wire.begin(); //启动I2C库的delay(100); //延迟。 如果(sensor.VL6180xInit()!= 0){ Serial.println(“ FAILED TO INITALIZE”); //初始化设备并检查错误 }; sensor.VL6180xDefautSettings(); //加载默认设置以开始使用。 延迟(1000); //延迟1s display.begin(); //初始化完成 //您可以更改对比度以适应显示 //以获得最佳观看效果! display.setContrast(50); display.display(); //显示启动画面 display.clearDisplay(); }
在 空循环 部分中, 设置说明以在LCD屏幕上显示值。这里我们显示两个值,一个是“以勒克斯为单位的环境光水平”(一个勒克斯实际上是每平方米面积一个流明),另一个是“以毫米为单位的距离”。要在LCD屏幕上显示不同的值,请使用“ display.setCursor(0,0);”定义应在LCD屏幕上显示的每个文本的位置。
void loop() { display.clearDisplay(); //获取环境光水平并以LUX Serial.print(“ Ambient Light Level(Lux)=”))报告。 Serial.println(sensor.getAmbientLight(GAIN_1)); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0,0); display.println(“ Light Level”); display.setCursor(0,12); display.println(sensor.getAmbientLight(GAIN_1)); //获取距离并以毫米为 单位 报告Serial.print(“测得的距离(mm)=”); Serial.println(sensor.getDistance()); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0,24); display.println(“ Distance(mm)=”); display.setCursor(0,36); b = sensor.getDistance(); display.println(b); display.display(); 延迟(500); }
上载程序后,打开串行监视器,它应该显示输出,如下所示。
VL6180 TOF测距仪用于智能手机,便携式触摸屏设备,平板电脑,笔记本电脑,游戏设备和家用电器/工业设备。
在这里,我们以“勒克斯”显示环境光强度,以毫米为单位显示 距离。
在 下面找到 完整的程序和演示视频。还要检查如何使用超声波传感器测量距离以及如何使用BH1750环境光传感器测量光水平。