DE-LIDAR TF02 (ToF) 激光测距

简介

DE-LIDAR TF02是一款基于飞行时间技术的单向激光测距仪。它由特殊的光学和电子设备构成,具有稳定、高灵敏度和高精度的性能特点。 ToF是飞行时间(Time of Flight)的缩写,即传感器发出经调制的近红外光遇物体后反射,通过计算发射与反射的时间差或相位差来换算与被照射物的距离,从而得到深度的信息。 TF02的测距性能在保留原有TF01优点的情况下得到大幅提升,测量频率达到100Hz,拥有22m的量程,测量精度达到了厘米级。由于TF02加强了对异常数据的内部处理,所以拥有更稳定的数据输出和更高的重复测距精度。整机的保护设计基于ip65级,体型小巧,防摔性能更佳,可以防止灰尘、水和各种腐蚀。同时地,它可以抵抗温度、湿度、光线、电子和气流的干扰,能在100K的lux光下工作,十分耐用。

技术规格

  • 最大工作范围:0.4~22m
  • 距离准度:<6cm(5m内)<2%(5m~22m)
  • 测量速度:默认100HZ(最大可调500HZ)
  • 距离分辨率:1cm
  • 重复测量精度:标准差<1(10m 内),标准差<2(10m~22m)
  • 输入电压:4.5~6v
  • 功率:0.6~1w
  • 串口TTL电平:0~3.3v
  • 工作温度:-10°C~60°C
  • 保护级别:IP65
  • 尺寸(长*宽*高):69*46*26
  • 注意事项:
  • 本型号激光雷达测距范围是40~2200cm,若测量距离未在此范围内,则测量数据会异常。
  • 产品调试过程中需要注意产品的默认版本是PIX版本还是标准版本;
  • 本产品采用潮湿敏感型元件,避免储运及工作于高湿度高温度环境中。 避免产品处于酸性或浓硫等较恶劣环境下使用

引脚说明

引脚图

标号 名称 功能描述
红线 VCC 电源正极5V
黑线 GND 电源负极
白线 RXD 串口接收
绿线 TXD 串口输出

使用教程

此处共列出三种方式,旨在让大家对单点激光测距仪有一个直观的认识,该激光测距仪器还可以用在无人机仿地飞行,机器人避障和无人机辅助降落等方面

准备

  • 硬件
    • 1 x LEONARDO V1.2 开发板
    • 1 x IO 传感器扩展板 V7.1
    • 1 x Gravity: I2C LCD1602彩色背光液晶屏
    • 1 x 7.4V 2500MA 锂电池 (带充放电保护板)
    • 1 xGravity: 4Pin传感器转接板
    • 1 xUSB to Serial 转串口
    • 若干 杜邦线
  • 软件

接线图

下列两种连接电路图分别对应相应的程序

  • 接线图1是在需要使用PC端的串口软件来显示检测的距离以及对整个系统供电(使用PC供电时,需要考虑供电是否充足,否则会导致异常如掉串口,以及没有数据)
  • 接线图2只需要加上移动的电源(电压7V-12V)便可以进行移动测试
  • 接线图3是直接使用TF02的官方上位机的接法

PC串口显示

串口显示接法

LCD1602显示(适合室外)

LCD显示接法

上位机

上位机显示接法

代码

