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


🛠️ 材料清单 (BOM)
-
主控: 无名创新 MSPM0G3507(板载蜂鸣器、RGB灯)
-
传感器:
-
MPU 6050 陀螺仪(买32送的,嘿嘿)
-
感为科技灰度传感器(8路)(白嫖)
-
-
驱动与电源:
-
无名创新电机驱动板(白嫖)
-
双路带编码器电机(MG310)
-
12V 电池 (1800mAh)
-
-
结构件:
-
平衡小车底盘 + 铜柱
-
自制万向轮(详见下文)
-
配套拓展板(备件,本次未启用)(其实是它的拓展版是无名做的,是和M0的板子配套的,但是我没有这种的端子线,所以没用)
-
-
耗材: 杜邦线、热熔胶等
注: 之前在学校兑换(白嫖)了一些零件,自己买的只有电池和电机啦。
🏗️ 硬件结构的“坎坷”演变
1. 初始方案:平衡小车(失败)
唔…最开始是打算是用平衡小车做的,因为我买的底板就是平衡车的嘛;但实际调试中遇到了致命的物理结构问题:
-
重心极度偏移: 铜柱安装好后,电池塞不进预定位置,只能偏后放置。
-
传感器布局冲突: 为了给前置的灰度传感器留出空间,轮子没有安装在中心,而是靠向电池一侧。
-
结果: 这种结构导致重心严重偏离, PID救不了一点。硬着头皮调了一整天 PID 后,果断放弃。
_整体大抵就是这样…
2. 最终方案:三轮底盘(成功)
无奈之下只能另想他法。我将两个底板粘在一起,改用 三轮结构。
-
痛点: 手头没有现成的万向轮。
-
自制万向轮大法:
-
材料: 塑料瓶盖 + 小圆球 + 纸板。
-
做法: 瓶盖开大洞,放入圆球,上方用纸板封顶。完美解决!


-
-
结构加固:
-
铜柱长度不合适(要么太长要么太短),最终方案是用小木板延伸出来,配合 热熔胶 + 长铜柱 固定。
-
感叹:热熔胶 YYDS!
-
_现在是这样…
💻 代码与算法思路
关于代码部分,大部分 MPU 的底层代码是由 AI 生成的啦(时间紧迫嘛,没空细学 MPU,而且算法我也不会写QWQ),哈吉米pro的额度已经被我问超n次啦,而灰度循迹部分则是“我提供思路,AI 实现并优化”;主程序也差不多吧,我尝试过根据思路自己写,但是写不出来啊啊!!最终还是AI补全计划·-·
1. 灰度循迹算法
采用 权重 + 平均数 的计算方式:
-
权重设定: 将8路传感器从最左到最右分别定义为权重
-4到4(例如:-4, -3, … 3, 4)。 -
偏移量计算: 。
-
控制逻辑: PID 算法以“偏移量为 0”为目标进行调控。
-
无线模式(盲跑): 设定一个特殊模式,当灰度传感器完全读不到黑线时触发,停止 PID 纠偏,保持当前状态(防止在无红线区域乱跑)。
2. 主程序架构:状态机
因为是四个问题嘛,我就想着用四个状态机来实现,用按键切换状态机,并用led闪烁来提示目前是哪个状态,
-
问题一(直线行驶):
-
强制直走。
-
利用
MPU6050 + PID防止走斜。
-
-
问题二(直线+弯道):
-
AB、CD 段:同问题一,直走 + MPU PID 修正。
-
过弯段:切换为灰度循迹 + PID(目标偏移量 0)。
-
-
问题三 & 四(复杂路径与循环):
-
转向逻辑(B转D): 最初想用陀螺仪角度控制,但 MPU 零漂太大且代码非自写难以修改,索性改为 “写死旋转时间” 的开环控制啦。
-
A到C转向: 因为我懒嘛,做第三问的时候就没写A到C转向,打算手动瞄准,然后发射~但是任务四要转的,所以任务四时补上了这段代码(逻辑同 B转D)。
-
循环逻辑: 任务四本质上就是任务三代码的 4 次循环。
-
🎯 总结与后续
剩下的工作主要就是微调了,包括调整 PID 的 Kp、Kd 参数,以及精细化调整旋转时间等。
(下面是视频演示…) 四天通关电赛H题_哔哩哔哩_bilibili
部分信息可能已经过时

