
本文作者:謝斌
--寫在前面--
?之前有推過一篇文章:是我的一個拿全國一等獎的學弟,有興趣的可以點進去看看:全國一等獎的獲得者,如今去當了人民教師
?而今天這位全國一等獎的獲得者呢,就是我另外一個學弟,是我手把手帶出來的,非常勵志,完完全全的一個小白,推薦各位閱讀全文。
--正文--
先自我介紹一下吧,本人就讀湖南一所普通二本,國賽的時候選擔任我們小隊隊長,負責程序部分,拿了2017年全國大學生電子設計競賽控制組的國家一等獎。在搞國賽前,整個大學我有三個坎沒能過去,一想起就覺得特別遺憾。
第一個,學生會競選部長時落選;
第二個,就是省賽前校選拔被刷,沒能參加成16年的省賽;
第三個,就是大學都快讀完了還沒找到一個女朋友;
哈哈哈。那個時候,一次機緣巧合下,我和我們當初省賽落選的兩個隊員又湊到了一起,當時聊著聊著又聊起了比賽。一說起比賽,我知道,他們兩個人都跟我一樣,都感到特遺憾,上次省賽校選被刷,我們?nèi)齻€人都很氣很氣。我們氣的不是學校沒有選我們,而是氣那時候自己不夠努力。這次湊到一起,其中一個隊員就提議“既然省賽沒上,搞國賽去”。我也沒想到,這個提議剛提出來便全票通過。我們?nèi)诵闹?,都很一把火,而現(xiàn)在,這把火燒的更加旺盛了。
說做就做,當時是五月十五,我搬到了實驗室。除了平時上課和吃飯,就在實驗室常住下了??赡苡械膶W弟就會問,準備國賽什么時候開始為好,我拿“我是特種兵”里面的一句話來回答:時刻準備著。不要覺得自己基礎差,就怯場,也不要覺得自己基礎好,就可以比別人晚準備,少準備。老天總是會眷顧那些準備充分的人。我還記得那時候?qū)嶒炇依蠋熌梦胰チR另一組的一位隊員:“你基礎這么好,還不抓住機會好好搞,你看看XX(就是我),基礎這么差,還不是每天都在寫程序,每天都在調(diào)試?!碑敃r我聽到這句話特開心,當然是不能表現(xiàn)出來,因為被罵的是我兄弟,哈哈哈哈。
從五月十五到八月十二,吃住在實驗室將近三個月。說實話,那段時間對于我來說,很累很累,身體疲勞倒是其次,最苦的是心累。剛開始,stm32只會復制幾個程序,然后稍微改一改。后來去圖書館借了三本書,跟著書上從新建工程開始一步一步弄。我看的是原子的書,也有別人說野火的比較好,我覺得原子的比較通俗易懂,但是底層的東西講的比較淺顯,相對來說野火講的深奧一些,如果想在stm32這條路上走得遠一些的話,還是學野火的吧。當時我也沒想那么多,因為我基礎太差了,就是光腳的不怕穿鞋的,反正我啥都不會,看了原子的書跟視頻后,很多東西會用了,比如定時器,ADC,但是我那只是知其然而不知其所以然。只知道那些引腳功能該怎么用,具體為什么要這么用,為什么要這么配置,我是一概不知的。只不過限于當時的情況,也只能先這么搞。當然,經(jīng)過三個月的學習,后面肯定是都搞懂了。搞完國賽以后,我的一個感想就是,國賽拿獎其實很簡單,只要專項練習,針對自己報名的那一個類別勤加練習,拿個省獎就真的很輕松。拿國獎的話,因為有綜合測評,硬件知識也要過關。我們學校有一個隊,作品做的比我們的要好,就是因為綜合測評不過關,只能含恨拿一個省一,真的非??上?。
從五月十五開始,花了半個多月的時間去熟悉stm32的一些單個的基礎功能,比如按鍵,點燈,定時器中斷等等。隨后開始進入正題,開始了國賽的專項練習。當時去請教一個學長具體該怎么練習,學長丟給了我八百多兆資料,然后讓我去實驗室老師那里借了一輛平衡車讓我學。小車拿到手后就按照資料上的步驟,把平衡車各種模式都玩了個遍,然后就開始琢磨平衡車的功能是如何實現(xiàn)的,因為在學之前總得知道這個車到底能干嘛。一邊看資料,一邊看程序,看了幾天之后發(fā)現(xiàn)自己是盲人摸象,還是不知道原理是怎么樣的。于是,我又去請教學長,學長沒有直接告訴我原理,只是告訴我該怎么去學。學長說,當初他學做車的時候,直接是花了一個月的時間完完全全自己做了一架平衡車。先把小車的每一個部分都搞得明明白白,最后再組合起來。回去后,我直接就把平衡小車給拆了,把每一個部件拆開單獨調(diào)試。剛開始,我就直接拿最小系統(tǒng)接陀螺儀,把陀螺儀的原理弄清楚,然后把陀螺儀測出來的幾個軸的傾角值調(diào)出來。隨后把電機驅(qū)動拆出來,單獨調(diào)試pwm。就這樣一個部件一個部件調(diào)試,當所有的部件都調(diào)試完了就開始組裝到一起,整體調(diào)試。整體調(diào)試的時候遇到了很多困難,最大的那個自然就是pid控制算法。算法是整個小車控制系統(tǒng)的核心,算法沒調(diào)好,其他做得再好都沒用。因為車子是買的,又有源程序在那里,平衡車的pid的值直接代進去就可以用了,很快我就完成了程序的編寫。隨后,我的兩個隊友就開始工作了,我們?nèi)齻€商量,重新搭建模型,自己設計pcb板,重新調(diào)試程序。
我調(diào)車一直調(diào)到了國賽前兩周,因為我們隊就是以平衡車作為練習模板,當時在網(wǎng)上又有小道消息說今年國賽的題目跟平衡車有關,我們從調(diào)平衡小車直立平衡開始,到平衡小車尋跡避障,藍牙控制等等,來來回回我們隊一共做了十幾輛小車。每做一部小車,我都會從頭開始重新編寫程序,我的隊友就在優(yōu)化硬件模型。記得剛開始我隊友設計pcb,大概有20多厘米長,10多厘米寬,我看到板子都笑了很久,又大又丑。不過經(jīng)過他們倆個的努力,一點一點優(yōu)化,到最后的終極版,已經(jīng)變成了雙層板,板子面積變小了不說,也很美觀。說實話,調(diào)試的過程真的很累,有時候在電腦面前一坐就是一天,連飯都是隊友從食堂打包帶過來的。程序沒調(diào)好,吃飯都吃不好,晚上睡覺做夢都在調(diào)程序。因為我隊友是不住實驗室的,晚上他們回去了,我一個人在實驗室調(diào),有時候晚上被電機打傷了手,想找張創(chuàng)口貼都不知道找誰要,心里特別難受,那時候我一個朋友給我空間留了一條言,“強者的道路是孤獨的”。就是靠著那句話,我一直在堅持。到了臨近國賽的時候,看到桌子上堆成小山的pcb版,看到我電腦了調(diào)了1個多G的程序代碼,我們?nèi)睦餄M滿的都是成就感。
再說下國賽四天三夜,題目剛出來的時候,整個人都是懵逼的,沒有頭緒。一邊跟隊友討論方案,一邊上網(wǎng)查資料。因為比賽時間有限,臨時買器材肯定是來不及的,只能挑實驗室有的器材做。國賽第一天,跟隊友討論完方案,兩個隊友開始搭建硬件模型,設計pcb板,我就比較閑,上網(wǎng)看看資料,到處閑逛一下,看看別人的進度。當時是有一隊做的特別快的,很快就搭好了模型在那里開始調(diào)試程序了。我沒事就蹲在旁邊看,直到下午,實驗室老師過來視察,看到我還是無所事事地蹲在那里看著別人調(diào)試,把我給罵回去了,讓我趕緊開始調(diào)試程序。硬件沒出來先把模板寫好。當時我們的方案是用攝像頭來捕捉運動軌跡,然而我調(diào)了一個暑假的車,攝像頭都沒弄過。拿著原先別人搞飛思卡爾的小鉆風攝像頭,當時的情況是,打開一個陌生的IAR軟件,看著店鋪給的攝像頭源代碼,完全不知道如何操作。心里有方案,然而實現(xiàn)不了,特別地慌。不過我也很佩服當時機智的我,小鉆風攝像頭是跟K60配套的,既然K60的程序我不會寫,我就直接用源程序,加一個串口發(fā)送程序,把需要的軌跡坐標通過串口發(fā)送到自己熟悉的stm32上面處理。我們寫報告的時候,給我們這個方案寫的是雙核處理系統(tǒng)。其實K60一塊板子就能實現(xiàn)所有功能,奈何沒用過,不會。
國賽第一天,因為K60不熟悉,只寫了兩個程序。大部分時間都是在寫攝像頭的圖像處理,然后串口發(fā)送的程序,stm32的串口接收程序倒是用多少時間,這也得益于自己平常練習的多,基本功扎實。第一天晚上睡了大概五個小時,其實晚上也沒怎么睡著,比賽的壓力很大,第二天聽到鬧鈴響爬起來就開始寫stm32的核心程序。stm32上接收到小球運動軌跡的坐標以后,就感覺已經(jīng)成功了一半,而另一半就是pid控制算法的調(diào)試了。當時輕車熟路很快就把程序需要的幾個模塊寫好了,后面時間全部在調(diào)試pid。四天三夜,第一天晚上睡了五個小時,第二天晚上睡了三個小時,第三天晚上沒睡,再加上每天中午一個小時左右的休息時間,一共睡覺的時間也就12個小時左右。感覺當時已經(jīng)入魔了,東西沒做出來,根本就沒有睡意。當時比賽結(jié)束,打包完作品后,強繃著的精神一下子放松,我坐在椅子上就睡著了,后來隊友把我叫醒了讓我去床上睡,一直睡到了晚上五點鐘,如果不是肚子餓了,我估計我還能多睡幾個小時。
這里再多說一句,學弟學妹們組隊的時候還是要慎重一些,最好是自己關系特別好的,這樣出現(xiàn)問題后就不會很亂,三個人可以心平氣和地解決一切問題。我很感謝我的隊友,因為我是隊長,我負責程序,他們兩個負責硬件。當硬件出現(xiàn)問題的時候,他們總會第一時間去幫我解決問題,我提出的一些硬件上的要求他們也會盡量達到。國賽中途有一個小插曲,第二天晚上的時候我已經(jīng)能定好一個點了,也不知道是誰在我出去吃晚飯的時候動了我的東西,吃完飯回去后我調(diào)好的裝置已經(jīng)失控了,檢查了好幾個小時,從硬件到軟件,一點一點查,都不知道問題出在了哪。當時我是真的真的很想放棄,后來準備出去休息一下,剛到門口的時候聽到我的兩個隊友在外面講話,大概意思就是不管我調(diào)的怎么樣,他們都會信任我,就算沒調(diào)出來,那也不會怪我,畢竟搞控制的程序是重點,要我一個把程序都弄出來的確很為難。當時我聽了很感動,非常感謝有兩個這么支持我的隊友,當天晚上熬到了五點鐘,因為檢測硬件是沒有問題了,我把程序一個個重新又寫了一遍,不僅比之前更精確,在前面的基礎上把國賽要求的基礎部分都做完了。四天里,我的兩個隊友除了在搭建硬件的時候,至少都會有一個人陪在我身邊。不會像有些隊一樣,我硬件搭建完了,接下來是全你寫程序的事了,我先回去睡覺了。這次國賽之所以能把程序?qū)懗鰜恚?0%靠是我自己的努力,其他90%一半是老師和學長教的好。他們都是不會教我具體的東西,只告訴我要做的步驟。也就是這樣,自己慢慢摸索學到的比別人教的東西會多很多。平常遇到的困難越多,比賽的時候能能少走彎路。還有一半就是隊友的陪伴,俗話說,每個成功的男人背后都有一個默默支持他的女人,而我的背后,則是兩個隊友(我不是gay,哈哈哈)。
最后,給以后搞國賽負責程序的學弟學妹們提幾點建議:
1.在寫程序的時候一定要一步一步寫,不要以為程序簡單就把好幾個模塊同時一起寫,萬一出現(xiàn)了錯誤,很難找到出現(xiàn)問題的地方。每寫一個程序,確認無誤后,再復制一個副本,在副本上添加下一個功能模塊。因為MDK只會語法報錯,邏輯錯誤是只能自己去找的。程序一個一個寫可以避免很多問題,下面是我在國賽四天三夜寫的所有的程序。
?2.負責程序的同學要有大局觀,這個無法一蹴而就,只能在平時的練習中培養(yǎng)。要做到,給你一個題目,你就能想到要用什么東西來實現(xiàn)這個功能,腦海里要有清晰的設計方案。然后就要有層次感,寫程序的時候要很清楚先寫哪個模塊,再寫哪個模塊,最后寫哪個模塊。就拿國賽來說,如果一開始就去寫定時器pid控制模塊,那肯定是沒用的。上面那張圖就是我國賽的設計思路,先寫攝像頭的圖像處理程序,然后再寫串口發(fā)送程序,等stm32能接收到小球的坐標后才開始pid的調(diào)試,然后再一個一個功能逐一實現(xiàn)。上面我偷了一點小懶,因為有的功能是差不多的,就一起寫了。
3.平常練習的時候,不要一遇到不懂的就跑去問學長,問老師,要學會自己解決問題。別人教的始終是別人的,可能過兩天就會忘記,自己解決的問題,印象會特別深刻,下次再遇到同樣問題的時候,很快就能想起解決的辦法。自學是一種特別重要的能力,不僅僅是對于比賽,自學這個能力會讓你受益一生。
4.平常練習的時候,不能過急功近利。一個部分一個部分寫,不能因為某個部分簡單,就直接略過,很多時候細節(jié)決定成敗,基本功很重要。國賽的時候會遇到很多未知的問題,平常練習到位了,國賽的時候就不會出現(xiàn)太大的紕漏。砍材不誤磨刀工,老天總是會眷顧那些準備充分的人。
5.我們隊三個人,我負責程序,兩個隊友負責硬件,平常都是自己做自己的事情,我寫程序的時候,他們會在旁邊陪我但并不會幫我寫,而他們設計硬件的時候我也插不上嘴,因為我對硬件一竅不通,只能提一些必要的要求。我并不推薦學弟學妹們像我們這樣弄,最好是寫程序的同學也能具備一些基礎的硬件知識,然后也參與到硬件模型的搭建中,因為自己搭建的平臺,自己寫起程序來會更加得心應手。然后負責硬件的同學最好也具備一些軟件能力。如果負責程序的同學忙不過來,可以幫上一些忙。畢竟對于控制組來說,負責程序的同學任務很重。
6.第四點就是上面提到過的隊友。自己一個隊的,如果不是很合得來的話,很可能會發(fā)生矛盾。盡量找與自己志同道合,關系比較好的同學做隊友。遇到問題時,都比較好解決。然后就是一個隊,必須要有一個話語權(quán)稍微重一點的人,就是所謂的隊長??刂平M的話我推薦是負責程序的同學做隊長,因為控制組程序是核心,負責程序的同學最好能統(tǒng)領全局。在比賽的關鍵時期,在討論方案或者遇到問題時,隊長要統(tǒng)一三個人的意見,保證三個人在統(tǒng)一戰(zhàn)線,三人同心,其利斷金。
7.最后,也是最重要的,要堅持下來,要耐得住寂寞。萬事難開頭,剛開始的時候會很痛苦,很多時候調(diào)程序坐在電腦面前,一坐就是一天。記得我那個時候,程序沒調(diào)出來,加上私人感情上出現(xiàn)了一點問題,然后晚上一個人調(diào)試電機的時候又受傷了,別提多難過了,很慶幸我忍下來了。大家一定要記住,天道酬勤。只要忍過去了,后面就會慢慢習慣,坐的住,才能專注。
以上就是我給學弟學妹們的一些建議,最上面的是我自己的親身經(jīng)歷,扯了很多,大家如果不喜歡可以不看,但是最后我給的幾點建議,大家一定要特別注意,對大家絕對是有很大的幫助的。最后預祝各位參賽者在國賽中能拿到一個理想的名次,祝大家前程似錦,謝謝。