用TFMini LiDAR传感器和Arduino实现激光测距

lidar测距应用越来越普及,例如行人检测、车辆检测、障碍物探测等自动驾驶应用,以及道闸防砸、高度计等。本项目以北醒tfmini-s micro lidar传感器为例,演示lidar传感器与arduino的连接,以及测距结果及显示。本项目bom如下:
arduino nano开发板 1
tfmini-s lidar传感器 1
jhd162a 16x2 lcd显示器 1
10k电位器 1
面包板 1
跳线 22
基于激光的精确测距能力,lidar是一种精确的激光探测及测距器件。lidar工作原理与无线电雷达没有区别,即由雷达发射系统发送一个信号,经目标反射后被接收系统收集,通过测量反射光的运行时间而确定目标的距离。至于目标的径向速度,可以由反射光的多普勒频移来确定,也可以测量两个或多个距离,并计算其变化率而求得速度。

项目采用的tfmini-s是一款基于tfmini升级的单点测距雷达,盲区降低为10cm,室外测距性能进一步提升,不同反射率的测距精度得到优化,可以实现稳定、精准、高灵敏和高速的距离测量。
连接tfmini-s lidar传感器与arduino
tfmini-s lidar可通过uart或i2c接口与arduino连接。本项目采用uart。

将tfmini传感器的vcc & gnd引脚连接到arduino开发板的5v & gnd引脚,tx、rx引脚连接到arduino开发板的d2 & d3引脚。
当然,也可以把tx and rx连接在其他引脚上,只要支持软件串口即可。
源代码及例程库
北醒官网、github都提供有tfmini-s lidar传感器库文件和例程,具体如下:
include
#include tfmini.h
tfmini tfmini;
softwareserial serialtfmini(2, 3); //the only value that matters here is the first one, 2, rx
void gettfminidata(int* distance, int* strength)
{
static char i = 0;
char j = 0;
int checksum = 0;
static int rx[9];
if (serialtfmini.available())
{
rx[i] = serialtfmini.read();
if (rx[0] != 0x59)
{
i = 0;
}
else if (i == 1 && rx[1] != 0x59)
{
i = 0;
}
else if (i == 8)
{
for (j = 0; j < 8; j++)
{
checksum += rx[j];
}
if (rx[8] == (checksum % 256))
{
*distance = rx[2] + rx[3] * 256;
*strength = rx[4] + rx[5] * 256;
}
i = 0;
}
else
{
i++;
}
}
}
void setup()
{
serial.begin(115200); //initialize hardware serial port (serial debug port)
while (!serial); // wait for serial port to connect. needed for native usb port only
serial.println (initializing...);
serialtfmini.begin(tfmini_baudrate); //initialize the data rate for the softwareserial port
tfmini.begin(&serialtfmini); //initialize the tf mini sensor
}
void loop()
{
int distance = 0;
int strength = 0;
gettfminidata(&distance, &strength);
while (!distance)
{
gettfminidata(&distance, &strength);
if (distance)
{
serial.print(distance);
serial.print(cm\t);
serial.print(strength: );
serial.println(strength);
}
}
delay(100);
}
这下,serial monitor开始显示距离和信号强度,把手在传感器前面来回移动可观察到距离在变化,盲区从30cm缩减到10cm。

如果希望通过lcd显示测量结果,就需要在前述电路的面包板上加一个16x2 lcd显示器,并通过10k电位器来调节lcd的对比度。这样,本项目就实现了便携式涉及,可以装起来带去户外体验了。
#include
liquidcrystal lcd(12, 11, 10, 9, 8, 7);
#include
#include tfmini.h
tfmini tfmini;
softwareserial serialtfmini(2, 3); //the only value that matters here is the first one, 2, rx
void gettfminidata(int* distance, int* strength)
{
static char i = 0;
char j = 0;
int checksum = 0;
static int rx[9];
if (serialtfmini.available())
{
rx[i] = serialtfmini.read();
if (rx[0] != 0x59)
{
i = 0;
}
else if (i == 1 && rx[1] != 0x59)
{
i = 0;
}
else if (i == 8)
{
for (j = 0; j < 8; j++)
{
checksum += rx[j];
}
if (rx[8] == (checksum % 256))
{
*distance = rx[2] + rx[3] * 256;
*strength = rx[4] + rx[5] * 256;
}
i = 0;
}
else
{
i++;
}
}
}
void setup()
{
lcd.begin(16, 2);
serial.begin(115200); //initialize hardware serial port (serial debug port)
while (!serial); // wait for serial port to connect. needed for native usb port only
serial.println (initializing...);
serialtfmini.begin(tfmini_baudrate); //initialize the data rate for the softwareserial port
tfmini.begin(&serialtfmini); //initialize the tf mini sensor
}
void loop()
{
int distance = 0;
int strength = 0;
gettfminidata(&distance, &strength);
while (!distance)
{
gettfminidata(&distance, &strength);
if (distance)
{
serial.print(distance);
serial.print(cm\t);
serial.print(strength: );
serial.println(strength);
lcd.setcursor(0, 0);
lcd.print(dis: );
lcd.print(distance);
lcd.print( cm);
lcd.setcursor(0, 1);
lcd.print(str: );
lcd.print(strength);
}
}
delay(500);
lcd.clear();
}
结果显示,tfmini-s lidar传感器最大测距为12m,由于户外障碍物比室内少很多,测距准确度高达90%。


手机投屏怎么全屏?手机投屏软件哪个好?
北斗系统提前完成,核心器件高精度时钟同步芯片已完成国产化
以太坊和Cosmos 以及Polkdot 生态大盘点
燃气蒸汽发生器的工作原理及特点
江苏省副省长马秋林到华进公司调研
用TFMini LiDAR传感器和Arduino实现激光测距
cob显示屏幕的产品特性分析,它的优点有哪些
石墨烯与纳米银线将开启柔性电子设备的革新潮流
2000左右的旗舰机, 小米5S、华为、魅族选哪个最划算?
富士康13连跳是哪一年_富士康13连跳的原因是什么
高压电源对精度和准确度有什么需求
如何使用Roland SP-540V大幅面打印机打印磁铁
MO磁光盘机的接口
晶振能否直接替换,需要什么条件呢?
中国第一个三维封装“973”项目的首席科学家朱文辉科研事业经历
WiMAX技术与应用
什么是供电电源轨?非轨到轨特性对电源设计的影响?
毫米波应用的挑战 毫米波测试的进展
OPPO、vivo、小米大举追加订单,联发科反超高通成台积电第三大客户
魅族回应高通专利诉讼 李楠发“黑盒子”引遐想