1. 产品简介
这是一款64×8矩阵式DTOF全固态激光雷达,具备512个点位同步测距能力。它采用DTOF(直接飞行时间)测距原理,能有效抵抗环境光和温度干扰,确保在室内外常规场景下稳定工作。传感器拥有120°超宽水平视场角和20°垂直视场角,最远测距达5米,其面阵式检测方式可为机器人提供广阔、密集的前方环境信息。
该传感器专为机器人导航设计,能有效解决前向避障与局部盲区检测两大核心问题。它可灵活安装于机器人前方或机械臂等部位,精准识别低矮障碍、家具边角及狭窄通道,及时规避碰撞。此外,它提供UART和Type-C双通讯接口,支持单点、单行或全矩阵数据输出,并配有GUI可视化软件,可实时显示测量数据、深度图与灰度图,使环境感知结果一目了然。
2. 技术规格
传感器参数
| 测距范围 | 100~5000mm@90%反射板/室内,750lux |
|---|---|
| 探测视场角 | 120°(H)×20°(V)>50cm;160°(H)×20°(V)<50cm |
| 测距分辨率 | 14mm |
| 测距精度 | 近距离:±10cm(0.1m~5m,常规物体如卡其色纸箱);±4cm(0.1m~0.5m,90%反射板/室内,750lux)。远距离:±3cm(0.5m~5m,90%反射板/室内,750lux)。 |
| 测距帧率 | 8fps(64×8矩阵面测量);64fps(1×8单行测量) |
| 测距模式 | 连续测距 |
| 矩阵数量 | 64*8共512个测距点 |
| 激光波长 | 905nm |
电源参数
| 供电电压 | 5V |
|---|---|
| 电平电压 | 3.3V |
| 工作电流 | 80mA |
接口参数
| 数据接口 | UART/USB |
|---|---|
| 接口形式 | PH2.0-4P/Type-C |
| 串口默认波特率 | 921600bps |
物理尺寸
| 传感器模组尺寸 | 62×26×24mm |
|---|---|
| 安装孔尺寸 | 直径3.0mm |
| 重量 | 19.6g |
3. 功能指示图

| 序号 | 名称 | 功能描述 |
|---|---|---|
| ① | USB接口 | 供电及数据传输 |
| ② | URAT接口 | 供电及数据传输,线序:5V、GND、RX、TX |
| ③ | 电源指示灯 | 红色LED灯,供电时常亮 |
4. 上位机使用教程
4.1 硬件准备
- 64×8矩阵式DTOF激光雷达(SKU:SEN0682)×1
- RainbowLink USB 协议转换器 (SKU:TEL0185) ×1
- 双头Type-C数据线 ×1
- Gravity-4P 连接线 ×1
4.2 软件准备
本产品配有上位机软件wy3DViewer,在PC端安装打开后,可以查看实时测量数据和成像效果。
- 安装上位机软件,点击此处下载。
4.3 硬件连接
传感器有2种连接方式,一种是通过传感器的USB-C接口直连到PC端的USB-C接口。另一种是传感器的Gravity-UART接口通过一条PH2.0-4P线连接TTL转USB工具,再由工具连到PC端。
【PC端直连】

【通过串口工具】

4.4 PC端操作
- 通过以上任意一种方式将传感器连接到PC端后,打开上位机软件wy3DViewer.exe,并点击运行。
- 进入到设备的点云图界面,界面会实时显示传感器的测量数据和成像效果,如下图。

实时数据功能区说明:
| AVG Clear 按钮 | 清除已累计帧数和计算值。 |
|---|---|
| Current | 当前帧关键点处距离平均值(假设当前帧中心是9个点的平均值,去掉最大最小值,7个值取平均)。 |
| Statistics | 累计帧平均值,使用Current值累计计算平均值。 |
| AVG frames | 累计帧数。 |
| Center | 当前帧中心点的实际距离。 |
| Closest | 当前帧最近点的实际距离。 |
更多功能说明请查看SEN0682-wy3DViewer使用教程-V1.0.pdf。
5. ESP32-E Arudino库示例
5.1 硬件准备
- 64×8矩阵式DTOF激光雷达(SKU:SEN0682)×1
- Firebeetle 2 ESP32-E(SKU:DFR0654)×1
- 双头Type-C数据线 ×1
- Gravity-4P 连接线 ×1
5.2 软件准备
- 下载Arduino IDE:点击此处下载Arduino IDE
- 下载Arduino库:点击此处下载DFRobot_64x8DTOF库
- 对于Arduino IDE V1.8.19(或更早版本),请手动安装库:如何安装库?
5.3 硬件连接

