行空板K10 IO扩展板

产品简介

固件已更新至V1.3,请尽快更新:

修正了无效值固定不变的bug。现更改为无效后统一变为4000,推荐更新。

固件下载链接:

SEN0628-V1.3-20250904.uf2

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.3-20250904.uf2

SEN0628-矩阵式激光雷达测距传感器-V1.2-20250226.uf2

固件下载解压后的后缀名为: .uf2

第二步:USB线连接电脑

按住传感器上的BOOT按键的同时,使用USB TYPE-C数据线连接电脑,如图所示:

此时,电脑上弹出U盘。如图所示:

第三步:拷贝固件,完成更新

将下载好的后缀为.uf2的固件复制粘贴到U盘,粘贴完毕后,U盘界面自动退出,此时,固件更新完成。