特别感谢组员 @CY 将他的笔记分享给大家!
本文上传于 2023.12.29,立项结题答辩后第二天。
这个总结不光是针对本项目的,也吸取了先前项目和他人的一些经验,更像是一个教训备忘录,给出了一些做项目的经验与教训。 笔者相信主动的反思和总结是很有价值的,从这些经验教训中还可以深入分析自己一些思维习惯方面的问题,当然那就不在本文的讨论范围内了。
本文自然有一些主观和缺漏的地方,欢迎补充。
选型:
- 选型和规划的重要性。无论是自己做的小项目还是需要汇报展示的课题项目,初始的选型对整个项目的进行都产生了决定性的影响。一旦选型不够合理,可能会出现找不到教程、找不到文档资料、工程结构不好修改、库函数不好修改、不支持跨平台、不支持中文等诸多问题。轻则调整删减或是土法手搓,也能完成任务,重则大改结构、推倒重来甚至就此放弃。
- 选择的原则。视时间、团队技术情况、个人技术栈、个人感兴趣领域综合选择。时间紧任务重则可选自己熟悉且简单的,自由度高则可以尝试选不太会但感兴趣的。
- 项目选择。先广泛收集资料,包括但不限于各种项目开源网站、技术博客网站、器件及芯片厂商的官网及文档、哔哩哔哩等综合视频网站。还可以联系老师同学朋友、加入各种技术交流群、在各种网站和论坛中提问等。尽量在项目选型时就考虑好一些核心问题该如何解决,完成项目整体框架的设计。本项目的一大难点和问题即采用了墨水屏作为显示模块,带来了如显示驱动较为复杂、常见的 UI 库难以移植等问题。
- 生态选择。如果只是考虑快速验证功能的话可以采用 Arduino 或者 STM32、树莓派一些较为成熟的库,或者是网上各种经典的库,虽然成了调包侠但胜在快速上手。部分选型如 esp32,虽然可以采用更贴近真实产品开发的框架,但需要做好开发效率、难度的平衡。
设计与创新:
- 功利一点。只要能自圆其说,微小的创新也是创新,不利的方面可以不提,总有可以包装宣传的角度。
- 实在一点。在人机交互、实际价值、现实场景、算法理论等方面做出一些不一样的东西。除去具体的代码或者器件设计的创新,在其他方面的设计与构思也能体现出创新和价值。
代码管理:
- 可在各自分支上开发,便于管理。本项目的各个模块便是在各个分支进行独立开发和测试,再合并到主分支进行统一调用的。
- 最好实现功能和组件的封装。可能的话将各个模块的驱动、各个功能函数封装成对应的组件或者库,加入使用文档说明,提供多样且易用的 API 接口。各种函数和变量等写好注释,便于 Debug 和他人使用。本项目即将墨水屏、GPS 模块和 IMU 模块都封装成了 esp-idf框架中的 component 组件,可直接调用函数接口实现数据传输,也可以很方便地移植到其他项目中。
沟通:
- QQ 群或者其他平台群组,便于文件管理和交流。
- 交流最好线下,不然信息交流效率较低,有些想法和思路穿搭可能不够到位。
- 在保证组内和谐氛围的前提下及时提出一些看法和建议,协调好各方意见,避免相左的意见对协作开发的阻碍。
分工:
- 软件和硬件。分配好任务量,没开发任务的可以考虑完成报告、演示、幻灯片等的准备,或者进行资料的查找和功能测试。
- 独立开发和统筹协调。对于相对简单的模块或功能开发,在保持沟通和基本确定需求的情况下可以一个人独立开发测试,便于保证码风和整体设计的完整性。但如果涉及到较为复杂的模块,需要协作开发,则要做好沟通交流,确保各人的想法大致是相同的。最好由一个人统筹协调规划,考虑各种组件和程序的协作。
注意硬件问题:
- 故障排查。可能软件没有问题,就是单纯的硬件故障,比如电池没电、接线不稳、接线出错、虚焊、硬件损坏等。可采取控制变量或单独测试等方法寻找问题。
- 便利与效率。在硬件设计和组装时最好考虑到调试测试中的便捷性,比如设计开关、构建简单的烧录或者调试流程、引出备用或者便于调试的接口或引脚、规范接线并做好走线管理等。
细心与保险:
- 调试的原则。尽量交叉检查和重复检查,确保各个流程和操作的安全性。避免出现类似 VCC 和 GND 接反了、电流倒灌或超过耐压烧板子、烧录错程序、忘了烧程序、没接电源、没开开关等低级错误或危险操作。尤其是在长时间工作和不断重复调试时容易犯迷糊。
- 软件调试注意代码管理。在修改和调试中尽量设计好代码管理的模式,防止忘记自己改了什么代码、忘记将临时修改的语句改回去等情况的出现。
答辩展示和报告:
- 做了什么。成品能现场展示最好,或者录好视频拍好照片,突出你们做了什么,大多数老师只有心思看你的演示视频,做了什么就要展示出来。(你说都写在报告里了?对不起,基本没人看的)
- 答辩的精髓。“答而不辩”等经验很多,尝试认清部分“答辩”的本质,自然能找到最优的应对方法。
实际成品:
- “颜值”很重要。外壳、交互 UI 等设计虽然不是功能的核心,但一个相对而言“高颜值”的成品总归是能带来一个好印象的。
- 交互要做好。最好让完全不了解相关领域的人看一眼也大致知道该成品能做什么,或者做好相关的说明和讲解。
备份: 无论是代码还是各种报告和 PPT,都做好备份(最好是两重甚至更多的备份),避免出现无法回退代码版本、工程文件丢失、忘带 U 盘、汇报人睡过头联系不上等问题。
器件冗余: 各种器件最好准备一份及以上替换品,避免出现ddl时硬件故障导致无法验收,或者无法排查硬件故障等问题。
应急方案: 尽量准备好一个预案,如果主方案出故障或者失败该怎么处理或调整。