DE-LIDAR TF02 (ToF) 激光测距

简介

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

技术规格

引脚说明

引脚图

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

使用教程

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

准备

接线图

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

PC串口显示

串口显示接法

LCD1602显示(适合室外)

LCD显示接法

上位机

上位机显示接法

代码

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);
        }
      }
    }
  }
}

上位机

常见问题

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

更多

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