PC串口显示

  • 需要使用PC串口工具,读到的数据会显示在串口工具界面

 /*!
  * @file TF02-V1.1.ino
  * @copyright  [DFRobot](http://www.dfrobot.com), 2017
  * @conner Chao.Shi@DFROBOT.com
  * @version  V1.0
  * @date  2017-9-15
  */
  //#include<SoftwareSerial.h>                //软串口头文件
  //SoftwareSerial Serialx(2,3);              //定义软串口名称为 Serialx,并把 pin2 定为 RX,pin3 定为 TX
    #define Serialx Serial1
    int dist;
    int strength;
    int check;
    int i;
    int uart[9];
    const int HEADER=0x59;
  void setup()
   {
    delay(5000);
    Serial.begin(115200);
    Serial.println("hello start");
    Serialx.begin(115200);
   }

  void loop()
 {  //delay(100);
   while(Serialx.available()==0);            //等待数据
   if ( Serialx.available()){
    if( Serialx.read()==HEADER){             //检查帧头1
      uart[0]=HEADER;
      while(Serialx.available()==0);
      if( Serialx.read()==HEADER){           //检查帧头2
        uart[1]=HEADER;
        for(i=2;i<9;i++){
          while(Serialx.available()==0);     //读一组数据,并将数据值写进数组
          uart[i]= Serialx.read();
        }
        check=uart[0]+uart[1]+uart[2]+uart[3]+uart[4]+uart[5]+uart[6]+uart[7];  //检查校验位
        if(uart[8]==(check&0xff)){
          dist=uart[2]+uart[3]*256;          //距离数据处理
          strength=uart[4]+uart[5]*256;      //信号强度数据处理
          Serial.print("dist = ");
          Serial.print(dist);
          Serial.print("cm ");
          Serial.print('\t');
          Serial.print("strength = ");
          Serial.print(strength);
          Serial.print('\n');
        }
      }
    }
  }
}
  • 串口软件显示数据格式如下
 -------------------------DISPLAY--------------------------
 Distance:  1800 cm                Strength: 254

LCD显示


/*!
   @file LCD-TF02-V1.1.ino
   @copyright  [DFRobot](http://www.dfrobot.com), 2017
   @conner  Chao.Shi@DFROBOT.com
   @version  V1.0
   @date  2017-9-15
*/
//#include<SoftwareSerial.h>          //软串口头文件
//SoftwareSerial Serialx(2,3);        //软串口定义
#include <Wire.h>
#include <DFRobot_RGBLCD.h>           //LCD头文件
#define Serialx Serial1
int dist;
int strength;
int check;
int i;
int uart[9];
const int HEADER = 0x59;
unsigned int lcd_r = 0, lcd_g = 0, lcd_b = 0;
unsigned long delaytime = 0, lighttime = 0;
DFRobot_RGBLCD lcd(16, 2);
void setup()
{
  lcd.init();
  delay(5000);
  Serial.begin(115200);
  Serial.println("hello start");
  Serialx.begin(115200);
  lighttime = millis();
  lcd.setCursor(0, 0);
  lcd.print("Dis:");
  lcd.setCursor(0, 1);
  lcd.print("Str:");
  lcd.setRGB(255, 255, 000);
}
void loop() {
  lcd_r = random(256);
  delayMicroseconds(10);
  lcd_g = random(256);
  delayMicroseconds(10);
  lcd_b = random(256);
  if (millis() - lighttime > 3000)
  {
    lcd.setRGB(lcd_r, lcd_g, lcd_b);
    lighttime = millis();
  }
  //delay(100);

  while (Serialx.available() == 0);        //读取数据
  if ( Serialx.available()) {
    if ( Serialx.read() == HEADER) {
      uart[0] = HEADER;
      while (Serialx.available() == 0);
      if ( Serialx.read() == HEADER) {
        uart[1] = HEADER;
        for (i = 2; i < 9; i++) {
          while (Serialx.available() == 0);
          uart[i] = Serialx.read();
        }
        check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
        if (uart[8] == (check & 0xff)) {
          dist = uart[2] + uart[3] * 256;
          strength = uart[4] + uart[5] * 256;
          lcd.setCursor(5, 0);
          lcd.print( dist / 1000);              //LCD显示
          lcd.print( dist / 100 % 10);
          lcd.print('.');
          lcd.print( dist / 10 % 10);
          lcd.print( dist % 10);
          lcd.print(" m");
          lcd.setCursor(5, 1);
          lcd.print(strength / 10000);
          lcd.print(strength / 1000 % 10);
          lcd.print(strength / 100 % 10);
          lcd.print(strength / 10 % 10);
          lcd.print(strength % 10);
        }
      }
    }
  }
}
  • LCD显示屏上显示下列数据格式
Dis: 18.00 m
Str: 00241

上位机

  • 上位机显示距离界面(标准数据格式)
    电路连接图3

常见问题

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png [Link DFRobot商城购买链接]