本帖最后由 zzh啊 于 2019-1-28 17:13 編輯
跟著老師一起做機(jī)電導(dǎo)論項(xiàng)目,其實(shí)就是制作一個(gè)循跡小車。
說在前面:
可能有很多像很多我這樣的新手搜到我這樣的第一時(shí)間會(huì)馬上去找代碼,希望直接下載到小車?yán)锿瓿扇蝿?wù)就完事了。但是這樣是不好的,對自己的成長并沒有好處,我的小車的引腳連的是什么,我的小車的結(jié)構(gòu),我的小車的狀況和你的是不一樣的。還是建議這樣的像我一樣的新手系統(tǒng)的去學(xué)習(xí)各種基礎(chǔ)知識(shí),至少至少要能看懂代碼。
小車信息如下:
1.電源這次課設(shè)用的小車電源是7.4V、300mAh,對單片機(jī)這個(gè)電壓有點(diǎn)太高,對輪子有點(diǎn)太低,因此我認(rèn)為小車上應(yīng)該有穩(wěn)壓和升壓的部分,確保小車能夠正常工作。 2.電機(jī)驅(qū)動(dòng)我本人曾經(jīng)接觸電機(jī)驅(qū)動(dòng),知道要使電機(jī)轉(zhuǎn)動(dòng)需要外加驅(qū)動(dòng)實(shí)現(xiàn)。 驅(qū)動(dòng)板同時(shí)驅(qū)動(dòng)兩個(gè)直流電機(jī),通過對六個(gè)口的控制就可以分別實(shí)現(xiàn)對電機(jī)正反轉(zhuǎn),加減速的控制,完成向前向后右轉(zhuǎn),左轉(zhuǎn)等各種組合運(yùn)動(dòng),每個(gè)電機(jī)用三個(gè)口控制,使能端和PWM輸入端控制電機(jī)的轉(zhuǎn)動(dòng)與停止,也能用于控制調(diào)速。也就是說,對于這個(gè)輸入端輸入一定頻率的脈沖,電機(jī)一段時(shí)間內(nèi)轉(zhuǎn)動(dòng)一段時(shí)間內(nèi)停止轉(zhuǎn)動(dòng),但是由于直流電機(jī)的慣性特征,它不會(huì)立即停下來,只要頻率比某個(gè)值就不會(huì)感覺到電機(jī)的停止現(xiàn)象,而是一種很連續(xù)的運(yùn)動(dòng),只改變一個(gè)周期內(nèi)高低壓的時(shí)間比例,就可以改變電機(jī)的速度。另外兩個(gè)輸入端是為了控制方向。 3.小車的整體設(shè)計(jì)小車為五路雙驅(qū)小車,最前方是萬向輪,五路傳感器對稱分布,且不位于同一直線上。左右兩個(gè)電機(jī)和輪胎對稱分布,大小相同,便于程序的撰寫和修改。 小車的轉(zhuǎn)向依賴于左右輪查速,左輪快右輪慢則右轉(zhuǎn),在轉(zhuǎn)急彎時(shí)甚至可以讓一個(gè)輪子倒轉(zhuǎn)實(shí)現(xiàn)更好的轉(zhuǎn)彎效果
其實(shí)一個(gè)月前我也是個(gè)渣渣,那時(shí)候也特別想了解arduino小車,學(xué)校早就發(fā)了,也找了很多資料,沒有系統(tǒng)學(xué)習(xí),沒有人領(lǐng)進(jìn)門,雖然看起來很用功,但是實(shí)際上去做循跡一點(diǎn)也做不來,程序也不會(huì)寫,這次跟著老師學(xué),雖然還是個(gè)小渣渣,但是已經(jīng)算是進(jìn)門了,可以組裝小車,可以自主寫一些程序,現(xiàn)在在試著做避障小車
簡單循跡策略 首先是紅外對管 原理就不講了,紅外對管用來探測黑線白線,黑線白線傳遞的信號是不一樣的,我們根據(jù)五個(gè)探測器不同的狀態(tài)判斷小車和線,
啊偶,原來可以繼續(xù)編輯,我接上面的寫吧, 把五個(gè)傳感器分為12345號,我們可以通過判斷12345號反饋的信號(即像圖中這種狀況就是1號傳感器感應(yīng)到黑線,這種情況就是偏左太多了),根據(jù)反饋的情況合理控制小車的速度和轉(zhuǎn)彎速度。
把程序讀懂
下面是
定義各個(gè)引腳叫什么,其實(shí)引腳不定義也可以,但是寫程序時(shí)去記住每一個(gè)數(shù)字而不是代號要困難得多。所以要盡可能去給每個(gè)引腳起一個(gè)好的名字,方便管理和后編寫程序,
#define right1 5 #define speedPinRight 6 //一個(gè)輪子轉(zhuǎn)動(dòng)有三個(gè)因素:PWM調(diào)速,使能端1,使能端2,這里就是在定義輪子的三個(gè)因素
#define right2 7 // #define left1 8 // #define speedPinLeft 9 //
void setup()
{
pinMode(right1,OUTPUT);
pinMode(right2,OUTPUT);
pinMode(speedPinRight,OUTPUT);
pinMode(left1,OUTPUT);
pinMode(left2,OUTPUT);
pinMode(speedPinLeft,OUTPUT); - <div>void setup() {</div><div> 這里放一下arduino的結(jié)構(gòu),這一部分可以理解為初始化,放一些定義的東西</div><div>
- </div><div>}</div><div>
- </div><div>void loop() {</div><div> // put your main code here, to run repeatedly:</div><div>
- </div><div>}</div>
復(fù)制代碼
|