hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 322|回复: 1

TF系列激光雷达在Arduino上的开发例程

[复制链接]

948

主题

1162

帖子

3655

积分

超级版主

Rank: 8Rank: 8

积分
3655

论坛头条论坛元老谋士数据帝优秀版主超级版主见习版主论坛版主

发表于 2023-9-20 12:06:07 | 显示全部楼层 |阅读模式
本例程主要帮助客户快速熟悉我公司雷达,减少产品研发周期。Arduino板以UNO板和DUE板为例,分别代表只有一个串口和含有多个串口的板子。雷达以TF02为例,对于我公司的其他单点测距雷达(如TF01、TF mini、TF20等)同样适用,如果通信协议有改动,请参考程序对应做出修改即可。最终结果,用Arduino将雷达发送的数据按对应协议正确解析,并发送到PC端,通过IDE上的串口监视器显示出来。

关于Arduino的详细介绍和学习请参考以下两个网站;

中文社区:http://www.arduino.cn/

英文官网:https://www.arduino.cc/

步骤1:硬件连接


file:///C:/Users/21/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png

我公司雷达产品线序定义为:红色+5V,黑色GND,绿色TX,白色RXTF02供电电压为5V,所以直接连接Arduino板的5VGND即可,其他雷达请查阅产品规格书,确保供电正常;串口通信连接需要注意,对于ArduinoUNO板雷达的TX端接板子的pin 2口(软串口Serial1RX),雷达的RX端接板子的pin 3口(软串口Serial1TX),这个跟后文中的程序编写有关;对于Arduino DUE板雷达的TX端接板子的RX1口,雷达的RX端接板子的TX1口。
图1.TF02与uno板的接线图

file:///C:/Users/21/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png
图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>//软串口头文件

SoftwareSerialSerial1(2,3); //定义软串口名称为Serial1,并把pin2定为RXpin3定为TX

/*对于有多个串口的arduino板如DUE板,注释掉上面两段代码,直接使用Serial1串口*/

int dist;//雷达实测距离值

int strength;//雷达信号强度

int check;//校验数值存放

int i;

int uart[9];//存放雷达测量的数据

const intHEADER=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<i>=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。

file:///C:/Users/21/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png

图3.雷达数据在串口监视器上的显示

file:///C:/Users/21/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png

图4.雷达数据在串口绘图器上的图像

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
世界上最遥远的距离,不是生与死的距离,而是我站在你面前,你却不知道我爱你
回复

使用道具 举报

0

主题

166

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2023-9-20 12:06:29 | 显示全部楼层
例子不错,赞一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-22 10:05 , Processed in 0.066760 second(s), 23 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表