| 传感器引脚 | ESP32-E 主控引脚 |
|---|---|
| VCC | VIN |
| GND | GND |
| TX | RXD(GPIO25) |
| RX | TXD(GPIO26) |
接线前请断主控电源,避免短路造成硬件损坏。传感器必须使用5V供电,禁止接3.3V电源。
5.4 例1:获取单点数据
示例程序:配置64x8 DTOF传感器,读取指定点的XYZ坐标和强度,并通过串行输出。
#include "DFRobot_64x8DTOF.h"
#define LINE_NUM 4
#define POINT_NUM 32
// Instantiate the sensor object
// Use Serial1 for communication, change pins 25/26 to your actual RX/TX pins
DFRobot_64x8DTOF dtof64x8(Serial1, SERIAL_8N1, 25, 26);
void setup()
{
Serial.begin(115200);
while (!Serial);
while (!dtof64x8.begin());
Serial.println("DFRobot 64x8DTOF Single Point Demo");
// Retry configuring frame mode until success
Serial.println("Configuring frame mode: Single Frame...");
while (!dtof64x8.configFrameMode(DFRobot_64x8DTOF::eFrameSingle)) {
Serial.println("Error: configFrameMode failed, retrying...");
delay(200);
}
Serial.println("Configuration Single Frame Successful!");
// 2. Configure Single Point Mode (retry until success)
// Example: Line 4, Point 32 (Center of the sensor roughly)
// Line range: 1-8
// Point range: 1-64
Serial.print("Configuring Single Point Mode (Line ");
Serial.print(LINE_NUM);
Serial.print(", Point ");
Serial.print(POINT_NUM);
Serial.println(")...");
while (!dtof64x8.configMeasureMode(LINE_NUM, POINT_NUM)) {
Serial.println("Configuration Failed, retrying...");
delay(200);
}
Serial.println("Configuration Successful!");
delay(300);
}
void loop()
{
int parsed = dtof64x8.getData(300);
if (parsed > 0) {
char numbuf[16];
Serial.print("Point Data -> ");
Serial.print("X: "); sprintf(numbuf, "%04d", dtof64x8.point.xBuf[0]); Serial.print(numbuf); Serial.print(" mm, ");
Serial.print("Y: "); sprintf(numbuf, "%04d", dtof64x8.point.yBuf[0]); Serial.print(numbuf); Serial.print(" mm, ");
Serial.print("Z: "); sprintf(numbuf, "%04d", dtof64x8.point.zBuf[0]); Serial.print(numbuf); Serial.print(" mm, ");
Serial.print("I: "); Serial.println(dtof64x8.point.iBuf[0]);
} else {
Serial.println("getData timeout or error");
}
delay(500);
}
运行结果:
串口循环输出指定点的X/Y/Z三维坐标(mm)和强度。

