-
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 + 关注
TF系列激光雷达在Arduino上的开发例程
用Arduino将雷达发送的数据按对应协议正确解析,并发送到PC端,通过IDE上的串口监视器显示出来。
红色+5V,黑色GND,绿色TX,白色RX;TF02供电电压为5V,所以直接连接Arduino板的5V和GND即可,其他雷达请查阅产品规格书,确保供电正常;串口通信连接需要注意,对于Arduino UNO板雷达的TX端接板子的pin 2口(软串口Serial1的RX),雷达的RX端接板子的pin 3口(软串口Serial1的TX),这个跟后文中的程序编写有关;对于Arduino DUE板雷达的TX端接板子的RX1口,雷达的RX端接板子的TX1口。
图1.TF02与uno板的接线图
图2.TF02与DUE板的接线图
步骤2:程序编写
该例程功能的实现至少需要两个串口,一个接受雷达的数据,另一个用于将数据输出到电脑端显示出来。可以复制以下代码粘贴到IDE程序编辑窗口,也可直接打开相应附件文件。
/*本程序为TF02产品标准输出协议的在arduino上的解析例程
数据包格式为0x59 0x59 Dist_L Dist_H Strength_L Strength_H Sequence_L Sequence_H CheckSum_L
详细说明见产品规格书
对于只有一个串口的arduino板,使用软件虚拟串口的函数如:UNO板
*/
#include<SoftwareSerial.h>//软串口头文件
SoftwareSerial Serial1(2,3); //定义软串口名称为Serial1,并把pin2定为RX,pin3定为TX
/*对于有多个串口的arduino板如DUE板,注释掉上面两段代码,直接使用Serial1串口*/
int dist;//雷达实测距离值
int strength;//雷达信号强度
int check;//校验数值存放
int i;
int uart[9];//存放雷达测量的数据
const int HEADER=0x59;//数据包帧头
void setup()
{
Serial.begin(9600);//设置arduino与电脑连接串口的波特率
Serial1.begin(115200);//设置雷达与arduino连接串口的波特率
}
void loop()
{
if (Serial1.available())//查看串口是否有数据输入
{
if(Serial1.read()==HEADER)//判断数据包帧头0x59
{
uart[0]=HEADER;
if(Serial1.read()==HEADER)//判断数据包帧头0x59
{
uart[1]=HEADER;
for(i=2;i<9;i++)//存储数据到数组
{
uart=Serial1.read();
}
check=uart[0]+uart[1]+uart[2]+uart[3]+uart[4]+uart[5]+uart[6]+uart[7];
if(uart[8]==(check&0xff))//按照协议对收到的数据进行校验
{
dist=uart[2]+uart[3]*256;//计算距离值
strength=uart[4]+uart[5]*256;//计算信号强度值
Serial.print("dist = ");
Serial.print(dist);//输出雷达测试距离值
Serial.print('\t');
Serial.print("strength = ");
Serial.print(strength);//输出信号强度值
Serial.print('\n');
}
}
}
}
}
步骤3:数据查看
将程序上传到Arduino板,打开串口监视器,即可看到雷达实时探测的距离值和相应的信号强度,如图3;
另外也可以在串口绘图器上查看数据曲线,但是要把上述有关串口打印(Serial.print)的代码修改一下:
// Serial.print("dist = ");
Serial.print(dist);//输出雷达测试距离值
Serial.print(' ');
// Serial.print("strength = ");
Serial.print(strength);//输出信号强度值
Serial.print('\n');
重新编译上传到Arduino板,打开串口绘图器即可看到代表dist和strength的两条曲线,如图4。
图3.雷达数据在串口监视器上的显示


块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