给自己的小车装避障,玩过超声波之后,很多人会想升级成激光雷达。TFmini这块ToF激光测距传感器,个头小、量程够、抗阳光干扰,是入门激光避障很常见的一块。这篇把它的接线、读取和避障逻辑一次讲透,坑都给你提前排了。
TFmini是什么,指标先看明白
TFmini用的是ToF飞行时间测距,发射近红外激光,靠光往返的时间换算距离,跟超声波靠声波回弹原理完全不是一回事,所以它不怕环境噪声,室外大太阳下也能用。官方标称最大量程12米,6米内精度在4厘米以内,采样频率最高能到100赫兹,视场角只有2.3度,重量才4.7克。
这组数字意味着两件事:一是它是个单点测距头,只量前方一条极窄的线,不是能扫一圈的机械雷达,避障时得装在车头正前方朝前看;二是0.6瓦的平均功耗很低,5伏供电就能跑起来。
接线:一共四根线,别接反
TFmini的尾线四根,黑线接GND、红线接VCC,蓝线接串口接收、绿线接串口发送,颜色和丝印对得上就不会错。供电用标准5伏,接在Arduino的5V上即可。
这里有个最容易被忽视的坑:TFmini的串口是3.3伏逻辑,而Arduino UNO这类5伏单片机的引脚输出是5伏逻辑。很多教程直接拿5伏引脚去怼,短期能读到数据,长期却可能把传感器或串口拉坏。稳妥做法是在UART线上加一个3.3伏到5伏的逻辑电平转换模块;如果用的开发板本身就是3.3伏逻辑(比如ESP32、树莓派Pico),就不用转换,直接接。
电流这块也要留意,资料显示TFmini峰值电流可能到800毫安左右,实测单颗传感器空闲时约66到68毫安。所以单独测一颗,电脑USB口500毫安够用;要是再带上小车电机和驱动,务必用外部电源单独给动力端供电,别指望USB小马拉大车。
读取:串口走115200,几行就出距离
TFmini用UART串口通讯,默认波特率115200。用DFRobot封的TFmini库,几行就能把距离读出来:开头引头文件,定义软串口(比如12、13脚),初始化后循环里调用测量函数,再读一个信号强度值strength。这个强度用来判断当前帧可不可信,数据不稳时先把强度过低的帧滤掉。
想更轻量也可以自己解析:TFmini数据帧是9字节一帧,含帧头、距离的高低两位、强度的两位和校验,按协议拆包即可,顺便把串口帧解析这一课也学了。
避障逻辑:滑动滤波加阈值再加兜底
单点激光读出来的距离会抖,尤其是车动起来、物体表面反光变化时,一帧一个值会让你不知道该怎么判断。实战上先加一个简单的滑动平均滤波,取最近N帧求平均,能明显压掉毛刺。
然后设一个避障阈值,距离小于设定值(比如30厘米)就原地转向绕开,大于就直行。再套一层保险:当连续几帧强度太低或者距离读数突变,宁可先停车也别一头撞上去。这套滤波加阈值加异常兜底的骨架,能让你的小车走出比较稳的避障效果。
和超声波的区别,心里要有数
跟HC-SR04超声波比,TFmini赢在量程远(12米对4米左右)、采样快(100赫兹对几十赫兹)、不依赖吸声材质、室外也能用;代价是贵不少、是单点、对透明和深色物体检测能力有限。做入门避障,超声波够用就先用着,想升级体验或往更复杂的导航走,再上它。
一句话总结:接线别忘3.3伏逻辑转换,读取走115200串口,避障套个滑动滤波再设个阈值,你的小车就睁眼看路了。



请问Pico这种3.3V板子是不是就不用转换、直接接四个脚就行?正准备照这个试一下。
3.3V逻辑转换这个坑提醒得太对了,我之前就是UNO直接怼,读着读着就灵异了,串口数据全乱码。换了电平转换模块一下就稳了。
TFmini是单点激光,只能测一个方向,我一开始以为能当雷达扫一圈,想多了哈哈。
100Hz采样对避障确实够用了,6米内精度4cm,小车前装一颗正合适。滑动滤波那招实用,我数据抖的时候就会用。
跟超声波的对比写得实在。HC-SR04才几块钱,入门先用它,等真要升级再上TFmini,量力而行。