_SKU_SEN0337_TOF_Sense激光测距_5m_ - jimaobian/DFRobotWikiCn GitHub Wiki
TOF Sense是一款基于TOF(飞行时间)技术的激光测距传感器,测距范围是1cm-5m,距离分辨率1mm,误差仅为±1.5cm,数据更新频率10Hz;支持15°~27°可调视场角,想看的范围由自己决定;还支持UART和CAN通信,可通过设置选择适合自己的通信方式;支持主动与查询输出数据,让数据获取更加自由。产品尺寸仅为35.58*12*8.05mm,小巧的体积但却蕴含着大大的能量,可作为测距工具进行距离检测;也可作为机器人避障,选择合适的路线行进;还可用于无人机定高、路线规划等领域。 与其它测距传感器不同的一点是,该传感器预留了两个相同的通信接口,可为每个传感器设置ID,将多个传感器串联起来通过一个通信接口即可读取所有传感器的测距信息。
注意事项: |
UART接口最多支持级联8 个,CAN接口最多支持级联7个;级联测距下,适合 UART 查询、CAN 查询、CAN 主动输出三种方式。 |
- 工作电压:5V
- 工作电流:0.06A
- 通信接口:UART和CAN
- UART(2 个接口可同时作为 UART 接口,TTL 信号线电平 3.3V。波特率默认为 921600)
- 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.58mm*12mm*8.05mm
| | | | -------------------------------------------- | | | | |
颜色 | 名称 | 功能描述 |
黑线 | GND | 地线 |
红线 | VCC | 供电 |
蓝线 | TTL_RXD/CAN_H | 串口接收/CAN总线 |
绿线 | TTL_TXD/CAN_L | 串口发送/CAN总线 |
TOF 是一种绝对距离检测技术,即传感器发出经过调试的近红外光,遇物体后反射,传感器通过计算光线发射和反射时差或相位差,来换算被拍摄景物的距离,以产生深度信息。相比于双目方案与 3D 结构光方案,TOF 具有工作距离远,适用场景广,较远距离精度高等优点。因此常 被应用于人员接近检测、机器人避障、照相机自动对焦等场合。室外环境中有来自太阳光的近红外光,会对模块的测量效果产生影响。
TOFSense 支持短、中、长三种距离测量模式,各个测量模式下均可输出距离测量值 dis、距离状态 dis status、信号强度 signal strength 等信息; 输出方式:TOFSense 支持主动输出、查询输出。主动输出即模块自主连续发送测量数据帧,发送频率 10Hz;查询输出即模块收到查询帧后,再输出测量数据帧。 连接方式:TOFSense,支持 UART 与 CAN 输出方式,两种输出方式共用一套物理接口。其中,UART 输出支持单个模块的主动输出、查询输出以及多个级联连接下的查询输出;CAN 输出支持单个模块的主动输出、查询输出以及多个模块级联连接下的主动输出、查询输出。
TOF Sense标准版本支持 UART 和 CAN 两种通信方式,两种通信方式共用一个接口,出厂默认为 UART 通信,如需使用 CAN 通信模式,通过模块上位机配置即可。
串口通信下,波特率设置范围如下表。
UART_Baudrate | Note |
115200,230400,460800,921600,1000000,1382400,1843200,2000000,2764800,3000000 | 默认波特率为 921600 |
CAN 输出模式下,波特率设置范围如下表所示
CAN_Baudrate | Note |
100K、250K、500K、1M、2M、3M | 默认波特率为 1M |
模块可以输出当前距离状态,用户可结合距离状态进行数据处理,具体含义如下表所示。
Value | Note |
0 | 测量距离有效 |
1 | 标准差大于15mm |
2 | 信号强度低于1Mcps |
4 | 相位超出界限 |
5 | HW 或 VCSEL 出现故障 |
7 | 相位不匹配 |
8 | 内部算法下溢 |
14 | 测量距离无效 |
指示当前返回信号的强度,该值越大表明返回信号越强。
视场角的大小决定了 TOFSense 的视野范围,模块可以更改 X 方向视场角 fov.x、Y 方向视场角 fov.y、X 方向偏移 fov.x_offset、Y 方向偏移 fov.y_offset。X、Y 方向视场角设置范围 15°~27°,X、Y 方向视场角偏移设置范围-6°~ 6°。
指示灯共两种闪烁状态,快速闪烁 50ms 闪烁一次,慢速闪烁 100ms 闪烁一次。LED 状态与含义如下表所示。
Status | Note |
快速闪烁(间隔0.1s) | 模块启动阶段/模块固件更新 |
慢速闪烁(间隔1s) | 模块正常工作 |
为了 TF03 可以更灵活的解决您的问题,通过串口进行用户自定义配置产品参数的功能。用户可通过发送相关指令来修改产品的原有参数,如输出数据格式、输出帧率等。参数配置成功后,输入写入配置指令,配置参数会保存在 Flash 中,断电重启无须重新配置。 请根据需求修改产品配置,切勿频繁尝试不相关指令,以免指令发送错误造成不必要的损失;请务必按照本说明书所列指令进行产品配置,切勿发送未声明的指令。 指令格式如下:
字节 | byte0 | byte1 | byte2 | byte3~ byteN-2 | byteN-1 |
描述 | Head | Len | ID | Payload | Check sum |
Head:固定为 0x5A Len:整个指令帧的长度(单位 Byte) ID:标识每个指令的功能 Payload:参数,在不同指令中有不同的含义和长度 Check sum:前 Len – 1 字节数据和的低 8bit
功能 | 下行 | 上行 | 说明 | 出厂设置 |
获取固件版本号 | 5A 04 01 5F | 5A 07 01 V1 V2 V3 SU | 版本号 V3.V2.V1;SU 为 check sum,下同 | / |
系统复位 | 5A 04 02 60 | 成功:5A 05 02 00 61;失败:超时 1s 无反应 | / | / |
设置输出帧率 | 5A 06 03 LL HH SU | 成功:与下行一样;失败:超时 1s 无反应 | / | 100fps |
输出使能 | 使能:5A 05 07 01 67;禁用:5A 05 07 00 66 | 成功:与下行一样;失败:超时 1s 无反应 | / | 使能 |
单次触发 | 5A 04 04 62 | 数据帧 | / | / |
设置输出格式 | 5A 05 05 LL SU | 成功:与下行一样;失败:超时 1s 无反应 | LL:输出格式,如下:00:ASCII 码输出(保留);01:二进制输出;02:PIX 输出;05:I/O 输出 | 二进制 |
设置串口波特率 | 5A 08 06 H1 H2 H3 H4 SU | 成功:与下行一样;失败:超时 1s 无反应 | 波特率 = (H4 << 24)+(H3 << 16)+(H2 << 8)+H1 | 115200 |
校验和使能 | 使能:5A 05 08 01 68;禁用:5A 05 08 00 67 | 成功:与下行一样;失败:超时 1s 无反应 | / | 使能 |
恢复出厂设置 | 5A 04 10 6E | 成功:5A 05 10 00 6F;失败:5A 05 10 ER SU | ER 不为 0 的时候为失败 | / |
保存配置 | 5A 04 11 6F | 成功:5A 05 11 00 70;失败:5A 05 11 ER SU | 同上 | / |
配置超量程值 | 5A 06 4F LL HH SU | 成功:5A 05 4F 00 AE;失败:超时 1s 无反应 | 超量程值=(HH << 8) + LL,单位 cm | 18000 |
配置 CAN 发送ID | 5A 08 50 H1 H2 H3 H4 SU | 成功:5A 05 50 00 AF;失败:超时 1s 无反应 | ID=(H4 << 24)+(H3 << 16)+(H2 << 8)+H1 | 0x3 |
配置 CAN 接收ID | 5A 08 51 H1 H2 H3 H4 SU | 成功:5A 05 51 00 B0;失败:超时 1s 无反应 | ID=(H4 << 24)+(H3 << 16)+(H2 << 8)+H1 | 0x3003 |
配置 CAN 波特率 | 5A 08 52 H1 H2 H3 H4 SU | 成功:5A 05 52 00 B1;失败:超时 1s 无反应 | Baudrate=(H4 << 24)+(H3 << 16)+(H2 << 8)+H1 | 1000000 |
配置 CAN 发送帧类型 | 标准帧:5A 05 5D 00 BC;扩展帧:5A 05 5D 01 BD | 成功:5A 05 5D 00 BC;失败:超时 1s 无反应 | / | 标准帧 |
配置传输方式 | 串口:5A 05 45 01 A5;CAN:5A 05 45 02 A6 | 成功:5A 05 45 00 A4;失败:超时 1s 无反应 | / | 串口 |
使能雨雾算法 | 使用:5A 05 64 00 C3;禁用:5A 05 64 01 C4 | 成功:5A 05 64 00 C3;失败:超时 1s 无反应 | / | 使能 |
配置 offset | 5A 06 69 LL HH SU | 成功:5A 05 69 00 C8;失败:超时 1s 无反应 | Offset = (HH << 8) + LL,单位 cm | 0 |
设置近距离触发电平 | 5A 05 61 LV SU | 成功:5A 05 61 00 C0;失败:超时 1s 无反应 | LV = 0 表示低电平触发;LV = 1 表示高电平触发 | 低电平 |
设置 IO 输出延时 | 5A 08 62 L1 H1 L2 H2 SU | 成功:5A 05 62 00 C1;失败:超时 1s 无反应 | Delay1 = (H1 << 8) + L1,Delay2 = (H2 << 8) + L2,单位 ms,分别表示近、远距离时,IO 电平变化延时。取值范围 0~65000。 | 0,0 |
设置 IO 变化的距离阈值及缓冲距离 | 5A 08 63 L1 H1 L2 H2 SU | 成功:5A 05 63 00 C2;失败:超时 1s 无反应 | Dist= (H1 << 8) + L1,Buff=(H2 << 8) + L2,单位 cm,分别表示 IO 变化的距离阈值及缓冲距离。取值范围0~18000。 | 18000,0 |
说明:
- 支持的输出帧率如下: 1、2、…9、 10、20、…90、 100、200…900、 1000、2000…9000、10000;
- 使用触发模式时,需要先禁用输出使能,再使用触发指令;
- PIX 格式为“x.yz\r\n”,单位 m。例如测距为 123cm 时输出 1.23,后接“回车+换行”;
- CAN 波特率支持 1M、500K、250K 和 125K 共 4 档。
- “配置 offset”指令,可用于客户二次校准雷达距离,自固件版本 v1.11.3 起支持。
- 请配置合法 CAN ID,对于非法 ID 可能会出现不可预料的结果。
- 要使用 IO 触发功能,需要先设置输出格式配置为 IO 输出,然后通过指令配置 IO 触发电平、输出延时、距离阈值及缓冲距离。
此处共列出两种方式,旨在让大家对单点激光测距仪有一个直观的认识。
- Arduino使用方法
- PC上位机调试
- 黑白线检测(巡线检测)
-
硬件
- 1 x DFRduino UNO R3
- 1 x IO 传感器扩展板 V7.1
- 1 x Gravity: I2C LCD1602彩色背光液晶屏(部分项目使用)
- 1 x 7.4V 2500MA 锂电池(带充放电保护板)
- 1 x USB to Serial 转串口
- 若干 杜邦线
-
软件
- Arduino IDE 点击下载Arduino IDE
- DFRobot TF Mini库 点击下载TF Mini库
- DFRobot LCD库文件 点击下载DFRobot_RGBLCD(Github)
鉴于TF mini为串口设备,而普通Arduino只有一个硬件串口,所以推荐使用软串口来配合传感器使用,用户也可以使用多串口设备,诸如Arduino Leonardo,Arduino Mega2560等设备,此处使用最常见的Arduino UNO作为控制器,定义D12和D13为软串口。
- 使用PC端的串口软件来显示检测的距离以及对整个系统供电
- 需要使用PC串口工具,读到的数据会显示在串口工具界面
|
/*
* @File : DFRobot_TFmini_test.ino
* @Brief : This example use TFmini to measure distance
* With initialization completed, we can get distance value and signal strength
* @Copyright [DFRobot](http://www.dfrobot.com), 2016
* GNU Lesser General Public License
*
* @version V1.0
* @date 2018-1-10
*/
#include <DFRobot_TFmini.h>
SoftwareSerial mySerial(12, 13); // RX, TX
DFRobot_TFmini TFmini;
uint16_t distance,strength;
void setup(){
Serial.begin(115200);
TFmini.begin(mySerial);
}
void loop(){
if(TFmini.measure()){ //Measure Distance and get signal strength
distance = TFmini.getDistance(); //Get distance data
strength = TFmini.getStrength(); //Get signal strength data
Serial.print("Distance = ");
Serial.print(distance);
Serial.println("cm");
Serial.print("Strength = ");
Serial.println(strength);
delay(500);
}
delay(500);
}
|}
- 串口软件显示数据格式如下
Distance = 1000 mm
Strength = 688
实际应用场景中,传感器一般会在脱机状态下工作,我们特别提供了一个使用案例,使用锂电池供电,用LCD来显示距离测量数据,非常适合室外使用。
|
/*
* @File : DFRobot_TFmini_test.ino
* @Brief : This example use TFmini to measure distance
* With initialization completed, we can get distance value and signal strength
* @Copyright [DFRobot](http://www.dfrobot.com), 2016
* GNU Lesser General Public License
*
* @version V1.0
* @date 2018-1-10
*/
#include <Wire.h>
#include <DFRobot_RGBLCD.h>
#include <DFRobot_TFmini.h> //TF Mini header file
SoftwareSerial mySerial(12, 13); // RX, TX
DFRobot_TFmini TFmini;
uint16_t distance,strength;
unsigned int lcd_r = 0, lcd_g = 0, lcd_b = 0;
unsigned long delaytime = 0, lighttime = 0;
DFRobot_RGBLCD lcd(16, 2);
void setup()
{lcd.init();
delay(5000);
Serial.begin(115200);
Serial.println("hello start");
TFmini.begin(mySerial);
lighttime = millis();
lcd.setCursor(0, 0);
lcd.print("Dis:");
lcd.setCursor(0, 1);
lcd.print("Str:");
lcd.setRGB(255, 255, 000);
}
void loop() {
/******************LCD*******************/
lcd_r = random(256);
delayMicroseconds(10);
lcd_g = random(256);
delayMicroseconds(10);
lcd_b = random(256);
if (millis() - lighttime > 3000)
{
lcd.setRGB(lcd_r, lcd_g, lcd_b);
lighttime = millis();
}
//delay(100);
/**************TF Mini***************/
if(TFmini.measure()){ //Measure Distance and get signal strength
distance = TFmini.getDistance(); //Get distance data
strength = TFmini.getStrength(); //Get signal strength data
lcd.setCursor(5, 0); //LCD display
lcd.print( distance / 10000);
lcd.print( distance/ 1000 % 10);
lcd.print('.');
lcd.print( distance / 100 % 10);
lcd.print( distance / 10 % 10);
lcd.print( distance % 10);
lcd.print(" m");
lcd.setCursor(5, 1);
lcd.print(strength / 10000);
lcd.print(strength / 1000 % 10);
lcd.print(strength / 100 % 10);
lcd.print(strength / 10 % 10);
lcd.print(strength % 10);
}
}
|}
- LCD显示屏上显示下列数据格式
Dis: 05.000 m
Str: 00600
除了通过单片机来读取数据外,调试阶段,我们还可以使用PC上位机来读取距离输出。点击此处下载
将TF Mini通过一个USB转TTL模块连接到电脑上,通过上位机读取数据
TF Mini激光测距雷达是一种光学传感器,但凡光学传感器,对于光的敏感度会比较高。我们可以利用这一特性实现近距离黑白线检测。(注:黑色的反射率低;白色的反射率高;) 我们利用信号强度“Strength”来分辨两种颜色。
- 注意:代码需与TF Mini库配合使用
|
/*
* @File : DFRobot_TFmini_test.ino
* @Brief : This example use TFmini to measure distance
* With initialization completed, we can get distance value and signal strength
* @Copyright [DFRobot](http://www.dfrobot.com), 2016
* GNU Lesser General Public License
*
* @version V1.0
* @date 2018-1-10
*/
#include <DFRobot_TFmini.h>
SoftwareSerial mySerial(12, 13); // RX, TX
DFRobot_TFmini TFmini;
uint16_t distance,strength;
void setup(){
Serial.begin(115200);
TFmini.begin(mySerial);
}
void loop(){
if(TFmini.measure()){ //Measure Distance and get signal strength
strength = TFmini.getStrength(); //Get signal strength data
Serial.print("Strength = ");
Serial.println(strength);
}
}
|}
- 下载好程序后,在同一距离连续地反复测量黑色和白色纸张,通过串口绘图工具可见信号强度的变化情况
准备工作
- 树莓派4B
- 树莓派 IO扩展板
- TF03 (ToF) 激光测距(100m)/TF03 (ToF) 激光测距(180m)
- 连接线一根
# -*- coding:utf-8 -*-
'''
# DFRobot_TFmini.py
#
# Connect board with raspberryPi.
# Run this demo.
#
# Connect TFmini to UART
# get the distance value
#
# Copyright [DFRobot](http://www.dfrobot.com), 2016
# Copyright GNU Lesser General Public License
#
# version V1.0
# date 2019-8-31
'''
import time
from DFRobot_TFmini import TFMINI
mini = TFMINI()
def main():
while True:
if mini.measure():
distance = mini.getDistance()
strength = mini.getStrength()
print("Distance = %.d" % distance)
print("Strength = %.d" % strength)
time.sleep(0.5)
time.sleep(0.5)
if __name__ == "__main__":
main()
(此处添加TF03常见问题解答)
| 更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。 |