- I denotes the intensity of reflected light received by the sensor, with a typical value range of 0-255.
- A higher value indicates better reflectivity of the target surface, and the ranging result is usually more stable.
- A value of 0 may mean the target is beyond the detection range or has excessively poor reflectivity.
5.5 例2:获取单行数据
示例程序:将64x8DTOF传感器配置为单线模式,获取第4行数据(X/Y/Z/I),并通过串行输出错误提示。
#include "DFRobot_64x8DTOF.h"
DFRobot_64x8DTOF dtof64x8(Serial1, SERIAL_8N1, 25, 26);
#define LINE_NUM 4
void setup()
{
Serial.begin(115200);
while (!Serial);
while (!dtof64x8.begin());
Serial.println("Configuring frame mode: Single Frame...");
while (!dtof64x8.configFrameMode(DFRobot_64x8DTOF::eFrameSingle)) {
Serial.println("configFrameMode failed, retrying...");
delay(200);
}
Serial.println("Configuration Single Frame Successful!");
// Configure single line mode (retry until success)
Serial.print("Configured multi-point mode: line=");
Serial.print(LINE_NUM);
Serial.println(")");
while (!dtof64x8.configMeasureMode(LINE_NUM)) {
Serial.println("Configuration failed, retrying...");
delay(200);
}
Serial.println("Configuration successful.");
delay(300);
}
void loop()
{
Serial.println("12345");
int cnt = dtof64x8.getData(300);
Serial.print("Got points: ");
Serial.println(cnt);
if (cnt > 0) {
for (int i = 0; i < cnt; i++) {
char numbuf[16];
Serial.print(1 + i);
Serial.print(": X="); sprintf(numbuf, "%04d", dtof64x8.point.xBuf[i]); Serial.print(numbuf); Serial.print(" mm ");
Serial.print("Y="); sprintf(numbuf, "%04d", dtof64x8.point.yBuf[i]); Serial.print(numbuf); Serial.print(" mm ");
Serial.print("Z="); sprintf(numbuf, "%04d", dtof64x8.point.zBuf[i]); Serial.print(numbuf); Serial.print(" mm ");
Serial.print("I="); Serial.println(dtof64x8.point.iBuf[i]);
}
}else {
Serial.println("getData timeout or error");
}
delay(500);
}
运行结果:串口连续输出第4行64个测量点的数据。

6. 树莓派python库示例
6.1 硬件准备
- 64×8 Matrix DTOF LiDAR (SKU: SEN0682) × 1
- Raspberry Pi 4B (SKU: DFR0619) ×1
- Gravity-4P Connection Cable ×1
- USB-C Data Cable ×1
6.2 软件准备
- 下载 Python 库:点击下载 DFRobot_64x8DTOF library
- 工具准备:MobaXterm_Personal_23.4(远程连接树莓派,可选)
注意:请查看树莓派系统配置,确保成功启用串口通信。
6.3 硬件连接

| 传感器引脚 | 树莓派4B引脚 |
|---|---|
| 5V | 5V(2号引脚) |
| GND | GND(6号引脚) |
| TX | RXD(10号引脚,GPIO15) |
| RX | TXD(8号引脚,GPIO14) |
接线前请断开树莓派电源,避免短路造成硬件损坏;传感器必须使用5V供电,禁止接3.3V电源。
6.4 操作步骤
-
树莓派开机,获取IP地址:192.168..**,并确认树莓派以下配置SSH、Serial Port是否开启。

-
这里借助MobaXterm_Personal_23.4软件,远程连接树莓派。
-
成功连接后,用以下命令行获取本传感器的python库。输入后按回车键Enter。
git clone https://github.com/DFRobot/DFRobot_64x8DTOF
- 成功之后,再输入以下命令行获取例程demox.py。输入后按回车键Enter。
cd DFRobot_64x8DTOF/python/raspberrypi/example/
之后再输入以下命令行。然后可以看到4个demo,如下图所示。
ls

- 例如,要执行01. full_output_demo.py例程,先输入下面命令行,然后按回车键Enter。
python 01.full_output_demo.py
-
等待命令执行后,就可以看到传感器的检测结果。如下图所示。

-
其他python例程可按上述步骤重复操作,这里就不过多赘述了。
8. 串口通讯示例
- 配置串口设置:波特率921600,数据位8,停止位1,校验位NONE。
- 发送设置:勾选转义字符自动解析。
- 发送AT命令末尾需要加换行符。例如:AT+STREAM_CONTROL=1\n

例:查询/设置指定输出范围数据
- 查询指定的输出行及范围
| 关闭雷达帧数据输出 | 发送 AT+STREAM_CONTROL=0\n | 返回 OK |
|---|---|---|
| 查询指定的输出行及范围 | 发送 AT+SPAD_OUTPUT_LINE_DATA? \n | 返回SPAD_OUTPUT_LINE_DATA=1,1,64 |
| 打开雷达帧数据输出 | 发送 AT+STREAM_CONTROL=1\n | 返回 OK |
- 设置指定行及其起始点和结束点
| 关闭雷达帧数据输出 | 发送 AT+STREAM_CONTROL=0\n | 返回 OK |
|---|---|---|
| 设置指定行及其起始点和结束点 | ||
| 输出第一行第5-15点的数据 | 发送AT+SPAD_OUTPUT_LINE_DATA=1,5,15 \n | 返回 OK |
| 输出第一行第32点数据 | 发送AT+SPAD_OUTPUT_LINE_DATA=1,32,32 \n | 返回 OK |
| 输出全部八行数据 | 发送AT+SPAD_OUTPUT_LINE_DATA=0,1,64 \n | 返回 OK |
| 保存参数 | 发送 AT+SAVE_CONFIG\n | 返回 OK |
| 打开雷达帧数据输出 | 发送 AT+STREAM_CONTROL=1\n | 返回 OK |
注:当参数1为0时,固定输出64*8全部数据,此时参数2、3无效。
更多通讯指令请参见SEN0682_配置命令列表文档-V1.0.docx
9. 资料下载
- SEN0682-3D File.zip
- SEN0682-2D File.zip
- SEN0682-尺寸图.pdf
- SEN0682_数据格式说明.doc
- SEN0682_用户配置命令列表.docx
- SEN0682_USB串口驱动.rar
- SEN0682_上位机使用教程.pdf
- SEN0682_上位机软件.zip
10. API 函数库
/**
* @fn DFRobot_64x8DTOF
* @brief 构造函数,传入串口和配置
* @param serial 硬件串口引用
* @param config 串口配置(例如 SERIAL_8N1)
* @param rxPin RX 引脚号(支持重映射的平台可选)
* @param txPin TX 引脚号(支持重映射的平台可选)
*/
DFRobot_64x8DTOF(HardwareSerial &serial, uint32_t config, int8_t rxPin, int8_t txPin);
/**
* @fn begin
* @brief 初始化传感器串口并开启数据流
* @param baudRate 串口波特率(必须为 921600)
* @return bool 如果初始化成功(串口启动并且数据流使能),否则返回 false
* @note 目前 ESP8266 和 AVR平台不被本库支持。
* @note `begin()` 会尝试开启设备的数据流以验证设备是否存在。
*/
bool begin(uint32_t baudRate = 921600);
/**
* @fn getData
* @brief 触发一次并读取原始 x/y/z 值(不滤波)
* @param timeoutMs 超时(毫秒)
* @return 解析到的点数,超时或错误返回 -1
*/
int getData(uint32_t timeoutMs = 300);
/**
* @fn configMeasureMode
* @brief 配置测量输出模式 — 全输出(所有点)
* @return bool 如果配置成功且流控制恢复则为 true,通信错误或设备拒绝时为 false
*/
bool configMeasureMode(void);
/**
* @fn configMeasureMode
* @brief 配置测量输出模式 — 单行
* @param lineNum 要输出的行索引(1..8)
* @return bool 如果配置成功且流控制恢复则为 true,通信错误或参数无效时为 false
*/
bool configMeasureMode(uint8_t lineNum);
/**
* @fn configMeasureMode
* @brief 配置测量输出模式 — 单点
* @param lineNum 包含该点的行索引(1..8)
* @param pointNum 行内的点索引(0..64)
* @return bool 如果配置成功且流控制恢复则为 true,通信错误或参数无效时为 false
*/
bool configMeasureMode(uint8_t lineNum, uint8_t pointNum);
/**
* @fn configMeasureMode
* @brief 配置测量输出模式 — 多点
* @param lineNum 行索引(1..8)
* @param startPoint 行内起始点索引(1..64)
* @param endPoint 行内结束点索引(1..64),必须 >= startPoint
* @return bool 如果配置成功且流控制恢复则为 true,通信错误或参数无效时为 false
*/
bool configMeasureMode(uint8_t lineNum, uint8_t startPoint, uint8_t endPoint);
/**
* @fn configFrameMode
* @brief 配置传感器为单帧或连续帧模式
* @param mode 模式(eFrameSingle 或 eFrameContinuous)
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool configFrameMode(eFrameMode_t mode);
11. 产品兼容性
| 开发平台 | 运行正常 | 运行异常 | 未测试 | 备注 |
|---|---|---|---|---|
| Arduino UNO | √ | |||
| Arduino MEGA2560 | √ | |||
| Arduino Leonardo | √ | |||
| FireBeeetle-M0 | √ | |||
| FireBeeetle-ESP32-E | √ | |||
| ESP8266 | √ |
12. 更多
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。