一個(gè)技術(shù)宅是怎么學(xué)會(huì)做機(jī)器人程序的?
點(diǎn)擊:1064
A+ A-
所屬頻道:新聞中心
單片機(jī)
今天我用我的經(jīng)歷來(lái)告訴大家一個(gè)我認(rèn)為比較有效的單片機(jī)學(xué)習(xí)方法。
上大學(xué)時(shí),因?yàn)榘V迷機(jī)器人制作,我開(kāi)始自學(xué)單片機(jī)。隨著深入了解,我開(kāi)始對(duì)單片機(jī)產(chǎn)生濃厚的興趣。室友們?cè)陂_(kāi)黑玩dota,我在搭電路敲代碼;室友們?cè)诳刺煜掳猿男≌f(shuō)《鬼吹燈》無(wú)法自拔,我在讀郭天祥的自述《我的大學(xué)六年》斗志昂揚(yáng)。就這樣,學(xué)習(xí)了一段時(shí)間C語(yǔ)言和單片機(jī),我就開(kāi)始著手制作機(jī)器人。經(jīng)過(guò)一年多時(shí)間,我制作的機(jī)器人數(shù)量不斷的增多,對(duì)單片機(jī)的理解和使用也有了很大的提升。后來(lái)我的好友也開(kāi)始學(xué)習(xí)單片機(jī),可沒(méi)多久他就跑來(lái)和我抱怨單片機(jī)太難學(xué),我就讓他去網(wǎng)上買(mǎi)了一套單片機(jī)開(kāi)發(fā)板,或許這樣學(xué)習(xí)會(huì)更容易一點(diǎn)。別說(shuō),開(kāi)發(fā)板上的資源還挺豐富,流水燈、數(shù)碼管、矩陣鍵盤(pán)、LED點(diǎn)陣、紅外遙控器、直流電機(jī)、步進(jìn)電機(jī)、LCD屏......應(yīng)有盡有,還配有視頻教程。這可比我當(dāng)初自己搭建的最小系統(tǒng)板強(qiáng)多了,這下應(yīng)該沒(méi)問(wèn)題了。
單片機(jī)開(kāi)發(fā)板
果然,沒(méi)過(guò)多久好友就告訴我:“單片機(jī)其實(shí)還是挺簡(jiǎn)單的嘛。“我給他設(shè)計(jì)了幾個(gè)小項(xiàng)目,他瞄了一眼,說(shuō)這個(gè)太簡(jiǎn)單,涉及到的知識(shí)點(diǎn)開(kāi)發(fā)板上的教程都有講過(guò),不用再做了,自己回去找點(diǎn)別的項(xiàng)目做。過(guò)了一段時(shí)間,我的機(jī)器人小組要招新人,考題是根據(jù)提供的材料現(xiàn)場(chǎng)制作一輛循跡避障智能車(chē)。我的好友也來(lái)了,看著他自信滿滿的樣子,我也就放心了??墒亲詈蟮慕Y(jié)果出乎我的意料,他什么都沒(méi)做出來(lái),他自己也很詫異,明明想法是有的,可是卻無(wú)從下手。后來(lái),又有幾個(gè)學(xué)弟在學(xué)單片機(jī)的時(shí)候也存在這種問(wèn)題。我開(kāi)始認(rèn)真的思考他們的問(wèn)題所在:
初學(xué)階段過(guò)度依賴(lài)單片機(jī)開(kāi)發(fā)板,完全跟著開(kāi)發(fā)板的教程學(xué)習(xí),缺乏主動(dòng)性。
對(duì)單片機(jī)的認(rèn)知不足,急于求成,恨不得一天就把單片機(jī)學(xué)會(huì),導(dǎo)致基礎(chǔ)不扎實(shí)。
盲目自信,跟著教程學(xué)習(xí)了板上所有資源就覺(jué)得自己已經(jīng)學(xué)會(huì)了單片機(jī),不屑于從簡(jiǎn)單的項(xiàng)目開(kāi)始做起。
遇到疑難問(wèn)題總是逃避,不積極處理,總想留在以后解決。
誤認(rèn)為單片機(jī)主要學(xué)習(xí)內(nèi)容就是寫(xiě)代碼,不重視底層硬件知識(shí)和接口電路知識(shí)。
總而言之,沒(méi)有找到正確的學(xué)習(xí)方法。
那為什么我在學(xué)習(xí)單片機(jī)過(guò)程中沒(méi)有出現(xiàn)他們的這些現(xiàn)象呢?
第一點(diǎn),我沒(méi)有使用開(kāi)發(fā)板進(jìn)行學(xué)習(xí),我不是說(shuō)開(kāi)發(fā)板不好,其實(shí)開(kāi)發(fā)板是很好的單片機(jī)學(xué)習(xí)入門(mén)工具,但僅限于入門(mén),它的延展性太差,無(wú)法引導(dǎo)大家更深入的學(xué)習(xí)。
第二點(diǎn),我學(xué)習(xí)單片機(jī)主要是為了制作機(jī)器人,而機(jī)器人制作則恰好為我深入學(xué)習(xí)單片機(jī)開(kāi)辟了一條正確的道路:當(dāng)我制作紅外循跡智能車(chē)時(shí),我認(rèn)識(shí)了紅外反射傳感器,設(shè)計(jì)了紅外傳感器接口電路和H橋電機(jī)驅(qū)動(dòng)電路,編寫(xiě)了多路紅外傳感器掃描和PWM調(diào)速代碼;當(dāng)我制作CCD循跡智能車(chē)時(shí),我認(rèn)識(shí)了圖像傳感器,設(shè)計(jì)了圖像傳感器接口電路,編寫(xiě)了圖像傳感器的驅(qū)動(dòng)程序和簡(jiǎn)單的圖像處理算法,認(rèn)識(shí)了opencv開(kāi)源庫(kù),學(xué)習(xí)了PID控制算法;當(dāng)我制作六足機(jī)器人的時(shí)候,我認(rèn)識(shí)了舵機(jī),開(kāi)發(fā)了多路舵機(jī)控制器,開(kāi)始學(xué)習(xí)Labview編寫(xiě)上位機(jī);當(dāng)我制作自平衡車(chē)的時(shí)候,我認(rèn)識(shí)了加速度傳感器和陀螺儀,了解了卡爾曼濾波,加深了對(duì)PID的認(rèn)識(shí);當(dāng)我......
在這些機(jī)器人的制作過(guò)程中,我熟練掌握了各種調(diào)試技巧,注重代碼編寫(xiě)的質(zhì)量,面向接口編程,接觸了設(shè)計(jì)模式,歸納了編程中常見(jiàn)錯(cuò)誤......就這樣,沿著機(jī)器人制作這條路去學(xué)習(xí)單片機(jī),不會(huì)因?yàn)槟骋粋€(gè)模塊代碼簡(jiǎn)單就不寫(xiě),不會(huì)因?yàn)槟骋粋€(gè)模塊電路簡(jiǎn)單就不畫(huà),更不會(huì)因?yàn)檠矍暗睦щy而放棄,因?yàn)槲业哪繕?biāo)就是完成我的機(jī)器人制作。
說(shuō)了這么多,只是想讓大家知道我的方法并不是空穴來(lái)風(fēng),而是我這么年來(lái)的經(jīng)驗(yàn)之談,即使現(xiàn)在已經(jīng)工作好幾年,我依然通過(guò)這種方式在進(jìn)步。當(dāng)然,這也只是我的一家之談,希望對(duì)你有所幫助。
再次鄭重提醒,初學(xué)單片機(jī)時(shí),再簡(jiǎn)單的代碼也要敲,不要眼高手低,bug往往藏在最簡(jiǎn)單的語(yǔ)句中,多寫(xiě)多練,歸納易錯(cuò)點(diǎn)是非常必要的??伎寄悖?/p>
if (1 == ir_num) { } //注釋?zhuān)哼@是我當(dāng)時(shí)自己歸納總結(jié)的,后來(lái)在《C++ Primer》中也看到這種寫(xiě)法。
(審核編輯: 林靜)
分享