风筝
发表于: 2019-7-14 21:33:48 | 显示全部楼层

飞行时间TOF是通过各种距离测量传感器(如超声波传感器)测量远处物体距离的常用方法。粒子、声波或物体通过介质行进一段距离所花费的时间的测量被称为飞行时间(TOF)。然后可以使用该测量来计算速度或路径长度。它还可用于了解介质的颗粒或性质,例如成分或流速。可以直接或间接地检测行进物体。


超声波测距装置是使用飞行时间原理的最早的装置之一。这些装置发射超声波脉冲,并根据波形反弹回发射器所需的时间测量到固体材料的距离。飞行时间方法也可用于估计电子迁移率。实际上,它是为低导电薄膜的测量而设计的,后来根据普通半导体进行了调整。该技术用于有机场效应晶体管以及金属 - 电介质 - 金属结构。通过施加激光或电压脉冲,产生过量电荷。

Time-of-flight-Principle-in-Ultrasonic-Sensor.png

使用TOF的超声波传感器距离计算


TOF原理用于测量传感器和物体之间的距离。测量信号在从物体反射后返回传感器所花费的时间,并用于计算距离。 TOF原理可以使用声音、光等各种类型的信号(载波)。当TOF用于测距时,它在发光而非声音时非常强大。与超声波相比,它提供更快的读数、更高的精度和更大的范围,仍然保持其重量轻、体积小和低功耗特性。


在本篇文章中,我们将使用Arduino开发板连接VL6180X TOF测距仪传感器来计算传感器和物体之间的距离。该传感器还告知光强度值(LUX)。


VL6180X飞行时间(ToF)测距仪传感器

VL6180与其他距离传感器不同,因为它使用精确的时钟来测量光从任何表面反射回来所需的时间。这使VL6180比其他传感器更具优势,因为它更准确,不受噪音影响。


VL6180是一款3合1封装,包括红外发射器、环境光传感器和范围传感器。它通过I2C接口进行通信。它有一个板载2.8V稳压器。因此,即使我们插入大于2.8V的电压,它也会自动向下移动而不会损坏电路板。它的测量范围可达25厘米。其中提供了两个可编程GPIO。

VL6180X-ToF-Range-Finder-Sensor.jpg


电路原理图

诺基亚5110 LCD用于显示灯光亮度和距离。诺基亚5110 LCD的工作电压为3.3V,因此无法直接与Arduino Nano数字引脚连接。因此,将10k电阻与数据信号串联,以保护3.3V线路免受5V数字引脚的影响。

nokia-5110-graphical-lcd-display.jpg


VL6180传感器可以直接连接到Arduino开发板。 VL6180和Arduino之间的通信是I2C。实际上,I2C通信协议结合了SPI和UART的最佳功能。在这里,我们可以将多个从站连接到一个主站,我们可以让多个主站控制单个或多个从站。与UART通信一样,I2C使用两条线进行通信SDA(串行数据)和SCL(串行时钟),数据线和时钟线。


使用Arduino连接VL6180 ToF测距仪传感器的电路图如下所示:

Circuit-Diagram-for-connecting-VL6180-ToF-Range-Finder-Sensor-with-Arduino.png


●    通过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引脚

Schematic-for-connecting-VL6180-ToF-Range-Finder-Sensor-with-Arduino.png

Circuit-Hardware-for-connecting-VL6180-ToF-Range-Finder-Sensor-with-Arduino.jpg


为VL6180 ToF传感器添加所需的库

三个库将用于连接VL6180传感器和Arduino。

1. Adafruit_PCD8544

Adafruit_PCD8544是Monochrome Nokia 5110 LCD显示器的库。这些显示器使用SPI进行通信。连接此LCD需要四个或五个引脚。下载此库的链接如下:

https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/archive/master.zip

2. Adafruit_GFX

Arduino的Adafruit_GFX库是LCD显示器的核心图形库,提供了一种通用语法和一组图形基元(点、线、圆等)。它需要与我们使用的每个显示设备的硬件特定库配对(以处理较低级别的功能)。下载此库的链接如下:

https://github.com/adafruit/Adafruit-GFX-Library

3. SparkFun VL6180

SparkFun_VL6180是具有VL6180传感器基本功能的Arduino库。 VL6180由红外发射器、范围传感器和环境光传感器组成,可通过I2C接口进行通信。该库允许您读取传感器的距离和光输出,并通过串行连接输出数据。下载此库的链接如下:

http://downloads.arduino.cc/libraries/github.com/sparkfun/SparkFun_VL6180_Sensor-1.1.0.zip


通过在Arduino IDE中Sketch>>Include library>>Add .ZIP library,逐个添加所有库。然后从上面的链接上传您下载的库。

Adding-NTPClient-Library-Zip-into-Arduino.png


有时您不需要添加Wire和SPI库,但如果您收到错误,请下载并添加到您的Arduino IDE。

https://github.com/PaulStoffregen/SPI

https://github.com/PaulStoffregen/Wire


编程和工作说明

本篇文章结尾i的地方给出了完整代码,这里我们将解释完整的程序,以了解项目的工作情况。


在这个程序中,大多数部分由我们添加的库处理,因此您不必担心这一点。


setup()函数中,将波特率设置为115200,并初始化I2C库的Wire库。然后检查VL6180传感器是否工作正常,如果不工作则显示错误信息。

接下来我们将设置显示,您可以在此处将对比度更改为所需的值,我将其设置为50

  1. void setup()
  2. {
  3.   Serial.begin(115200); //Start Serial at 115200bps
  4.   Wire.begin(); //Start I2C library
  5.   delay(100); // delay .
  6.   if (sensor.VL6180xInit() != 0) {
  7.     Serial.println("FAILED TO INITALIZE"); //Initialize device and check for errors
  8.   };
  9. sensor.VL6180xDefautSettings(); //Load default settings to get started.
  10.   delay(1000); // delay 1s
  11. display.begin();
  12.   // init done
  13.   // you can change the contrast around to adapt the display
  14.   // for the best viewing!
  15.   display.setContrast(50);
  16. display.display(); // show splashscreen
  17. display.clearDisplay();
  18. }
复制代码

void loop()函数中设置指令以在LCD屏幕上显示值。 这里我们显示两个值,一个是“Lux中的环境光水平”(一个Lux实际上是每平方米面积一个流明),第二个是“以毫米为单位测量的距离”。 要在LCD屏幕上显示不同的值,请使用“display.setCursor(0,0);”定义应在LCD屏幕上显示的每个文本的位置。

  1. void loop()
  2. {
  3.   display.clearDisplay();
  4.   //Get Ambient Light level and report in LUX
  5.   Serial.print("Ambient Light Level (Lux) = ");
  6.   Serial.println(sensor.getAmbientLight(GAIN_1));
  7.   display.setTextSize(1);
  8.   display.setTextColor(BLACK);
  9.   display.setCursor(0,0 );
  10.   display.println("Light Level");
  11.   display.setCursor(0,12);
  12.   display.println(sensor.getAmbientLight(GAIN_1));
  13.   //Get Distance and report in mm
  14. Serial.print("Distance measured (mm) = ");
  15.   Serial.println(sensor.getDistance());
  16.   display.setTextSize(1);
  17.   display.setTextColor(BLACK);
  18.   display.setCursor(0, 24);
  19.   display.println("Distance(mm)=");
  20.   display.setCursor(0, 36);
  21.   b = sensor.getDistance();
  22.   display.println(b);
  23.   display.display();
  24.   delay(500);
  25. }
复制代码

上传程序后,打开串行监视器,它应显示如下所示的输出。

Interfacing-VL6180-ToF-Range-Finder-Sensor-with-Arduino.png

VL6180 TOF测距仪用于智能手机、便携式触摸屏设备、平板电脑、笔记本电脑、游戏设备和家用电器/工业设备。


在这里,我们以Lux显示环境光水平,以mm为单位显示距离。

Interfacing-VL6180-ToF-Range-Finder-Sensor-with-Arduino-for-Distance-Measurement.jpg


代码

本文使用的完整代码如下所示: main.rar (754 Bytes, 下载次数: 72)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 21:29 , Processed in 0.160247 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表