(SKU:SEN0337)TOF Sense激光测距(5m)

来自DFRobot Product Wiki
跳转至: 导航搜索
TF03激光测距 (100m)
TF03激光测距 (180m)

目录

简介

TOF Sense是一款基于TOF(飞行时间)技术的激光测距传感器,测距范围是1cm-5m,距离分辨率1mm,误差仅为±1.5cm,数据更新频率10Hz;支持15°~27°可调视场角,想看的范围由自己决定;还支持UART和CAN通信,可通过设置选择适合自己的通信方式;支持主动与查询输出数据,让数据获取更加自由。产品尺寸仅为35.58*12*8.05mm,小巧的体积但却蕴含着大大的能量,可作为测距工具进行距离检测;也可作为机器人避障,选择合适的路线行进;还可用于无人机定高、路线规划等领域。
与其它测距传感器不同的一点是,该传感器预留了两个相同的通信接口,可为每个传感器设置ID,将多个传感器串联起来通过一个通信接口即可读取所有传感器的测距信息。

Warning yellow.png

注意事项:

  • 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

引脚说明

TFmini Plus
颜色 名称 功能描述
黑线 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通信(串口)模式下

串口通信下,波特率设置范围如下表。

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. Arduino使用方法
  2. PC上位机调试
  3. 黑白线检测(巡线检测)


准备


Arduino调试方法(PC串口)

鉴于TF mini为串口设备,而普通Arduino只有一个硬件串口,所以推荐使用软串口来配合传感器使用,用户也可以使用多串口设备,诸如Arduino Leonardo,Arduino Mega2560等设备,此处使用最常见的Arduino UNO作为控制器,定义D12和D13为软串口。

Arduino连线图

  • 使用PC端的串口软件来显示检测的距离以及对整个系统供电
TF03串口显示接法

Arduino调试代码

  • 需要使用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


Arduino LCD距离数值显示

实际应用场景中,传感器一般会在脱机状态下工作,我们特别提供了一个使用案例,使用锂电池供电,用LCD来显示距离测量数据,非常适合室外使用。

Arduino连接图

TF03 LCD显示接法

Arduino测试代码


/*
  * @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上位机显示

除了通过单片机来读取数据外,调试阶段,我们还可以使用PC上位机来读取距离输出。点击此处下载

连接图

将TF Mini通过一个USB转TTL模块连接到电脑上,通过上位机读取数据

TF03上位机显示接法

上位机数据显示

TF Mini上位机数据显示


黑白线检测

TF Mini激光测距雷达是一种光学传感器,但凡光学传感器,对于光的敏感度会比较高。我们可以利用这一特性实现近距离黑白线检测。(注:黑色的反射率低;白色的反射率高;)
我们利用信号强度“Strength”来分辨两种颜色。

接线图

TF03识别黑白色接法

Arduino代码

  • 注意:代码需与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);  
    }
}    

                              
  • 下载好程序后,在同一距离连续地反复测量黑色和白色纸张,通过串口绘图工具可见信号强度的变化情况
串口绘图


Raspberry Pi平台使用

准备工作

  • 树莓派4B
  • 树莓派 IO扩展板
  • TF03 (ToF) 激光测距(100m)/TF03 (ToF) 激光测距(180m)
  • 连接线一根

Raspberry Pi连接图

Raspberry Pi与TF03连接图

示例代码

# -*- 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常见问题解答)

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。


更多


个人工具
名字空间

变换
操作
导航
工具箱