本文作者:谢斌
--写在前面--
之前有推过一篇文章:是我的一个拿全国一等奖的学弟,有兴趣的可以点进去看看:全国一等奖的获得者,如今去当了人民教师
而今天这位全国一等奖的获得者呢,就是我另外一个学弟,是我手把手带出来的,非常励志,完完全全的一个小白,推荐各位阅读全文。
--正文--
先自我介绍一下吧,本人就读湖南一所普通二本,国赛的时候选担任我们小队队长,负责程序部分,拿了2017年全国大学生电子设计竞赛控制组的国家一等奖。在搞国赛前,整个大学我有三个坎没能过去,一想起就觉得特别遗憾。
第一个,学生会竞选部长时落选;
第二个,就是省赛前校选拔被刷,没能参加成16年的省赛;
第三个,就是大学都快读完了还没找到一个女朋友;
哈哈哈。那个时候,一次机缘巧合下,我和我们当初省赛落选的两个队员又凑到了一起,当时聊着聊着又聊起了比赛。一说起比赛,我知道,他们两个人都跟我一样,都感到特遗憾,上次省赛校选被刷,我们三个人都很气很气。我们气的不是学校没有选我们,而是气那时候自己不够努力。这次凑到一起,其中一个队员就提议“既然省赛没上,搞国赛去”。我也没想到,这个提议刚提出来便全票通过。我们三人心中,都很一把火,而现在,这把火烧的更加旺盛了。
说做就做,当时是五月十五,我搬到了实验室。除了平时上课和吃饭,就在实验室常住下了。可能有的学弟就会问,准备国赛什么时候开始为好,我拿“我是特种兵”里面的一句话来回答:时刻准备着。不要觉得自己基础差,就怯场,也不要觉得自己基础好,就可以比别人晚准备,少准备。老天总是会眷顾那些准备充分的人。我还记得那时候实验室老师拿我去骂另一组的一位队员:“你基础这么好,还不抓住机会好好搞,你看看XX(就是我),基础这么差,还不是每天都在写程序,每天都在调试。”当时我听到这句话特开心,当然是不能表现出来,因为被骂的是我兄弟,哈哈哈哈。
从五月十五到八月十二,吃住在实验室将近三个月。说实话,那段时间对于我来说,很累很累,身体疲劳倒是其次,最苦的是心累。刚开始,stm32只会复制几个程序,然后稍微改一改。后来去图书馆借了三本书,跟着书上从新建工程开始一步一步弄。我看的是原子的书,也有别人说野火的比较好,我觉得原子的比较通俗易懂,但是底层的东西讲的比较浅显,相对来说野火讲的深奥一些,如果想在stm32这条路上走得远一些的话,还是学野火的吧。当时我也没想那么多,因为我基础太差了,就是光脚的不怕穿鞋的,反正我啥都不会,看了原子的书跟视频后,很多东西会用了,比如定时器,ADC,但是我那只是知其然而不知其所以然。只知道那些引脚功能该怎么用,具体为什么要这么用,为什么要这么配置,我是一概不知的。只不过限于当时的情况,也只能先这么搞。当然,经过三个月的学习,后面肯定是都搞懂了。搞完国赛以后,我的一个感想就是,国赛拿奖其实很简单,只要专项练习,针对自己报名的那一个类别勤加练习,拿个省奖就真的很轻松。拿国奖的话,因为有综合测评,硬件知识也要过关。我们学校有一个队,作品做的比我们的要好,就是因为综合测评不过关,只能含恨拿一个省一,真的非常可惜。
从五月十五开始,花了半个多月的时间去熟悉stm32的一些单个的基础功能,比如按键,点灯,定时器中断等等。随后开始进入正题,开始了国赛的专项练习。当时去请教一个学长具体该怎么练习,学长丢给了我八百多兆资料,然后让我去实验室老师那里借了一辆平衡车让我学。小车拿到手后就按照资料上的步骤,把平衡车各种模式都玩了个遍,然后就开始琢磨平衡车的功能是如何实现的,因为在学之前总得知道这个车到底能干嘛。一边看资料,一边看程序,看了几天之后发现自己是盲人摸象,还是不知道原理是怎么样的。于是,我又去请教学长,学长没有直接告诉我原理,只是告诉我该怎么去学。学长说,当初他学做车的时候,直接是花了一个月的时间完完全全自己做了一架平衡车。先把小车的每一个部分都搞得明明白白,最后再组合起来。回去后,我直接就把平衡小车给拆了,把每一个部件拆开单独调试。刚开始,我就直接拿最小系统接陀螺仪,把陀螺仪的原理弄清楚,然后把陀螺仪测出来的几个轴的倾角值调出来。随后把电机驱动拆出来,单独调试pwm。就这样一个部件一个部件调试,当所有的部件都调试完了就开始组装到一起,整体调试。整体调试的时候遇到了很多困难,最大的那个自然就是pid控制算法。算法是整个小车控制系统的核心,算法没调好,其他做得再好都没用。因为车子是买的,又有源程序在那里,平衡车的pid的值直接代进去就可以用了,很快我就完成了程序的编写。随后,我的两个队友就开始工作了,我们三个商量,重新搭建模型,自己设计pcb板,重新调试程序。
我调车一直调到了国赛前两周,因为我们队就是以平衡车作为练习模板,当时在网上又有小道消息说今年国赛的题目跟平衡车有关,我们从调平衡小车直立平衡开始,到平衡小车寻迹避障,蓝牙控制等等,来来回回我们队一共做了十几辆小车。每做一部小车,我都会从头开始重新编写程序,我的队友就在优化硬件模型。记得刚开始我队友设计pcb,大概有20多厘米长,10多厘米宽,我看到板子都笑了很久,又大又丑。不过经过他们俩个的努力,一点一点优化,到最后的终极版,已经变成了双层板,板子面积变小了不说,也很美观。说实话,调试的过程真的很累,有时候在电脑面前一坐就是一天,连饭都是队友从食堂打包带过来的。程序没调好,吃饭都吃不好,晚上睡觉做梦都在调程序。因为我队友是不住实验室的,晚上他们回去了,我一个人在实验室调,有时候晚上被电机打伤了手,想找张创口贴都不知道找谁要,心里特别难受,那时候我一个朋友给我空间留了一条言,“强者的道路是孤独的”。就是靠着那句话,我一直在坚持。到了临近国赛的时候,看到桌子上堆成小山的pcb版,看到我电脑了调了1个多G的程序代码,我们三心里满满的都是成就感。
再说下国赛四天三夜,题目刚出来的时候,整个人都是懵逼的,没有头绪。一边跟队友讨论方案,一边上网查资料。因为比赛时间有限,临时买器材肯定是来不及的,只能挑实验室有的器材做。国赛第一天,跟队友讨论完方案,两个队友开始搭建硬件模型,设计pcb板,我就比较闲,上网看看资料,到处闲逛一下,看看别人的进度。当时是有一队做的特别快的,很快就搭好了模型在那里开始调试程序了。我没事就蹲在旁边看,直到下午,实验室老师过来视察,看到我还是无所事事地蹲在那里看着别人调试,把我给骂回去了,让我赶紧开始调试程序。硬件没出来先把模板写好。当时我们的方案是用摄像头来捕捉运动轨迹,然而我调了一个暑假的车,摄像头都没弄过。拿着原先别人搞飞思卡尔的小钻风摄像头,当时的情况是,打开一个陌生的IAR软件,看着店铺给的摄像头源代码,完全不知道如何操作。心里有方案,然而实现不了,特别地慌。不过我也很佩服当时机智的我,小钻风摄像头是跟K60配套的,既然K60的程序我不会写,我就直接用源程序,加一个串口发送程序,把需要的轨迹坐标通过串口发送到自己熟悉的stm32上面处理。我们写报告的时候,给我们这个方案写的是双核处理系统。其实K60一块板子就能实现所有功能,奈何没用过,不会。
国赛第一天,因为K60不熟悉,只写了两个程序。大部分时间都是在写摄像头的图像处理,然后串口发送的程序,stm32的串口接收程序倒是用多少时间,这也得益于自己平常练习的多,基本功扎实。第一天晚上睡了大概五个小时,其实晚上也没怎么睡着,比赛的压力很大,第二天听到闹铃响爬起来就开始写stm32的核心程序。stm32上接收到小球运动轨迹的坐标以后,就感觉已经成功了一半,而另一半就是pid控制算法的调试了。当时轻车熟路很快就把程序需要的几个模块写好了,后面时间全部在调试pid。四天三夜,第一天晚上睡了五个小时,第二天晚上睡了三个小时,第三天晚上没睡,再加上每天中午一个小时左右的休息时间,一共睡觉的时间也就12个小时左右。感觉当时已经入魔了,东西没做出来,根本就没有睡意。当时比赛结束,打包完作品后,强绷着的精神一下子放松,我坐在椅子上就睡着了,后来队友把我叫醒了让我去床上睡,一直睡到了晚上五点钟,如果不是肚子饿了,我估计我还能多睡几个小时。
这里再多说一句,学弟学妹们组队的时候还是要慎重一些,最好是自己关系特别好的,这样出现问题后就不会很乱,三个人可以心平气和地解决一切问题。我很感谢我的队友,因为我是队长,我负责程序,他们两个负责硬件。当硬件出现问题的时候,他们总会第一时间去帮我解决问题,我提出的一些硬件上的要求他们也会尽量达到。国赛中途有一个小插曲,第二天晚上的时候我已经能定好一个点了,也不知道是谁在我出去吃晚饭的时候动了我的东西,吃完饭回去后我调好的装置已经失控了,检查了好几个小时,从硬件到软件,一点一点查,都不知道问题出在了哪。当时我是真的真的很想放弃,后来准备出去休息一下,刚到门口的时候听到我的两个队友在外面讲话,大概意思就是不管我调的怎么样,他们都会信任我,就算没调出来,那也不会怪我,毕竟搞控制的程序是重点,要我一个把程序都弄出来的确很为难。当时我听了很感动,非常感谢有两个这么支持我的队友,当天晚上熬到了五点钟,因为检测硬件是没有问题了,我把程序一个个重新又写了一遍,不仅比之前更精确,在前面的基础上把国赛要求的基础部分都做完了。四天里,我的两个队友除了在搭建硬件的时候,至少都会有一个人陪在我身边。不会像有些队一样,我硬件搭建完了,接下来是全你写程序的事了,我先回去睡觉了。这次国赛之所以能把程序写出来,10%靠是我自己的努力,其他90%一半是老师和学长教的好。他们都是不会教我具体的东西,只告诉我要做的步骤。也就是这样,自己慢慢摸索学到的比别人教的东西会多很多。平常遇到的困难越多,比赛的时候能能少走弯路。还有一半就是队友的陪伴,俗话说,每个成功的男人背后都有一个默默支持他的女人,而我的背后,则是两个队友(我不是gay,哈哈哈)。
最后,给以后搞国赛负责程序的学弟学妹们提几点建议:
1.在写程序的时候一定要一步一步写,不要以为程序简单就把好几个模块同时一起写,万一出现了错误,很难找到出现问题的地方。每写一个程序,确认无误后,再复制一个副本,在副本上添加下一个功能模块。因为MDK只会语法报错,逻辑错误是只能自己去找的。程序一个一个写可以避免很多问题,下面是我在国赛四天三夜写的所有的程序。
2.负责程序的同学要有大局观,这个无法一蹴而就,只能在平时的练习中培养。要做到,给你一个题目,你就能想到要用什么东西来实现这个功能,脑海里要有清晰的设计方案。然后就要有层次感,写程序的时候要很清楚先写哪个模块,再写哪个模块,最后写哪个模块。就拿国赛来说,如果一开始就去写定时器pid控制模块,那肯定是没用的。上面那张图就是我国赛的设计思路,先写摄像头的图像处理程序,然后再写串口发送程序,等stm32能接收到小球的坐标后才开始pid的调试,然后再一个一个功能逐一实现。上面我偷了一点小懒,因为有的功能是差不多的,就一起写了。
3.平常练习的时候,不要一遇到不懂的就跑去问学长,问老师,要学会自己解决问题。别人教的始终是别人的,可能过两天就会忘记,自己解决的问题,印象会特别深刻,下次再遇到同样问题的时候,很快就能想起解决的办法。自学是一种特别重要的能力,不仅仅是对于比赛,自学这个能力会让你受益一生。
4.平常练习的时候,不能过急功近利。一个部分一个部分写,不能因为某个部分简单,就直接略过,很多时候细节决定成败,基本功很重要。国赛的时候会遇到很多未知的问题,平常练习到位了,国赛的时候就不会出现太大的纰漏。砍材不误磨刀工,老天总是会眷顾那些准备充分的人。
5.我们队三个人,我负责程序,两个队友负责硬件,平常都是自己做自己的事情,我写程序的时候,他们会在旁边陪我但并不会帮我写,而他们设计硬件的时候我也插不上嘴,因为我对硬件一窍不通,只能提一些必要的要求。我并不推荐学弟学妹们像我们这样弄,最好是写程序的同学也能具备一些基础的硬件知识,然后也参与到硬件模型的搭建中,因为自己搭建的平台,自己写起程序来会更加得心应手。然后负责硬件的同学最好也具备一些软件能力。如果负责程序的同学忙不过来,可以帮上一些忙。毕竟对于控制组来说,负责程序的同学任务很重。
6.第四点就是上面提到过的队友。自己一个队的,如果不是很合得来的话,很可能会发生矛盾。尽量找与自己志同道合,关系比较好的同学做队友。遇到问题时,都比较好解决。然后就是一个队,必须要有一个话语权稍微重一点的人,就是所谓的队长。控制组的话我推荐是负责程序的同学做队长,因为控制组程序是核心,负责程序的同学最好能统领全局。在比赛的关键时期,在讨论方案或者遇到问题时,队长要统一三个人的意见,保证三个人在统一战线,三人同心,其利断金。
7.最后,也是最重要的,要坚持下来,要耐得住寂寞。万事难开头,刚开始的时候会很痛苦,很多时候调程序坐在电脑面前,一坐就是一天。记得我那个时候,程序没调出来,加上私人感情上出现了一点问题,然后晚上一个人调试电机的时候又受伤了,别提多难过了,很庆幸我忍下来了。大家一定要记住,天道酬勤。只要忍过去了,后面就会慢慢习惯,坐的住,才能专注。
以上就是我给学弟学妹们的一些建议,最上面的是我自己的亲身经历,扯了很多,大家如果不喜欢可以不看,但是最后我给的几点建议,大家一定要特别注意,对大家绝对是有很大的帮助的。最后预祝各位参赛者在国赛中能拿到一个理想的名次,祝大家前程似锦,谢谢。