SEN0504 TF02-i LiDAR 激光测距 (40m)

简介

TF02-i LiDAR 是一款工业级中距离测距传感器,最大测量距离可达40m,帧率1-1000Hz可调。它有一个 PC/ABS/PMMA 外壳,具有 IP65 防水和防尘性能。它支持宽范围的输入电压(7-30V),具有反向保护用来保护内部电路,采用RS485通讯接口,标准Modbus 协议,内置多种操作模式,供用户更改参数和配置以满足不同的应用。TF02-i雷达可以通过TTL转485扩展板在Arduino UNO R3上使用,也可通过usb转485模块在树莓派上使用,DF会提供这两个方式的使用方法,让TF02-i激光雷达使用起来更加简单。

TF02-i雷达如何工作? TF02-i是基于脉冲飞行时间(PTOF)的单点LiDAR,它采用非相干能量接收方式,主要是基于脉冲计数的检测。TF02-i发射窄脉冲激光,经透射透镜准直形成准直光,被被测目标反射后进入接收系统,通过接收透镜聚焦于APD探测器。通过电路放大和滤波计算发射信号和接收信号之间的时间,并通过光速计算TF02-i与被测目标之间的距离。

特点

应用场景

技术规格

尺寸图

引脚示意图

标号 名称 功能描述
红色 VCC 7-30V电源供电
黄色 RS485-B RS485-B线
绿色 RS485-A RS485-A线
N/A / /
橘黄色 UART_RXD 串口接收(调试)
棕色 UART_TXD 串口发送(调试)
黑色 GND 地线

请勿将串口调试线与RS485线混接,否则会导致雷达MCU损坏。

使用教程

准备

在Arduino上使用方法

烧录代码前,先将扩展板的开关拨到OFF端,代码烧录完成后,开关拨到ON端,串口波特率选择115200.

请勿将串口调试线与RS485线混接,否则会导致雷达MCU损坏。

连接图

示例代码

uint8_t Com[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0a};
void setup()
{
  Serial.begin(115200);    //初始化串口
}
void loop()
{
  int Distance =readDistance();
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" CM");
  delay(500);
}

int readDistance(void)
{
  uint8_t Data[10] = {0};
  uint8_t ch = 0;
  bool flag = 1;
  int Distance = 0;
  while (flag) {
    delay(100);
    Serial.write(Com, 8);
    delay(10);
    if (readN(&ch, 1) == 1) {
      if (ch == 0x01) {
        Data[0] = ch;
        if (readN(&ch, 1) == 1) {
          if (ch == 0x03) {
            Data[1] = ch;
            if (readN(&ch, 1) == 1) {
              if (ch == 0x02) {
                Data[2] = ch;
                if (readN(&Data[3], 4) == 4) {
                  if (CRC16_2(Data, 5) == (Data[5] * 256 + Data[6])) {
                    Distance = Data[3] * 256 + Data[4];
                    //Serial.println(Distance);
                    flag = 0;
                  }
                }
              }
            }
          }
        }
      }
    }
    Serial.flush();

  }
  return Distance;
}

uint8_t readN(uint8_t *buf, size_t len)
{
  size_t offset = 0, left = len;
  int16_t Tineout = 500;
  uint8_t  *buffer = buf;
  long curr = millis();
  while (left) {
    if (Serial.available()) {
      buffer[offset] = Serial.read();
      offset++;
      left--;
    }
    if (millis() - curr > Tineout) {
      break;
    }
  }
  return offset;
}

unsigned int CRC16_2(unsigned char *buf, int len)
{
  unsigned int crc = 0xFFFF;
  for (int pos = 0; pos < len; pos++)
  {
    crc ^= (unsigned int)buf[pos];
    for (int i = 8; i != 0; i--)
    {
      if ((crc & 0x0001) != 0)
      {
        crc >>= 1;
        crc ^= 0xA001;
      }
      else
      {
        crc >>= 1;
      }
    }
  }

  crc = ((crc & 0x00ff) << 8) | ((crc & 0xff00) >> 8);
  return crc;
}

在树莓派上使用教程

1、接线图

2、安装wiringpi库

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb   //下载wiringpi库
sudo dpkg -i wiringpi-latest.deb  //安装wiringpi库
cd Desktop/          //进入桌面目录
git clone https://github.com/DFRobotdl/TF02-i.git     //下载示例代码并保存在桌面
cd TF02-i/

3、查看usb设备

在终端输入

sudo ls -l /dev

找到刚刚接入树莓派的usb设备(每次usb设备接入树莓派,设备端口都会变化,所以每次接入树莓派都需要查看实际的端口)

4、编译并运行示例代码

使用终端打开程序所在的文件夹,编译并运行

gcc -Wall -lwiringPi -o TF02 TF02.c
sudo ./TF02

最后就能看到准确的测量距离值了

常见问题

还没有客户对此产品有任何问题,欢迎通过 qq 或者论坛联系我们! 更多问题及有趣的应用,可以访问论坛进行查阅或发帖

更多

DFRobot 商城购买链接

TF02-i 通讯协议说明书.pdf