导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    用TFmini Plus实现体前屈自动测量

    激光雷达
    1
    1
    852
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • benewake
      benewake 最后由 xiaoqiang 编辑

      1.       体前屈自动测量仪
        

      1.1 应用背景
      坐位体前屈(如图1.1所示)是一种体育锻炼项目,也是中国大中小学体质健康测试项目,它的测试目的是测量在静止状态下的躯干、腰、髋等关节可能达到的活动幅度,主要反映这些部位的关节、韧带和肌肉的伸展性和弹性及身体柔韧素质的发展水平,现坐位体前屈是中国体育中考中的必考项目之一。
      2a62c296-1a88-462e-a6ed-f7745a33f299-image.png
      图1.1 坐位体前屈
      1.2 应用简介
      本系统为利用北醒公司TFmini Plus、Arduino-UNO板、0.91寸OLED显示模块、BY8301-16P语音模块、喇叭以及传统的坐位体前屈测量仪结合设计开发的自动测量装置。
      系统作用:实现体前屈自动测量,并显示、播报测量结果,减少人为读数过程,使体育测试过程更智能化、人性化。
      2. 试验设备及接线
      2.1 实验设备
      l Benewake TFmini Plus标版
      f69a5b9c-b245-43cb-93b2-be4108f2d727-image.png
      图2.1 TFmini Plus
      TFmini Plus(如图2.1所示),详细参数见TFmini Plus使用说明。
      l Arduino-UNO板
      a857fc74-0c4d-4f54-82b4-4d90eca95977-image.png
      图2.2 Arduino UNO
      l 0.91寸OLED液晶屏
      09fb98a3-ded5-4214-bb2a-fbd6ca9ad236-image.png
      图2.3 OLED显示屏
      规格:0.91寸OLED屏(如图2.3所示),128*32点阵,IIC控制接口,兼容3.3-5V。
      作用:用来显示测量结果。
      l BY8301-16P语音模块
      b1f50374-40b2-45e5-a8d3-7c307a3c22c3-image.png
      图2.4 BY8301-16P语音模块
      规格:语音模块如图2.4所示,其工作电压为DC 3.6-5V,支持MP3/WAV格式,支持UART串口通信控制,自带3W功放/可外接功放。
      作用:用来控制喇叭,播报提示信息和测量结果。
      l BY-90-1W 无源喇叭
      51980e4c-ff5d-423f-b080-4b1bd8ab66e5-image.png
      图2.5 无源喇叭
      规格:喇叭(如图2.5所示)功率为8Ω1W。
      作用:播报提示信息和测量结果。
      l 电脑
      609994fb-0777-4d88-8c7b-a48152b895dc-image.png
      图2.6 电脑
      如图2.6所示,作为该系统的上位机,用来编写并上传程序到UNO板。
      l 传统坐位体前屈测量仪
      ea11e23f-6120-4def-add7-25eb981cbaff-image.png
      图2.7 体前屈测试仪
      l 连接线
      055d4db8-3628-4a9b-9230-04f1703a83e3-image.png
      图2.8 连接线

      杜邦线——用于Plus与UNO板连接;
      USB方口数据线——用于UNO板与电脑连接以及供电。
      2.2 接线
      0b22ad21-9b2e-4f9b-8d87-3c590dc474f2-image.png
      图2.9 系统接线图
      l TFmini Plus 线序:
      01bbd060-5957-4470-af78-1503dd9a9549-image.png
      图2.10 TFmini Plus线序
      2daaf77f-78e1-4d90-a4d8-0b2ada47aa37-image.png
      TFminiPlus供电电压为5V,直接连接Arduino板的5V和GND,其他雷达需查阅产品规格书,确保供电正常;
      l 对于Arduino UNO板,串口通信连接需要注意:
      (1) TFmini Plus的TX端接板子的pin 4口(软串口Serial2的RX),雷达的RX端接板子的pin 5口(软串口Serial2的TX),
      (2) 语音模块接UNO板的5V和GND,TX端接板子的pin 2口(软串口Serial1的RX),雷达的RX端接板子的pin 3口(软串口Serial1的TX),软串口1定义在voice库中,语音模块只能按照顺序接UNO板的2、3引脚,否则必须修改voice库文件(支持设置音量0-20);
      l 0.91寸OLED显示屏连接5V(或3.3V)和GND供电, SCL和SDA接UNO板的SCL和SDA;

      1.         体前屈自动测量原理
        

      ba9a164a-76c8-46ac-965f-7965cd659d3c-image.png
      图3.1 体前屈自动测量系统示意图
      fac9cd0a-acb7-419e-9f5a-e34436f3e353-image.png
      图3.2 体前屈自动测量工作原理流程图
      如图3.1和图3.2所示,为体前屈自动测量的系统示意图和工作原理流程图。
      首先,我们包含voice和oled库文件,定义变量,对串口、语音模块和OLED显示屏进行初始化;读取雷达数据,对系统进行标定,获得start=dist1,zero=dist0;
      然后,读取数据,判断位置初始化状态init_stat和雷达数据与start的关系,如果不满足要求,获取数据再进行判断,如果满足要求(!init_stat(没有初始化) && D==start(雷达数据与标定的初始位置相等)),语音模块播报“ready” ,开始测量;
      测量过程中,继续判断位置初始化状态init_stat和雷达数据与start的关系,如果不满足要求,获取数据再进行判断,如果满足要求(init_stat(位置初始完毕) && D!=start(挡板离开初始位置));时刻检测挡板是否移动,如果挡板静止,大约经历2.3s,系统测距稳定,播报和显示测量结果;
      最后,判断是否需要进行下一次测试,如果不需要,断电,结束测试。

      1.         系统程序编写
        

      该例程需要添加OLED的库和自定义的库voice和oled。
      file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg
      ##include “voice.h”
      #include “oled.h”
      #include<SoftwareSerial.h>//软串口头文件
      SoftwareSerial Serial2(4,5); //定义软串口名称为Serial2,并把pin2定为RX,pin3定为TX
      /对于有多个串口的arduino板如DUE板,注释掉上面两段代码,直接使用Serial1串口/
      /雷达基本数据/
      int check;//校验数值存放
      int uart[9];//存放雷达测量的数据
      int k;
      const int HEADER=0x59;//数据包帧头
      /体前屈自动测量数据/
      int D;//雷达实测距离值
      int d=0;//上一个距离值
      int result=0;
      const int zero=40;//标定的0点值,安装完成后需要进行标定设置
      int VAR[23]={0};
      int var;
      int num=0;
      const int start=54;//标定的起点值,安装完成后需要进行标定设置
      int CHA[15]={0};
      int cha=0;
      int count=0;
      boolean init_stat=false;//判断是否进行位置初始化
      void setup()
      {
      Serial.begin(115200);//设置arduinouno与电脑连接串口的波特率
      Serial2.begin(115200);
      oled_begin();//OLED显示模块初始化
      voice_begin();//语音模块初始化
      voice_setvolume(14);//设置喇叭音量
      }
      void loop()
      {
      Serial2.listen();
      if(Serial2.available())//查看串口是否有数据输入
      {
      if(Serial2.read()==HEADER)//判断数据包帧头0x59
      {
      uart[0]=HEADER;
      if(Serial2.read()==HEADER)//判断数据包帧头0x59
      {
      uart[1]=HEADER;
      for(k=2;k<9;k++)//存储数据到数组
      {
      uart[k]=Serial2.read();
      }
      check=uart[0]+uart[1]+uart[2]+uart[3]+uart[4]+uart[5]+uart[6]+uart[7];
      if(uart[8]==(check&0xff))//按照协议对收到的数据进行校验
      {
      D=uart[2]+uart[3]*256;//计算距离值
      if(!init_stat&& D==start)
      {
      cha=D-start;
      for(k=15;k>=1;k–)
      {
      CHA[k]=CHA[k-1];
      }
      CHA[0] =cha;
      for(k=0;k<15;k++)
      {
      if(CHA[k]==0)
      {
      count++;
      }
      }
      oled_measuring();
      if(count>=15)
      {
      voice_ready();
      init_stat=true;
      }
      }
      if(D!=0 &&D!=start && init_stat)
      {
      var=abs(D-d);
      for(k=23;k>=1;k–)
      {
      VAR[k]=VAR[k-1];
      }
      VAR[0] =var;
      for(k=0;k<23;k++)
      {
      if(VAR[k]==0)
      {
      num++;
      }
      }
      if(num>=23)
      {
      result=zero-D;
      oled_result(result);
      voice_num(result);
      Serial2.listen();
      init_stat=false;
      }
      d=D;
      num=0;
      }
      }
      }
      }
      }
      }
      5. 系统工作流程和数据查看
      5.1 工作流程图
      9ac2285a-b450-4241-8f35-dfa2b6a93815-image.png
      图5.1 系统工作流程图
      l 系统安装完成后,供电,上传程序,校准起始点和0位置;
      l 挡板置于起始点,等语音模块播报“ready”后,开始测量;
      l 挡板离开起始点后,不能停顿过长时间,一般在2.3s以内,挡板静止后,稳定测量后,播报并在OLED中显示测量结果。
      5.2 数据查看
      63d40a3f-3ecc-4298-b53d-551eede37a3a-image.png
      图5.2 工作数据
      6. 注意事项
      l TFmini Plus的测量分辨率为5mm,如果测量精度为mm,会有较大误差,所以只测量到cm,后面可以用精度更高的产品,实现mm级测量。
      l 体前屈自动测量仪在测量过程中,不会播报,但是,不能停顿过长时间(小于2.3s)。
      l 该系统为一次一测,测量完毕后,需要重新归位到起始点。

      1 条回复 最后回复 回复 引用 0
      • 1 / 1
      • First post
        Last post
      Copyright © 2015-2023 BlueWhale community