查看: 5538|回复: 9

[项目] TF系列激光雷达在Arduino上的开发例程

[复制链接]

该用户从未签到

发表于 2017-11-23 11:43 | 显示全部楼层 |阅读模式
本例程主要帮助客户快速熟悉我公司雷达,减少产品研发周期。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=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.雷达数据在串口绘图器上的图像 图1.png 图2.png 图3.png 图4.png

该用户从未签到

发表于 2017-11-23 11:55 | 显示全部楼层
准确度如何?距离多远?

该用户从未签到

 楼主| 发表于 2017-11-23 11:59 | 显示全部楼层
Zoologist 发表于 2017-11-23 11:55
准确度如何?距离多远?

请亲移步官网查看具体资料~

该用户从未签到

发表于 2018-5-3 16:00 | 显示全部楼层
请问一下为什么我复制这段程序uart=Serial1.read();这句会报错,TFmini模块连MEGA2560用这程序可以吗?谢谢
  • TA的每日心情
    郁闷
    2018-5-4 15:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-5-4 15:33 | 显示全部楼层
    liang1011 发表于 2018-5-3 16:00
    请问一下为什么我复制这段程序uart=Serial1.read();这句会报错,TFmini模块连MEGA2560用这程序可以吗?谢谢 ...

    我也在用mega2560 请问你能显示结果了吗
  • TA的每日心情
    郁闷
    2018-5-4 15:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-5-7 16:35 | 显示全部楼层
    liang1011 发表于 2018-5-3 16:00
    请问一下为什么我复制这段程序uart=Serial1.read();这句会报错,TFmini模块连MEGA2560用这程序可以吗?谢谢 ...

    你好  我看到你最近在做TFmini连接mega2560,我也在做,能不能加个Q247802866,问你一些问题,非常感谢

    该用户从未签到

    发表于 2019-1-16 09:03 | 显示全部楼层
    我在使用TFmini这款款传感器时,遇到些问题,arduino读出的距离一直是-3,不知道怎么解决,

    该用户从未签到

    发表于 2019-11-9 08:57 | 显示全部楼层
    liang1011 发表于 2018-5-3 16:00
    请问一下为什么我复制这段程序uart=Serial1.read();这句会报错,TFmini模块连MEGA2560用这程序可以吗?谢谢 ...

    uart=Serial1.read();

    该用户从未签到

    发表于 2019-11-9 08:58 | 显示全部楼层

    uart后面加上

    该用户从未签到

    发表于 2019-11-9 14:36 | 显示全部楼层
    6666666666666666666666666
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    程序设计问题求大虾们帮帮忙
    程序设计问题求大虾们帮帮
    大家好,我是一个萌新想设计一个程序,现在遇到困难了。当运行按下按钮,电机会向end
    请问 3块 MCP 4725 ,能否同时接在一起使用?
    请问 3块 MCP 4725 ,能否
    买来时,ADDR是全开路的,使用代码中的所有地址,均无法使用。 // For Adafruit M
    打砖块游戏
    打砖块游戏
    **** 本内容被作者隐藏 ****
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表