摘 要:仰卧起坐作为大学生体测项目之一,实践中存在测试速度慢、监测工作量大、人为因素影响大等痛点,迫切需要便携式、智能化计数设备并能实现多点无线组网工作。采用国产CH32单片机结合nRF24L01通信模块,借助MPU6050角度传感器,设计实现了准确进行仰卧起坐计数的设备,包括用于仰卧起坐计数的手环设备和进行组网控制和数据统计的终端设备。通过无线组网技术,同时实现控制终端和多个手环之间的命令分发与信息收集,并实时交换测试数据,最后将数据经过蓝牙传送到手机APP,方便监考人员处理与统计。本设备计数准确,在突发网络中断时,恢复通信后可无损恢复测试数据,鲁棒性好,可有效减少仰卧起坐项目的考试工作量,消除人为干扰因素,提高体测效率。
关键词:仰卧起坐计数;CH32F103C8T6;MPU6050;nRF24L01;无线组网;蓝牙传输;OLED;并行工作
中图分类号:TP273 文献标识码:A 文章编号:2095-1302(2024)04-00-05
DOI:10.16667/j.issn.2095-1302.2024.04.010
0 引 言
在大学体育测试项目中,仰卧起坐常采用一对一人力监考和计数,存在速度慢、工作量大、人为影响大等缺点。此外,被测试人如果仰卧起坐速度过快、姿势不标准等也会极大影响测试数据的准确性[1]。因此,急需便携式电子设备来简化仰卧起坐计数的考试流程,在保证测试数据准确的同时提高统计效率。目前市面上在售的仰卧起坐计数设备存在诸多问题,如不够便携、价格昂贵、智能化程度不高等[2],可以适用于大量学生考试的组网设备尚未见产。现有基于STM32的无线健康检测设备[3]虽然可以实现单人简单的运动监测与数据上传,但不能实现大规模组网监测,不适合在多测试对象同时进行体测的场合使用。
本文将物联网技术运用在仰卧起坐计数的考试中,设计了一款运动监测手环,在准确记录个体仰卧起坐个数的同时,通过无线组网技术,完成多客户端数据的实时汇总,实现了多个设备终端并行工作的仰卧起坐准确计数。
1 总体设计
本文以CH32F103C8T6为核心控制器,设计用于仰卧起坐计数的监测手环和统计终端。首先在统计终端上设定计时时间和需要访问手环的数量,然后按下“开始”,统计终端利用nRF24L01给每个手环发送开始计数信号,监测手环接收到开始信号后开始计时。同时,手环上的角度传感器MPU6050持续监测用户的运动状态,当角度变化值达到一特定角度且手臂夹紧触碰到膝盖后,判定用户完成该动作,运动计数值加1。计数期间,所有监测手环通过nRF24L01将数据汇总到统计终端,统计终端将数据实时显示在屏幕上,方便监考员监督与记录。比赛结束后,通过蓝牙上传数据给手机,用于后期数据的处理与保存。系统组成如图1所示。
2 系统硬件设计
本项目硬件由2个主要设备组成,一个是进行仰卧起坐计数的手环设备,另一个是进行组网控制和数据统计的终端设备。两者共同的硬件组成有单片机、显示模块、无线通信模块、地址选择模块。其中,手环还包含仰卧起坐运动监测模块,统计终端另含蓝牙模块。为了精简布局,节约资源,本项目的手环和终端使用同一布局的PCB,采用直插件封装,可以选择不同的模块,组成手环和终端两套功能不同的
设备。
2.1 无线组网模块的选择
目前比较常用的无线通信方式有ZigBee、BlueTooth、WiFi等。实际使用中,BlueTooth无线传输协议在2.4 GHz频段上会存在干扰,且无线组网难度大,连接时间长,不方便使用;WiFi硬件发热量大,能耗高,价格昂贵,可支持设备总数量少,不适合做低功耗互联手环;ZigBee模块使用复杂,协议不公开,对新手来说难度大。
本项目使用Nordic公司出品的nRF24L01无线通信芯片,其具有体积小、功耗低、传播距离远等特点。nRF24L01采用Nordic自研的Enhanced ShortBurst协议,连接方式简单,组网时间短,相对于ZigBee、BlueTooth通信方式,此无线通信方式速度快,便于快速组网和使用。此外,nRF24L01芯片属于微型低功耗频射芯片,内含频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器,相比WiFi硬件,此模块价格低,扩展性强,发热量少,非常适合做批量组网设备。
2.2 运动监测模块
监测手环使用MPU6050姿态传感器,配合霍尔传感器与光敏电阻实现姿态判断。MPU6050是由3个陀螺仪和
3个加速度传感器组成的六轴运动处理组件,是一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器。以数字形式输出六轴角度,经过CH32运算后得出欧拉角,即X、Y、Z轴的旋转角度。
在体育测试中,选手将监测手环捆绑在手臂指定位置(如图2),在比赛开始后,监测手环中的MPU6050持续监测选手的运动状态,当与初始状态的角度差达到一定程度时,监测手环的运动计数值加1,持续累计,直到选手完成
比赛。
2.3 CH32单片机
CH32F103系列是沁恒出品的32位Cortex-M3 MCU,集成了时钟安全机制、多级电源管理,具有2路USB 2.0接口、多通道TouchKey、通用DMA控制器等和多通道
12位ADC、12位DAC转换模块,多组定时器,CAN通信控制器,I2C/USART/SPI等丰富的外设资源。与ST系列意法半导体芯片相比,国产CH32系列具有功能完善、价格低廉、型号众多等优点,完美满足监测手环的需求。
2.4 OLED屏幕
在项目中,需要用屏幕提醒学生的身份号码(即手环的物理地址)、仰卧起坐运动次数、无线组网通信是否成功等信息,方便选手确认身份号码,通过读取手环显示数据来改进自己的运动姿势,顺利完成体育测试。
0.96英寸蓝色OLED屏幕具有自发光、对比度高、无需背光LED灯、反应速度快、I2C通信、视角广、使用温度范围大等优点,可满足项目要求。其原理如图3所示。
2.5 波动开关模组
每个模块通过6位波动开关确定监测手环自身物理地址,开代表1,关代表0,即通过6位二进制数字指示其地址,例如将模块的第3和4号开关打开,其他关闭,则代表001100,转化为十进制,即物理地址为12号,MCU读取信息后给每个监测手环编号,使得统计终端可以一对一与其通信,确保信号的安全与准确。波动开关原理如图4所示。
3 系统软件设计
本系统不但要通过佩戴手环实现仰卧起坐的准确计数,还要通过控制终端(主机)实现手环(从机)的无线组网和数据汇总。主机和从机的通信流程如图5所示。
3.1 MPU6050运动监测
MPU6050芯片中设置了三轴加速度传感器、三轴陀螺仪和温度传感器,但在实际使用中(比如做运动监测)需要对单片机读取的I2C原始数据进行处理,得到姿态数据[4-7],即航向角(yaw)、俯仰角(pitch)和横滚角(roll)。
在实际应用场景中,对利用I2C通信读取的原始数据(三轴加速度、三轴陀螺仪、温度)进行姿态计算[8-11],借助MPU6050自带的数字运动处理器DMP,结合官方InvenSense提供的嵌入式运动监测库,可以对监测数据进行预处理,实现滤波检波[12]等功能,加快运算过程,缩短运算周期。在初始化过程中加入对DMP的初始化,可以将单片机读取的原始数据直接转化成四元数输出,得到四元数后,再经过单片机调用库函数运算处理、记录,推算出欧拉角[13],即可进行运动员姿态分析。
计时开始后,MPU6050记录学生当前三轴角度,学生开始做运动后,MPU6050持续读取角度,并计算X、Y、Z轴的角度差。若用罗格里格斯公式[14]计算三轴角度差,需要大量运算,对于算力有限的嵌入式单片机CH32而言,需要占用大量资源,会导致主函数循环太慢,影响无线组网的数据传输。为了简化运算,本项目将对监测手环的捆绑位置和装置PCB布局进行优化,使得仰卧起坐运动保持在一个轴上,进而简化运算。
3.2 基于nRF24L01的无线组网
为实现大量设备同时组网,且满足功耗低、体积小、易操作等需求,本项目选用nRF24l01以满足无线组网的技术需求[15]。
如果要求2个nRF24L01实现通信,则需满足以下4个条件:
(1)发射、接收的数据宽度相同;
(2)发射、接收的物理地址相同(共5个8 bit地址);
(3)发射、接收的频道相同;
(4)发射、接收的速率相同。
因为nRF24L01会把发送地址、接收地址和需要发送的数据一起打包发送,所以不能实现像广播那样一发多收。但由于发送接收时间极短,终端设备可以在极短的时间内快速访问多个模块,以达到一对多通信效果。主要代码如下:
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;// SPI设置为全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
//设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
// SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//时钟悬空高
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
//数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
//内部NSS信号有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//波特率
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
//数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7;
//CRC值计算的多项式
SPI_Init(SPI2, amp;SPI_InitStructure);
//根据参数初始化外设SPIx寄存器
nRF24L01的无线组网模式有以下几种可以选择:
(1)修改不同的地址,向目标物理地址的nRF24L01发送数据。
(2)修改nRF24L01的发送频道实现一对多通信。
实验证明,通过修改nRF24L01的发送频道来实现一对多通信的方法并不可行,因为相邻的频道选择会产生干扰,例如从机1的频道是15,从机2的频道是20,那么2个频道之间会存在干扰,导致接收数据错误。为减小频道干扰,扩大了频道距离,但频道的范围为0~125,所以实际中可组网的设备少,不能满足实际使用需求。故本项目修改不同地址来实现一对多无线组网,理论上可以实现2 555个设备无线组网,满足实际需要,且信息不会相互干扰,实施过程简单。设定收发地址的代码如下:
u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0xff};//发送地址
u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0xff};//接收地址
3.3 数据采集方式的选择
在体育考试装置中,每一个模块都有一个独一无二的地址,主机通过轮询的方式采集每个从机的数据。
(1)主机:上电后自动为发送模式,主机每次给一个从机地址发送询问成绩信号0xff,若从机收到信号,则主机切换为接收模式接收数据,接收完数据切换为发送模式继续询问下一个地址。若没有目标从机,则询问5次后,自动切换为下一个地址继续发送‘询问成绩’信号。
(2)从机:从机上电后,自动切换为接收模式,当接收到主机发送的询问成绩信号0xff时,从机切换为发送模式,将成绩等信息发送给主机,发送完毕自动切换为接收模式,开始等待下一次主机的询问。
nRF24L01可以设置通信频率为10 MHz,统计终端和每个监测手环以极快的速度一对一传送数据,大量数据可以及时汇总,实时更新,实现一对多精准快速的数据采集。
部分代码如下:
while(zhu_cong==0)//从模式
{OLED_ShowNum(104,2,Time,4,12);//OLED屏GUI设计
OLED_ShowNum(0,5,motion_times,4,12); //OLED屏GUI设计
OLED_ShowNum(104,4,predict_time,4,12);
//OLED屏GUI设计
cong_judge();//检测运动状态
res[0]=motion_times; //运动次数传入发送数组
cong_shou(res,tmp_buf);//监听主机,收到立刻发送数据
if(tmp_buf[2]==1){TIM_Cmd(TIM3,ENABLE); predict_time=tmp_buf[3]; }//主机发送时间给从机
else if(tmp_buf[2]==0){TIM_Cmd(TIM3,DISABLE); break; }
if(Timegt;predict_time)//判断是否超过设定时间
{ while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14)==1){predict_time=0; }
break;
}
mpu_dmp_get_data(amp;pitch,amp;roll,amp;yaw);//读取欧拉角
}
手持终端采集每个监测手环的数据,计时结束时,将数据打包,通过蓝牙模块与手机串口助手连接,将数据发送给手机,实现数据汇总与上报。
void u3_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART2_TX_BUF);//发送数据长度
for(j=0; jlt;i; j++)//发送数据
{while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
USART_SendData(USART2,USART2_TX_BUF[j]);
}
}
4 实验过程
为确保系统整体设计的科学性与可行性,本实验以大学生体测的仰卧起坐作为测试项目,一人手携统计终端,全程观察数据,另有多人穿戴监测手环,分批多次加入实验,测试系统运行参数与状态。
4.1 MPU6050监测准确度实验
将监测手环准确配带在一位选手手臂上,监测手环和统计终端开机,通过按钮调整统计终端的比赛时间,按下“开始”,选手开始做仰卧起坐,先做20个标准姿势的仰卧起坐,观察统计终端的运动次数计数值是否准确,然后做姿势不标准的仰卧起坐20个,观察统计终端的运动次数计数值是否增加(即测试监测手环是否误判),实验结果见表1、表2所列。结果表明,本手环可以对符合标准的仰卧起坐进行准确计数,非标准仰卧起坐能够准确排除。
4.2 正常过程实验
首先测试手环和终端的工作时间。在空旷的场地下,被测试人员正确配带监测手环,另有一人手持统计终端。比赛开始前,通过终端按键调整比赛时间,如设定计时60 s,然后按下“开始”,比赛开始后,测试人员开始做标准仰卧起坐,观察统计终端屏幕上的成绩以及各模块的执行时间,见表3所列。经实验证明,仰卧起坐一次的时间远超手环的执行时间,不会造成信息延迟。
递增测试手环,进一步测试多个手环同时工作的测试数据准确度。规定每个测试人员每次实验做30个标准仰卧起坐,在统计终端观察数据,是否存在误检测。每次递增2个测试手环,结果见表4所列。实验结果表明,本手环组网后可以实现多人仰卧起坐的准确计数。
4.3 异常过程实验
(1)通信阻塞实验。统计终端(主机)地址设定为8个,即每次轮询8个地址,手环(即从机)只开启4个,即主机每次轮询只有4个从机地址会应答,其他4个地址主机会一直重复发送“询问成绩”的信息,但是不会有应答。实验显示,同一个地址主机会重复询问5次,超出则主机跳过该地址,继续询问下一个地址,不会阻塞。
(2)组网失败测试。在比赛进行时,将手环拿到通信距离之外,即断开无线组网,让选手做2个仰卧起坐,接着再拿回通信距离之内,观察主机计数值是否更新。实验显示,在比赛时间内,通信信号丢失不会影响整体成绩,在规定时间内恢复通信即可恢复比赛数据。
测试结果表明,本系统可以在正常通信距离内实现多个监测手环无线组网,并行传递数据,在部分手环通信中断后,也不会影响整体的无线组网,当失联手环恢复通信后,数据可以无损恢复,失联状态的数据不会丢失,证明系统运行可靠。
5 结 语
目前大部分学校体育考试还是人力监考,一名学生配一名计数员计数,效率低下且人为因素影响大。本文设计的手环及其终端设备完美解决了上述问题。不仅实现了仰卧起坐的准确计数,还可实时传输数据,便于汇总统计。在遇到通信中断时,手环个体也能正常运行,通信恢复后可恢复失联手环的数据,鲁棒性好。另外,本产品使用国产系列单片机,设计成本低,具有竞争优势。
注:本文通讯作者为臧秋华。
参考文献
[1]刘世东.体育中考仪器在测试中易出现的问题及解决策略—以引体向上和仰卧起坐项目为例[J].体育教学,2022,42(6):81.
[2]包梓群.改进目标检测网络的仰卧起坐测试计数[J].智能计算机与应用,2022,12(8):102-105.
[3]丛一凡,王成龙,胡旭,等.基于STM32单片机的健康手环[J].物联网技术,2021,11(6):106-108.
[4]王仪,罗涛,张宏桥,等.基于 MPU6050传感器的人体哑铃动作识别系统的设计[J].湘南学院学报,2020,41(2):121-124.
[5]杜鹏.基于六轴传感器MPU6050的一种低功耗姿态及深度测量装置[J].舰船电子工程,2022,42(6):168-170.
[6]徐夏怡,宫瑶,李玉衡,等.基于MPU6050和步进电机的高精度转动控制方法[J].软件,2020,41(2):39-43.
[7]蔡长青,王鹏.老人跌倒姿态检测研究[J].长春工程学院学报(自然科学版),2019,20(4):29-34.
[8]张振涛,王娟.一种角度融合算法在姿态角解算中的应用[J].吉林化工学院学报,2020,37(3):73-76.
[9]张泽权,金文光.基于MEMS的运动捕捉装置及姿态解算算法设计[D].杭州:浙江大学,2021.
[10]刘庆鹏,于雨,惠力,等.基于四元数的机械海流计姿态解算[J].气象水文海洋仪器,2021,38(1):15-19.
[11]董壮壮,魏文量,田凯文,等.基于 MEMS 传感器的肘关节角度精确测量[J].导航定位学报,2022,10(7):129-135.
[12]刘义,杨鹏.基于卡尔曼滤波的云台自适应姿态优化算法[J].自动化与仪表,2022,37(11):80-86.
[13]朱文辉,李伟,代勇.多变量时序关联分析的跌倒预测算法[J].电子测试,2021,28(17):74-77.
[14]刘锋.罗德里格斯旋转公式的证明及应用[J].江苏科技信息,2020,37(28):37-40.
[15]段瑞彬,唐德渝,龙斌,等.基于DSP和nRF24L01的焊接电参数无线数据传输系统设计[J].焊接技术,2019,48(2):66-69.
收稿日期:2023-04-10 修回日期:2023-05-16
基金项目:2021年江苏省高等教育教改研究课题(2021JSJG367);2021年江苏高校教学研究工作专项课题(2021JSJY059);2021年新工科教育教改研究课题(XJXGKZ04);2022年江苏省大学生创新创业训练计划项目(202210320063Z);2022年江苏省大学生创新创业训练计划项目(202210320090Y)