基于 Arduino 的解魔方机器人一些总结
· 阅读需 4 分钟
项目:Rubik's cube solving robot
Photo at the botron cup final:

Video address:
0x01 期间的一些问题
解魔方机器人,最初只是大一的一个想法,然后那会调研了下,成本需要两三k,并且是动力老男孩的那种版本,印象中其他类型的解魔方机器人需要的动手能力比较强。
在毕昇杯想项目的过程中,本来有一个区域性物流定位的项目,但是相关基础是在不好,并没有相关思路,所以同时也在构思其他项目,在一次睡梦中,想到了解魔方机器人,想到了现在的原型,并且在寒假中开始搜集资料,整理思路。
在刚开始的时候,遇到了一些问题。
首先是材料选择的问题,因为并没有相关经验,也没有找到前人的经验,所以在底座和滑动的选择上,建立了好几个相关方案。
0x02 期间的一些收获
在期间,王总也在割板子的过程中受了几次伤;也好几次在晚上十一点熄灯以后进行一些业务和技术上的讨论。
0x03 无可置换的控制板
0x03.1 function(核心功能)
- 上位机:Android 客户端完成摄像头采集、颜色识别、求解、下发指令
- 下位机:Arduino/控制板负责命令解析、动作时序与舵机驱动
- 目标:在给定初始姿态与配色约定下,完成三阶魔方复原
0x03.2 build(构建与模块)
android client
- UI:android-ui / Material 风格 Tab(原型阶段更重视“状态可观测”)
- 关键点:识别结果可视化、当前步骤/计时展示、连接状态与异常提示
The control side arduino
- 关键点:动作宏(推进/夹持/旋转/退回)拆分、超时保护、急停回安全位
- 建议:加入 ACK/重发(避免蓝牙抖动导致动作堆积)
0x04 博创杯参赛小记
0x04.1 参赛前:把“能跑”变成“能演示”
做作品和做比赛演示是两件事。参赛前最关键的不是再加功能,而是把演示链路收敛成可控、可复现、可解释:
- 演示脚本:从上电、归零、识别、求解、执行到结束,每一步给观众看到“状态在变化”
- 失败预案:识别失败/通信失败/动作卡住时,能“一键停机松手并复位”
- 参数固化:曝光/取样区域/阈值、舵机端点/延时参数尽量写死在配置里,别现场手改
0x04.2 现场:稳定 性细节比炫技更重要
比赛现场最常见的变量是:
- 光照变化(颜色识别受影响)
- 供电不稳(舵机一上力就掉压,MCU/蓝牙莫名重启)
- 线材/接头松动(USB-串口、蓝牙、电源线)
- 场地噪声与围观压力
所以建议现场准备一个“工具箱”:
- 备用电源/转换头、延长线、扎带、电工胶带
- 备用舵机/舵机臂、螺丝刀、内六角、热熔胶(可选)
0x04.3 演示策略:先短闭环,再完整复原
如果时间紧张,演示可以分两段:
- 短链路:只演示“识别 -> 求解 -> 下发”与“单个动作宏”(证明软件和硬件都通)
- 完整链路:再做整套复原(可用视频/照片做补充,避免一次失败影响整体观感)
0x04.4 复盘:比赛给到的最大收益
- “能跑一次”不难,“能稳定跑”才是产品化的起点
- 把问题写成 checklist(供电/共地/串口/限位/参数),下次调试效率会提升一个量级
- 系统拆分要清晰:上位机负责“看 + 算”,下位机负责“动 + 保证动作可靠”
0x05 开源协议与致谢
agreement
- Apache License(以项目仓库声明为准)
Thanks
Android client section: