产品简介
固件已更新至V1.3,请尽快更新:
修正了无效值固定不变的bug。现更改为无效后统一变为4000,推荐更新。
固件下载链接:
8*8矩阵激光雷达测距传感器是一款紧凑高效的 3D 深度感知解决方案,填补了简单距离传感器与复杂深度摄像头之间的空白。它由运行在 RP2040 微控制器上的板载固件驱动,能够在 60°视场内的 8×8 矩阵 64 个点上实时提供深度数据,检测范围可达 3.5 米。该传感器具有低功耗和即插即用的特点,非常适合机器人技术、互动艺术、手势识别和智能自动化。支持 Arduino、micro:bit、ESP32和 LattePanda,助力开发智能避障、无接触手势控制和沉浸式互动装置等高级应用。
它不仅仅看到一个点,而是生成一个 64 像素的深度图,提供环境上下文——障碍物、通畅路径、桌沿等。这使得导航更加平滑智能,无需复杂的高级摄像头处理和计算。凭借实惠的价格和超低功耗,它为各种创意项目提供了“恰到好处”的 3D 视觉水平。
这款矩阵式激光测距传感器专为创客工作方式而设计,几乎可以与工作台上的大多数平台无缝连接。
- 支持平台:开箱即用,兼容 Arduino、micro:bit、ESP32和 LattePanda。
- 编程方式:无论是使用 Arduino IDE,还是图形化编程工具 Mind+ 和 MakeCode,都提供完善的库与教程。
- 连接方式:支持 Gravity-I2C 接口、UART 连接,或通过 USB-C 直接接入电脑。
- 级联支持:提供 4 个可切换 I2C 地址,可级联多达 4 个传感器,扩展更广阔的视野。
除了即插即用功能外,8*8矩阵ToF传感器还可以作为一个灵活的开发平台。其板载的 RP2040 处理器允许开发者加载自定义固件或运行轻量级机器学习模型(TinyML),从而实现识别特定手势、检测运动模式或直接在传感器上添加新功能。凭借开源原理图和全面的文档支持,该模块可以针对高级机器人技术、物联网和人工智能驱动的应用进行定制,远不止是一个固定功能的传感器。
#产品特点
- 8x8 矩阵式测距: 64 个独立距离点,实现高分辨率物体识别和距离测量。
- 高精度测距: 测量距离范围可达 4 米,精度可达 ±5mm。
- 快速响应: 测量速率最高达 60Hz,满足实时应用需求。
- 多目标识别: 可同时识别多个目标,并分别测量其距离。
- 丰富接口: 支持 I2C、UART、USB 3种通讯方式,方便与主控芯片连接。
应用场景
- 机器人导航:实现顺畅的避障和跌落检测。
- 手势控制:为智能设备提供新颖的非接触式交互。
- 互动装置:艺术展示,如“跟随眼睛”或反应式照明。
- 智能自动化:定向入口监测与智能房间感应。
规格参数
-
矩阵式激光测距传感器数量:×1
-
供电电压:3.3V-5V
-
数据接口:I2C/UART/USB
-
接口形式:PH2.0-4P(Gravity线序)
-
矩阵数量:8*8 共64个测距点
-
I2C地址:0x30/0x31/0x32/0x33 四种可调
-
串口波特率:115200bps(固定值,不可修改)
-
固件更新:USB接口更新
-
测距模式:连续测距
-
测距速度:15Hz-60Hz
-
测距范围:20mm-4000mm
-
测距精度:在 20 - 200mm 范围内,白色目标精度为 ±11mm,浅灰色目标精度为 ±12mm,灰色目标精度为 ±12mm;在 200 - 4000mm 范围内,白色目标精度为 ±5%,浅灰色目标精度为 ±6%,灰色目标精度为 ±6%。
-
测距角度:水平 60°、垂直 60°、对角 90°
-
激光安全等级:符合 Class 1 激光安全标准。
功能指示图
产品尺寸图
单位:mm
矩阵布局示意图
Arduino使用教程
工具准备
- DFR0654: FireBeetle ESP32-E主板 *1
- SEN0628: 矩阵激光测距传感器 *1
- PH2.0-4P数据线 *1
- USB TYPE-C数据线 *1
- Arduino库下载地址:https://github.com/DFRobot/DFRobot_MatrixLidar
I2C通讯
硬件连接
将开关拨到如图所示的位置:
- 此时,通讯方式设置为I2C模式。查表得知,此时的I2C地址为0x33。
- 每次切换I2C地址,或I2C\UART功能时,需断开电源重启才能生效。
接线图:
示例1:通过I2C读取4*4矩阵数据
程序说明:
- 该示例演示了如何读取16个矩阵的距离值,并在串口监视器中显示出来。
- 该示例代码也可在ArduinoIDE的文件>示例>DFRobot_MatrixLidar>I2C>get4 4data中找到,如下图所示:
示例代码:
#include "DFRobot_MatrixLidar.h"
DFRobot_MatrixLidar_I2C tof(0x33); //默认I2C地址0x33
uint16_t buf[16]; //共16个点位的数据
void setup(void){
Serial.begin(115200);//设置串口通讯速率为115200
while(tof.begin() != 0){
Serial.println("begin error !!!!!");
}
Serial.println("begin success");
//config matrix mode
while(tof.setRangingMode(eMatrix_4x4) != 0){ //设置为4*4模式
Serial.println("init error !!!!!");
delay(1000);
}
Serial.println("init success");
}
void loop(void){
tof.getAllData(buf);
for(uint8_t i = 0; i < 4; i++){
Serial.print("Y");
Serial.print(i);
Serial.print(": ");
for(uint8_t j = 0; j < 4; j++){
Serial.print(buf[i * 4 + j]);
Serial.print(",");
}
Serial.println("");
}
Serial.println("------------------------------");
delay(100);
}
程序执行效果:
点击IDE右上角的按钮,打开串口监视器,方法如图:
输出数据如下图,
横方向为从左到右X轴,单位mm。竖方向从上到下为Y轴。
如图中的第三排,第二列数据中的12,则为x1,y2点位对应的距离值12,单位mm。
示例2:通过I2C读取8*8矩阵的距离数据
程序说明:
- 该示例演示了如何读取64个矩阵的距离值,并在串口监视器中显示出来。
- 该示例代码也可在ArduinoIDE的文件>示例>DFRobot_MatrixLidar>I2C>get8 8data中找到,如下图所示:
示例代码:
#include "DFRobot_MatrixLidar.h"
DFRobot_MatrixLidar_I2C tof(0x33); //默认I2C地址0x33
uint16_t buf[64]; //共64个点位的数据
void setup(void){
Serial.begin(115200); //设置串口通讯速率为115200
while(tof.begin() != 0){
Serial.println("begin error !!!!!");
}
Serial.println("begin success");
//config matrix mode
while(tof.setRangingMode(eMatrix_8x8) != 0){ //设置为8*8模式
Serial.println("init error !!!!!");
delay(1000);
}
Serial.println("init success");
}
void loop(void){
tof.getAllData(buf);
for(uint8_t i = 0; i < 8; i++){
Serial.print("Y");
Serial.print(i);
Serial.print(": ");
for(uint8_t j = 0; j < 8; j++){
Serial.print(buf[i * 8 + j]);
Serial.print(",");
}
Serial.println("");
}
Serial.println("------------------------------");
delay(100);//设置该时间,可调节读取距离的间隔
}
程序执行效果:
点击IDE右上角的按钮,打开串口监视器,方法如图:
输出数据如下图,
横方向为从左到右X轴,单位mm。竖方向从上到下为Y轴。
如图中的第二排,第二列数据中的322,则为x1,y1点位对应的距离值322,单位mm。
示例3:通过I2C获取指定点的距离值
程序说明:
- 该示例演示了如何读取指定点的距离值,并在串口监视器中显示出来。
- 当然,也能采用同样的方法,同时读取多个指定点的距离。
- 该示例代码也可在ArduinoIDE的文件>示例>DFRobot_MatrixLidar>I2C>get FixedPoint中找到,如下图所示:
示例代码:
#include "DFRobot_MatrixLidar.h"
DFRobot_MatrixLidar_I2C tof(0x33); //默认I2C地址为0x33
void setup(void){
Serial.begin(115200); //默认串口波特率115200
while(tof.begin() != 0){
Serial.println("begin error !!!!!");
}
Serial.println("begin success");
//config matrix mode
while(tof.setRangingMode(eMatrix_8x8) != 0){ //默认矩阵模式为8x8,可设置为4x4
Serial.println("init error !!!!!");
delay(1000);
}
Serial.println("init success");
}
void loop(void){
uint16_t data = tof.getFixedPointData(1,0); //读取x1,y0点位的距离值,单位mm
Serial.print(data);
Serial.println(" mm");
delay(10);
}
程序执行效果:
点击IDE右上角的按钮,打开串口监视器,方法如图:
输出数据如下图:
UART通讯
本产品串口通讯波特率为115200,不可修改。如果需要使用Arduino UNO的话,请使用I2C模式。UNO软串口稳定通讯速率为9600,不能稳定的和本产品通讯,可能会出现卡顿现象。
故,以下示例均采用FierBeetle ESP32-E做为演示例程。
硬件连接
将开关拨到如图所示的UART位置:
- 此时,通讯方式设置为UART模式。
- 每次切换I2C\UART功能时,需断开电源重启才能生效。
硬件连接图:
示例1:UART获取4*4点阵数据
程序说明:
- 该示例演示了如何使用ESP32-E读取16个矩阵的距离值,并在串口监视器中显示出来。
- 该示例代码也可在ArduinoIDE的文件>示例>DFRobot_MatrixLidar>UART>get4 4data中找到,如下图所示:
示例程序:
注:将传感器的R连接到ESP32-E的D2,T连接到D3。
#include "DFRobot_MatrixLidar.h"
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
#include <SoftwareSerial.h>
#endif
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
DFRobot_MatrixLidar_UART tof(&mySerial);
#else
DFRobot_MatrixLidar_UART tof(&Serial1);
#endif
uint16_t buf[16];
void setup(void){
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
mySerial.begin(115200);
#elif defined(ESP32)
Serial1.begin(115200, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);//将传感器的R连接到ESP32-E的D2,T连接到D3。
#else
Serial1.begin(115200);
#endif
Serial.begin(115200);
while(tof.begin() != 0){
Serial.println("begin error !!!!!");
}
Serial.println("begin success");
//config matrix mode
while(tof.setRangingMode(eMatrix_4x4) != 0){
Serial.println("init error !!!!!");
delay(1000);
}
Serial.println("init success");
}
void loop(void){
tof.getAllData(buf);
for(uint8_t i = 0; i < 4; i++){
Serial.print("Y");
Serial.print(i);
Serial.print(": ");
for(uint8_t j = 0; j < 4; j++){
Serial.print(buf[i * 4 + j]);
Serial.print(",");
}
Serial.println("");
}
Serial.println("------------------------------");
delay(100);
}
程序执行效果:
点击IDE右上角的按钮,打开串口监视器,方法如图:
输出数据如下图:
示例2:UART获取8*8点阵数据
程序说明:
- 该示例演示了如何使用ESP32-E读取64个矩阵的距离值,并在串口监视器中显示出来。
- 该示例代码也可在ArduinoIDE的文件>示例>DFRobot_MatrixLidar>UART>get8 8data中找到,如下图所示:
示例代码:
注:将传感器的R连接到ESP32-E的D2,T连接到D3。
#include "DFRobot_MatrixLidar.h"
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
#include <SoftwareSerial.h>
#endif
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
DFRobot_MatrixLidar_UART tof(&mySerial);
#else
DFRobot_MatrixLidar_UART tof(&Serial1);
#endif
uint16_t buf[64];
void setup(void){
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
mySerial.begin(115200);
#elif defined(ESP32)
Serial1.begin(115200, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);//将传感器的R连接到ESP32-E的D2,T连接到D3。
#else
Serial1.begin(115200);
#endif
Serial.begin(115200);
while(tof.begin() != 0){
Serial.println("begin error !!!!!");
}
Serial.println("begin success");
//config matrix mode
while(tof.setRangingMode(eMatrix_8X8) != 0){
Serial.println("init error !!!!!");
delay(1000);
}
Serial.println("init success");
}
void loop(void){
tof.getAllData(buf);
for(uint8_t i = 0; i < 8; i++){
Serial.print("Y");
Serial.print(i);
Serial.print(": ");
for(uint8_t j = 0; j < 8; j++){
Serial.print(buf[(i * 8 + j)]);
Serial.print(",");
}
Serial.println("");
}
Serial.println("------------------------------");
delay(100);
}
程序执行效果:
点击IDE右上角的按钮,打开串口监视器,方法如图:
输出数据如下图:
示例3:UART获取指定点数据
程序说明:
- 该示例演示了如何使用ESP32-E读取指定点的距离值,并在串口监视器中显示出来。
- 当然,也能采用同样的方法,同时读取多个指定点的距离。
- 该示例代码也可在ArduinoIDE的文件>示例>DFRobot_MatrixLidar>UART>get FixedPoint中找到,如下图所示:
示例代码:
#include "DFRobot_MatrixLidar.h"
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
#include <SoftwareSerial.h>
#endif
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
DFRobot_MatrixLidar_UART tof(&mySerial);
#else
DFRobot_MatrixLidar_UART tof(&Serial1);
#endif
void setup(void){
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
mySerial.begin(115200);
#elif defined(ESP32)
Serial1.begin(115200, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2); //将传感器的R连接到ESP32-E的D2,T连接到D3。
#else
Serial1.begin(115200);
#endif
Serial.begin(115200);
while(tof.begin() != 0){
Serial.println("begin error !!!!!");
}
Serial.println("begin success");
//config matrix mode
while(tof.setRangingMode(eMatrix_8X8) != 0){
Serial.println("init error !!!!!");
delay(1000);
}
Serial.println("init success");
}
void loop(void){
uint16_t data = tof.getFixedPointData(1,0);
Serial.print(data);
Serial.println(" mm");
delay(10);
}
程序执行效果:
点击IDE右上角的按钮,打开串口监视器,方法如图:
输出数据如下图:
API函数
/**
* @fn begin
* @brief 初始化传感器
* @return NULL
*/
uint8_t begin(void);
/**
* @fn setRangingMode
* @brief 获取全部数据的配置
* @param matrix 配置传感器采样矩阵
* @return 返回配置状态
* @retval 0 成功
* @retval 1 失败
*/
uint8_t setRangingMode(eMatrix_t matrix);
/**
* @fn getAllData
* @brief 获取全部数据
* @param buf 存储数据
*/
uint8_t getAllData(void *buf);
/**
* @fn getFixedPointData
* @brief 获取指定点的数据
* @param x 坐标x
* @param y 坐标y
* @return 返回获取的数据
*/
uint16_t getFixedPointData(uint8_t x, uint8_t y);
USB输出数据
连接电脑
本产品支持USB输出矩阵数据,利用该功能,可通过TYPE-C数据线连接电脑,在串口监视器中能快速查看距离数据。
插上USB线连接电脑:
查看数据
打开串口监视器,设置波特率:115200,打开串口,即可看到实时距离输出。
USB输出当前仅支持8*8模式。
USB输出8*8矩阵数据:
makecode使用教程
功能介绍
MakeCode编程平台链接:https://makecode.microbit.org/
库地址:https://github.com/DFRobot/pxt-DFRobot_matrixLidarDistanceSensor
通过扩展功能加载完库后的功能如图:
在MakeCode中,分为了矩阵模式和避障模式。
- 矩阵模式通过选择不同的I2C地址,可实现最多4个传感器级联使用。
- 避障模式为测试功能,仅用于测试,可能存在bug或使用体验上的不足。
示例:矩阵模式读取指定点的距离
硬件准备:
- MBT0039: microbit主板 *1
- DFR1231: IO Extender for UNIHIKER K10 / micro:bit *1
- SEN0628: 矩阵激光传感器 *1
连线图:
示例程序:
本示例将演示读取左右两个点的数据,并在电脑上打印出来。
结果演示:
MindPlus使用教程
功能介绍
MindPlus图形化编程平台下载地址:https://mindplus.cc/download.html
MindPlus用户库:
dfrobot-matrixlidardistancesensor-thirdex-V0.0.2.mpext
或
https://github.com/DFRobot/ext-matrixLidarDistanceSensor.git
通过扩展功能加载完库后的功能如图:
在MakeCode中,分为了矩阵模式和避障模式。
- 矩阵模式通过选择不同的I2C地址,可实现最多4个传感器级联使用。
- 避障模式为测试功能,仅用于测试,可能存在bug或使用体验上的不足。
示例:矩阵模式读取指定点的距离
硬件准备:
- DFR0992: 行空板 K10主板 *1
- DFR1231:IO Extender for UNIHIKER K10 / micro:bit *1
- SEN0628: 矩阵激光传感器 *1
连线图:
示例程序:
本示例将演示读取左右两个点的数据,并在行空板K10的显示屏上显示出来。
执行结果:
固件更新
准备工具
- USB TYPE-C数据线 ×1
- Windows10以上电脑×1
固件更新方法
第一步:下载固件
固件下载:
固件SEN0628-V1.3-20250904版本更新内容:
修正了无效值固定不变的bug。现更改为无效后统一变为4000,推荐更新。
SEN0628-矩阵式激光雷达测距传感器-V1.2-20250226.uf2
固件下载解压后的后缀名为: .uf2
第二步:USB线连接电脑
按住传感器上的BOOT按键的同时,使用USB TYPE-C数据线连接电脑,如图所示:
此时,电脑上弹出U盘。如图所示:
第三步:拷贝固件,完成更新
将下载好的后缀为.uf2的固件复制粘贴到U盘,粘贴完毕后,U盘界面自动退出,此时,固件更新完成。