|
8| 0
|
C4002毫米波雷达智能圈速与状态监测系统 项目实战... |
|
一、项目背景1.1 问题提出 在日常体育课及课后跑步训练中,我们发现一个普遍但容易被忽视的问题:学生在操场绕圈跑时,很难准确记住自己跑了多少圈。 通过对本校高一年级一个班级共42名学生的问卷调查显示:
进一步分析原因:
该问题直接影响训练计划的执行效率,也降低了跑步的专注体验。这不是一个“记性差”的问题,而是一个缺少低成本、易部署的辅助工具的问题。 传统红外对射方案仅能“计数”,无法感知速度与运动状态。而毫米波雷达技术可非接触式检测目标速度、运动/静止状态,非常适合跑道场景。 二、项目目的2.1 核心目标本项目拟采用 C4002 毫米波雷达模块,结合物联网平台,构建一个智能圈速与状态监测系统,解决学生跑步记圈难的问题。 2.2 具体功能C4002这款毫米波雷达模块可以检测范围内:单一目标运动速度,目标距离,目标方向(靠近/远离雷达,并不能检测目标方位角度等数据),目标状态(无目标/静态存在/动态存在)信息。并且需要注意,该模块检测范围内出现多个目标会导致检测数据不准确。其详细信息可以参考如下链接。 https://www.dfrobot.com.cn/goods-4302.html https://wiki.dfrobot.com.cn/SKU_SEN0691_C4002%20mmWave%20Motion%20and%20Static%20Presence%20Module 在本项目中,我需要实现如下具体功能:
该项目组成由下图所示,在操场部署该系统后,ESP8266开发板会将Arduino传来的雷达数据通过WIFI上传到云端MQTT服务器进行信息发布。同时,在操场的运动大屏等设备通过网络连接到云端服务器,并成功订阅该系统的话题后即可实时接收运动员通过雷达检测点时的数据信息,实现多端共享数据的功能。 ![]() ![]() ![]() ![]() ![]() 3.2 技术选型
![]() ![]() 状态机定义(触发状态 + 运动状态) ![]() ![]() ![]() ![]() 核心算法(状态机 + 圈数判断参数) ![]() ![]()
![]() 项目目前并未完全结项,系统仍在测试当中,所以暂未开发操场大屏幕和手环软件程序,仅开发手机APP进行数据调试处理。 4.2.1 Arduino UNO 端代码核心功能模块: /* * 完整代码见附件 * [在此插入代码截图或关键代码段] */// 核心数据结构struct LapData { unsigned int lapCount; // 圈数 float lapTime; // 单圈时间 float avgSpeed; // 平均速度 float instantSpeed; // 瞬时速度 float bestLapTime; // 最佳圈速 float bestInstantSpeed; // 最佳瞬时速度};// 状态机设计enum TriggerState { WAITING_ENTER, // 等待进入检测区 INSIDE_ZONE, // 在检测区内 WAITING_EXIT // 等待离开检测区};enum RunState { IDLE = 0, // 空闲(无人) RUNNING = 1, // 奔跑中 SLOWING = 2, // 减速中 STOPPED = 3 // 已停止};4.2.2 ESP8266 端代码负责透传数据到 MQTT 服务器: // [在此插入ESP8266代码截图]// MQTT配置const char* mqtt_server = "2*********4.***.***";//修改为你自己的MQTT服务器地址const int mqtt_port = 1883;const char* mqtt_topic = "track/data";// 转发逻辑:接收UNO数据 → 直接发送到MQTT4.2.3 数据格式设计采用 JSON 格式进行硬件与 APP 之间的通信: 圈速数据(每完成一圈发送) { "l": 3, // 圈数 "t": 65.44, // 单圈时间(秒) "as": 6.11, // 平均速度(m/s) "is": 5.80, // 瞬时速度(m/s) "bl": 65.20, // 最佳圈速(秒) "bi": 6.35 // 最佳瞬时速度(m/s)}实时数据(每秒发送) { "s": 1, // 状态码(0-3) "cs": 5.20, // 当前速度(m/s) "ls": 5.84, // 上圈平均速度(m/s) "l": 3, // 已完成圈数 "bl": 65.20, // 最佳圈速(秒) "bi": 6.35 // 最佳瞬时速度(m/s)}4.3 云端平台搭建4.3.1 MQTT 服务器配置# MQTT连接参数服务器地址: 2********4.o**p.**p端口: 1883用户名: client密码: 123456订阅主题: track/#4.3.2 数据流测试![]() 4.4 APP 界面设计(App Inventor) APP使用APP Inventor平台进行开发,因暂未找到国内好用的免费版镜像站,我使用的是国外官方站进行开发,该站部分地区需要科学上网才能使用,平台地址:https://appinventor.mit.edu/ 关于这个的开发教程,可以去B站搜索用户ID:老巫婆的程序世界,关注金从军老师进行学习。 4.4.1 APP界面布局![]() 4.4.2 通信逻辑
APP关键逻辑代码块如图所示。 ![]() ![]() 注明:因暂未做多目标区分,于是都按照1人处理数据了,APP界面中的圈数和平均速度,是根据两次触发雷达的时间差与跑道400米相除计算得来的。而我在代码中为了防止两次触发时间过短的情况,我做了时间限制:首次触发雷达计时后30秒内不再计入雷达数据。但当30秒之后,如果雷达再次检测到目标,则会认为你已经跑完1圈了,就会结束计时并计算数据,由于测试环境人实在是太多了,所以该数据并不准确,当个乐子就好。 在下面的测试中,值得关注的数据只需看当前瞬时速度和运动状态即可,当前瞬时速度是你通过雷达时的实时速度,并且程序根据这个速度来进行区分运动状态:当实时速度大于2m/s,系统认为你在”奔跑中“,当你的速度小于2m/s并且仍在继续减小,系统认为你在”减速中“,当你的速度小于2m/s并且多次未有明显变化,系统就会认为你在”已停止“ 5.1 测试环境
![]() ![]() ![]()
![]() 5.4 实地测试结果5.4.1 测试数据记录 圈数和平均速度当个乐子就好。
![]() ![]() 5.4.2 测试结论 优点:
待优化项:
既然都写到这了,那就再多说几点这个模块的问题吧,我在测试的时候考虑到对照实验,我不只去测试操场跑步数据,我还测试了骑电动车和汽车的速度,但数据并不在预期范围内,貌似该模块只对人体比较灵敏,而对大面积移动的物体并无明显变化,这再次刷新了我对毫米波雷达的认知。 ![]() ![]() ![]() ![]() ![]() ![]() 在上面对汽车,电动车的测试中,时而数据准确,时而不准,很是迷茫,而面对下面的百吨王,却仅仅测出了0.22m/s的瞬时速度。 ![]() 七、项目成果总结7.1 完成的功能
本项目成功验证了毫米波雷达在操场圈速监测场景中的可行性,为后续的多人识别、科学训练分析奠定了基础。系统具有以下价值:
8.2 参考资料 本项目在设计时参考并学习了以下几位老师的分享,少走了很多弯路,非常感谢各位老师的付出! https://blog.csdn.net/weixin_41659040/article/details/161263643?utm_source=miniapp_weixin https://blog.csdn.net/weixin_41659040/article/details/161366859?utm_source=miniapp_weixin https://wiki.dfrobot.com.cn/SKU_SEN0691_C4002%20mmWave%20Motion%20and%20Static%20Presence%20Module https://github.com/DFRobot/DFRobot_C4002 九、项目展望9.1 短期优化
|
沪公网安备31011502402448© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed