用TFmini Plus实现体前屈自动测量
1. 体前屈自动测量仪1.1 应用背景坐位体前屈(如图1.1所示)是一种体育锻炼项目,也是中国大中小学体质健康测试项目,它的测试目的是测量在静止状态下的躯干、腰、髋等关节可能达到的活动幅度,主要反映这些部位的关节、韧带和肌肉的伸展性和弹性及身体柔韧素质的发展水平,现坐位体前屈是中国体育中考中的必考项目之一。http://bbsimg2.81uav.net/attachment/forum/201908/02/161619i1l3h8vjv1vwl331.jpg图1.1 坐位体前屈1.2 应用简介本系统为利用北醒公司TFmini Plus、Arduino-UNO板、0.91寸OLED显示模块、BY8301-16P语音模块、喇叭以及传统的坐位体前屈测量仪结合设计开发的自动测量装置。系统作用:实现体前屈自动测量,并显示、播报测量结果,减少人为读数过程,使体育测试过程更智能化、人性化。2. 试验设备及接线2.1 实验设备lBenewake TFmini Plus标版http://bbsimg2.81uav.net/attachment/forum/201908/02/161619mpp6jw6t6gx7118p.jpg
图2.1 TFmini PlusTFmini Plus(如图2.1所示),详细参数见TFmini Plus使用说明。lArduino-UNO板http://bbsimg2.81uav.net/attachment/forum/201908/02/161619mmr644m5awdmmd4i.png
图2.2 Arduino UNOl0.91寸OLED液晶屏http://bbsimg2.81uav.net/attachment/forum/201908/02/161619zsszq7t37qqk3tig.png
图2.3 OLED显示屏规格:0.91寸OLED屏(如图2.3所示),128*32点阵,IIC控制接口,兼容3.3-5V。作用:用来显示测量结果。lBY8301-16P语音模块http://bbsimg2.81uav.net/attachment/forum/201908/02/161619aqym5o5k4b5442yk.png
图2.4 BY8301-16P语音模块规格:语音模块如图2.4所示,其工作电压为DC 3.6-5V,支持MP3/WAV格式,支持UART串口通信控制,自带3W功放/可外接功放。作用:用来控制喇叭,播报提示信息和测量结果。lBY-90-1W 无源喇叭http://bbsimg2.81uav.net/attachment/forum/201908/02/161620az9sz7626z872s3b.png
图2.5 无源喇叭规格:喇叭(如图2.5所示)功率为8Ω1W。作用:播报提示信息和测量结果。l电脑http://bbsimg2.81uav.net/attachment/forum/201908/02/161620zhz3i212lbv0u3z1.png
图2.6 电脑如图2.6所示,作为该系统的上位机,用来编写并上传程序到UNO板。l传统坐位体前屈测量仪http://bbsimg2.81uav.net/attachment/forum/201908/02/161620um0v257afv8m7ehh.jpg
图2.7 体前屈测试仪l连接线http://bbsimg2.81uav.net/attachment/forum/201908/02/161620a52ifqvg2itgton2.jpgfile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg图2.8 连接线
杜邦线——用于Plus与UNO板连接;USB方口数据线——用于UNO板与电脑连接以及供电。
2.2 接线http://bbsimg2.81uav.net/attachment/forum/201908/02/161620wef73fejieee3vvm.jpg
图2.9 系统接线图lTFmini Plus 线序:http://bbsimg2.81uav.net/attachment/forum/201908/02/161621x9cnlhhh6iyni6hl.png
图2.10 TFmini Plus线序http://bbsimg2.81uav.net/attachment/forum/201908/02/161621sy3zb3raraza61f3.pngTFminiPlus供电电压为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);l0.91寸OLED显示屏连接5V(或3.3V)和GND供电, SCL和SDA接UNO板的SCL和SDA;
3. 体前屈自动测量原理http://bbsimg2.81uav.net/attachment/forum/201908/02/161621giyl9wit5gt22t2g.png
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image025.png图3.1 体前屈自动测量系统示意图http://bbsimg2.81uav.net/attachment/forum/201908/02/161622n82q122jg5322wru.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,系统测距稳定,播报和显示测量结果;最后,判断是否需要进行下一次测试,如果不需要,断电,结束测试。
4. 系统程序编写该例程需要添加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;//存放雷达测量的数据int k;const int HEADER=0x59;//数据包帧头/*体前屈自动测量数据*/int D;//雷达实测距离值int d=0;//上一个距离值int result=0;const int zero=40;//标定的0点值,安装完成后需要进行标定设置int VAR={0};int var;int num=0;const int start=54;//标定的起点值,安装完成后需要进行标定设置int CHA={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=HEADER; if(Serial2.read()==HEADER)//判断数据包帧头0x59 { uart=HEADER; for(k=2;k<9;k++)//存储数据到数组 { uart=Serial2.read(); } check=uart+uart+uart+uart+uart+uart+uart+uart; if(uart==(check&0xff))//按照协议对收到的数据进行校验 { D=uart+uart*256;//计算距离值 if(!init_stat&& D==start) { cha=D-start; for(k=15;k>=1;k--) { CHA=CHA; } CHA =cha; for(k=0;k<15;k++) { if(CHA==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=VAR; } VAR =var; for(k=0;k<23;k++) { if(VAR==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 工作流程图http://bbsimg2.81uav.net/attachment/forum/201908/02/161622v6s9dha9hi6qhse6.png
图5.1 系统工作流程图l系统安装完成后,供电,上传程序,校准起始点和0位置;l挡板置于起始点,等语音模块播报“ready”后,开始测量;l挡板离开起始点后,不能停顿过长时间,一般在2.3s以内,挡板静止后,稳定测量后,播报并在OLED中显示测量结果。5.2 数据查看http://bbsimg2.81uav.net/attachment/forum/201908/02/161622mwxf30a1w64q4gg5.png
图5.2 工作数据6. 注意事项lTFmini Plus的测量分辨率为5mm,如果测量精度为mm,会有较大误差,所以只测量到cm,后面可以用精度更高的产品,实现mm级测量。l体前屈自动测量仪在测量过程中,不会播报,但是,不能停顿过长时间(小于2.3s)。l该系统为一次一测,测量完毕后,需要重新归位到起始点。 如您认可上述经验,欢迎您的联系:
010-57456983
北醒(北京)光子科技有限公司
北醒激光雷达
电话:010-5745 6983
官方微信公众号:benewake-bj
或搜索淘宝:北醒光子科技有限公司
不错的模块
页:
[1]