1116 字
6 分钟
24年电赛H题

咳咳… 正式接手的第二个项目:基于无名创新 MSPM0G3507 的智能小车#

先上题目:

🛠️ 材料清单 (BOM)#

  • 主控: 无名创新 MSPM0G3507(板载蜂鸣器、RGB灯)

  • 传感器:

    • MPU 6050 陀螺仪(买32送的,嘿嘿)

    • 感为科技灰度传感器(8路)(白嫖)

  • 驱动与电源:

    • 无名创新电机驱动板(白嫖)

    • 双路带编码器电机(MG310)

    • 12V 电池 (1800mAh)

  • 结构件:

    • 平衡小车底盘 + 铜柱

    • 自制万向轮(详见下文)

    • 配套拓展板(备件,本次未启用)(其实是它的拓展版是无名做的,是和M0的板子配套的,但是我没有这种的端子线,所以没用)

  • 耗材: 杜邦线、热熔胶等

注: 之前在学校兑换(白嫖)了一些零件,自己买的只有电池和电机啦。


🏗️ 硬件结构的“坎坷”演变#

1. 初始方案:平衡小车(失败)#

唔…最开始是打算是用平衡小车做的,因为我买的底板就是平衡车的嘛;但实际调试中遇到了致命的物理结构问题:

  • 重心极度偏移: 铜柱安装好后,电池塞不进预定位置,只能偏后放置。

  • 传感器布局冲突: 为了给前置的灰度传感器留出空间,轮子没有安装在中心,而是靠向电池一侧。

  • 结果: 这种结构导致重心严重偏离, PID救不了一点。硬着头皮调了一整天 PID 后,果断放弃。

_整体大抵就是这样… |375

2. 最终方案:三轮底盘(成功)#

无奈之下只能另想他法。我将两个底板粘在一起,改用 三轮结构

  • 痛点: 手头没有现成的万向轮。

  • 自制万向轮大法:

    • 材料: 塑料瓶盖 + 小圆球 + 纸板。

    • 做法: 瓶盖开大洞,放入圆球,上方用纸板封顶。完美解决! |200|200

  • 结构加固:

    • 铜柱长度不合适(要么太长要么太短),最终方案是用小木板延伸出来,配合 热熔胶 + 长铜柱 固定。

    • 感叹:热熔胶 YYDS!

_现在是这样… |325


💻 代码与算法思路#

关于代码部分,大部分 MPU 的底层代码是由 AI 生成的啦(时间紧迫嘛,没空细学 MPU,而且算法我也不会写QWQ),哈吉米pro的额度已经被我问超n次啦,而灰度循迹部分则是“我提供思路,AI 实现并优化”;主程序也差不多吧,我尝试过根据思路自己写,但是写不出来啊啊!!最终还是AI补全计划·-·

1. 灰度循迹算法#

采用 权重 + 平均数 的计算方式:

  • 权重设定: 将8路传感器从最左到最右分别定义为权重 -44(例如:-4, -3, … 3, 4)。

  • 偏移量计算: 偏移量=读取值总路数\text{偏移量} = \frac{\sum \text{读取值}}{\text{总路数}}

  • 控制逻辑: PID 算法以“偏移量为 0”为目标进行调控。

  • 无线模式(盲跑): 设定一个特殊模式,当灰度传感器完全读不到黑线时触发,停止 PID 纠偏,保持当前状态(防止在无红线区域乱跑)。

2. 主程序架构:状态机#

因为是四个问题嘛,我就想着用四个状态机来实现,用按键切换状态机,并用led闪烁来提示目前是哪个状态,

  • 问题一(直线行驶):

    • 强制直走。

    • 利用 MPU6050 + PID 防止走斜。

  • 问题二(直线+弯道):

    • AB、CD 段:同问题一,直走 + MPU PID 修正。

    • 过弯段:切换为灰度循迹 + PID(目标偏移量 0)。

  • 问题三 & 四(复杂路径与循环):

    • 转向逻辑(B转D): 最初想用陀螺仪角度控制,但 MPU 零漂太大且代码非自写难以修改,索性改为 “写死旋转时间” 的开环控制啦。

    • A到C转向: 因为我懒嘛,做第三问的时候就没写A到C转向,打算手动瞄准,然后发射~但是任务四要转的,所以任务四时补上了这段代码(逻辑同 B转D)。

    • 循环逻辑: 任务四本质上就是任务三代码的 4 次循环。


🎯 总结与后续#

剩下的工作主要就是微调了,包括调整 PID 的 KpKd 参数,以及精细化调整旋转时间等。

(下面是视频演示…) 四天通关电赛H题_哔哩哔哩_bilibili

24年电赛H题
https://mizuki.mysqil.com/posts/技术类/24年电赛h题/
作者
乄轩丶辕°
发布于
2026-02-17
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00