简介
TOF Sense是一款基于TOF(飞行时间)技术的激光测距传感器,测距范围是1cm-5m,距离分辨率1mm,误差仅为±1.5cm,数据更新频率10Hz;支持15°~27°可调视场角,想看的范围由自己决定;还支持UART和CAN通信,可通过设置选择适合自己的通信方式;支持主动与查询输出数据,让数据获取更加自由。产品尺寸仅为35.58128.05mm,小巧的体积但却蕴含着大大的能量,可作为测距工具进行距离检测;也可作为机器人避障,选择合适的路线行进;还可用于无人机定高、路线规划等领域。
与其它测距传感器不同的一点是,该传感器预留了两个相同的通信接口,可为每个传感器设置ID,将多个传感器串联起来通过一个通信接口即可读取所有传感器的测距信息。
技术规格
- 工作电压:5V
- 工作电流:0.06A
- 通信接口:UART和CAN
- UART(2 个接口可同时作为 UART 接口,TTL 信号线电平 3.3V。波特率默认为 115200)
- CAN(2 个接口可同时作为 CAN 接口;波特率默认为 1Mbps)
- 级联数量:UART接口最多支持级联8 个,CAN接口最多支持级联7个
- 盲区距离:1cm
- 典型测距范围:
- 短距:0.012m~2.16m
- 中矩:0.012m~3.60m
- 长距:0.01m~5.00m
- 典型测距精度:
- 短距:精度±1.0cm,标准差<0.3cm
- 中距:精度±1.0cm,标准差<1.5cm
- 长距:精度±1.5cm,标准差<0.5cm@[0.01,3]m 范围,标准差<8cm@[3,5]m 范围
- 波长:940nm(符合Class1 标准)
- 视场角(FOV):15°~27°(多档位可调)
- 供电电压:3.7V~5.2V(所有通信接口电源都是具备电气连接的,供电接口可以为任意一个接口)
- 功耗:290mW(UART 主动输出,长距离测距模式下,供电电压 5.0V,电流 58mA)
- 产品重量:2.7g
- 尺寸:35.58mm12mm8.05mm
引脚说明
**
按键作用:重启**
模块描述
使用原理
TOF 是一种绝对距离检测技术,即传感器发出经过调试的近红外光,遇物体后反射,传感器通过计算光线发射和反射时差或相位差,来换算被拍摄景物的距离,以产生深度信息。相比于双目方案与 3D 结构光方案,TOF 具有工作距离远,适用场景广,较远距离精度高等优点。因此常 被应用于人员接近检测、机器人避障、照相机自动对焦等场合。室外环境中有来自太阳光的近红外光,会对模块的测量效果产生影响。
测距原理示意图
功能总述
TOFSense 支持短、中、长三种距离测量模式,各个测量模式下均可输出距离测量值 dis、距离状态 dis status、信号强度 signal strength 等信息;
输出方式:TOFSense 支持主动输出、查询输出。主动输出即模块自主连续发送测量数据帧,发送频率 10Hz;查询输出即模块收到查询帧后,再输出测量数据帧。
连接方式:TOFSense,支持 UART 与 CAN 输出方式,两种输出方式共用一套物理接口。其中,UART 输出支持单个模块的主动输出、查询输出以及多个级联连接下的查询输出;CAN 输出支持单个模块的主动输出、查询输出以及多个模块级联连接下的主动输出、查询输出。
接口与波特率
TOF Sense标准版本支持 UART 和 CAN 两种通信方式,两种通信方式共用一个接口,出厂默认为 UART 通信,如需使用 CAN 通信模式,通过模块上位机配置即可。
上位机下载:
64位nassistant_windows_64bit.zip
32位nassistant_windows_32bit.zip
串口驱动 CP210x_Windows_Drivers_v6.7.6.zip
UART通信(串口)模式下
串口通信下,波特率设置范围如下表。
UART_Baudrate | Note |
---|---|
115200,230400,460800,921600,1000000,1382400,1843200,2000000,2764800,3000000 | 默认波特率为 921600 |
CAN通信(控制器局域网络)模式下
CAN 输出模式下,波特率设置范围如下表所示
CAN_Baudrate | Note |
---|---|
100K、250K、500K、1M、2M、3M | 默认波特率为 1M |
Distance Status|距离状态显示
模块可以输出当前距离状态,用户可结合距离状态进行数据处理,具体含义如下表所示。
Value | Note |
---|---|
0 | 测量距离有效 |
1 | 标准差大于15mm |
2 | 信号强度低于1Mcps |
4 | 相位超出界限 |
5 | HW 或 VCSEL 出现故障 |
7 | 相位不匹配 |
8 | 内部算法下溢 |
14 | 测量距离无效 |
Signal Strength|信号强度
指示当前返回信号的强度,该值越大表明返回信号越强。
FOV|视场角
视场角的大小决定了 TOFSense 的视野范围,模块可以更改 X 方向视场角 fov.x、Y 方向视场角 fov.y、X 方向偏移 fov.x_offset、Y 方向偏移 fov.y_offset。X、Y 方向视场角设置范围 15°-27°,X、Y 方向视场角偏移设置范围-6°- 6°
Indicator Light|指示灯
指示灯共两种闪烁状态,快速闪烁 50ms 闪烁一次,慢速闪烁 100ms 闪烁一次。LED 状态与含义如下表所示。
Status | Note |
---|---|
快速闪烁(间隔0.1s) | 模块启动阶段/模块固件更新 |
慢速闪烁(间隔1s) | 模块正常工作 |
模块协议解析
协议由 Frame Header(帧头)、Function Mark(功能字)、Data(数据)、Sum Check(校验和)组成。其中 Frame Header、Function Mark 为固定不变的数值;Data 为传输的数据内容,Sum Check 为 Frame Header、Function Mark、Data 相加求和(即前面所有字节相加)后的最低字节。
协议组成:Frame Header + Function Mark + Data + Sum Check
示例
此示例以单模块连续测距,UART主动输出模式为应用场景。
原始数据:57 00 ff 00 9e 8f 00 00 ad 08 00 00 03 00 ff 3a
指令格式如下:
Data | Type | Length(Bytes) | Hex | Results |
---|---|---|---|---|
Frame Header | uint8 | 1 | 57 | 0x57 |
Function Mark | uint8 | 1 | 00 | 0x00 |
reserved | uint8 | 1 | ff | * |
id | uint8 | 1 | 00 | 0 |
System_time | uint32 | 4 | 9e 8f 00 00 | 36766ms |
dis*100 | uint24 | 3 | ad 08 00 | 2.221m |
dis_status | uint8 | 1 | 00 | 0 |
signal_strength | uint16 | 2 | 03 00 | 3 |
reserved | * | 1 | ... | * |
Sum Check | uint8 | 1 | 3a | 0x3a |
级联测距
将多个传感器配置为不同 ID 并串联起来,通过一个通信接口即可读取到所有传感器的测距信息。连接示意图如下图所示
级联测距示意图
级联测距下,仅适合 UART 查询、CAN 查询、CAN 主动输出三种方式。
使用教程
准备
- 硬件
- 1 x DFRduino UNO R3
- 1 x TOF Sense激光测距(5m)
- 若干 杜邦线
- 软件
- Arduino IDE 点击下载Arduino IDE
Arduino调试方法(PC串口)
鉴于TOF Sense为串口设备,而普通Arduino只有一个硬件串口,所以推荐使用软串口来配合传感器使用,用户也可以使用多串口设备,诸如Arduino Leonardo,Arduino Mega2560等设备,此处使用最常见的Arduino UNO作为控制器,定义D10和D11为软串口。
Arduino连线图
- 使用PC端的串口软件来显示检测的距离以及对整个系统供电
TOF Sense串口显示接法
Arduino调试代码
- 需要使用PC串口工具,读到的数据会显示在串口工具界面
/*!
* @file DFRobot_TFmini_test.ino
* @brief This example use TFmini to measure distance
* @n With initialization completed, we can get distance value and signal strength
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author DFRobot
* @version V1.0
* @date 2018-01-10
*/
#include <SoftwareSerial.h>
int i;
int dat[32] = { 0 };
unsigned long a, p, q, z;
SoftwareSerial mySerial(11, 10); // RX, TX
void setup()
{
Serial.begin(9600);
mySerial.begin(115200);
}
void loop()
{
if (mySerial.available() >= 32) {
if (millis() - a > 500) {
a = millis();
for (i = 0;i < 32;i++) {
dat[i] = mySerial.read();
}
for (i = 0;i < 16;i++) {
if (dat[i] == 0x57 && dat[i + 1] == 0 && dat[i + 2] == 0xff && dat[i + 3] == 0) {
if (dat[i + 12] + dat[i + 13] * 255 == 0) {
Serial.println("Out of range!");
} else {
z = dat[i + 11];
Serial.print("Status = ");
Serial.print(z);
p = dat[i + 12] + dat[i + 13] * 255;
Serial.print(" Strength = ");
Serial.print(p);
q = dat[i + 8] + dat[i + 9] * 255;
Serial.print(" Distance = ");
Serial.print(q);
Serial.println("mm");
}
break;
}
}
}
}
}
- 串口软件显示数据格式如下
TOF Sense显示结果
常见问题
(此处添加TOF Sense常见问题解答)