Arduino智能小車(chē)實(shí)驗(yàn)報(bào)告_第1頁(yè)
Arduino智能小車(chē)實(shí)驗(yàn)報(bào)告_第2頁(yè)
Arduino智能小車(chē)實(shí)驗(yàn)報(bào)告_第3頁(yè)
Arduino智能小車(chē)實(shí)驗(yàn)報(bào)告_第4頁(yè)
Arduino智能小車(chē)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、“藍(lán)牙手柄避障小車(chē)”設(shè)計(jì)設(shè)計(jì)者:嚴(yán)梓桓(34%),湯楷宸(33%),梁德棋(33%)1. 項(xiàng)目背景本作品為基于Arduino控制的智能小車(chē)。智能小車(chē)在技術(shù)上和移動(dòng)機(jī)器人有著密切相關(guān)的聯(lián)系,有著關(guān)于自動(dòng)控制、傳感器技術(shù)、電子電路上的重要實(shí)踐意義。通過(guò)對(duì)基本功能進(jìn)行不同方向,多種多樣的擴(kuò)展,可以為我們的生活提供各種各樣的便利。這類(lèi)設(shè)備可以應(yīng)用于復(fù)雜多樣的工作環(huán)境,在民用和軍用上都可以有各種各樣頗有意義的用途。一般來(lái)說(shuō),紅外避障實(shí)現(xiàn)方便、技術(shù)要求相對(duì)簡(jiǎn)單、易于做到實(shí)時(shí)控制。并且,一般的紅外避障裝置在測(cè)量精度方面能達(dá)到實(shí)用的要求,因此成為常用的避障方法。利用紅外傳感器來(lái)實(shí)現(xiàn)小車(chē)的智能避障時(shí),通過(guò)測(cè)量小

2、車(chē)與障礙物的距離,實(shí)現(xiàn)小車(chē)多角度檢測(cè)障礙物,從而加以判斷轉(zhuǎn)向、后退和前進(jìn),使小車(chē)能成功的躲避障礙物,并按照控制者的意愿前進(jìn) 。受到現(xiàn)有的產(chǎn)品和技術(shù)的啟發(fā),我們小組制作簡(jiǎn)易的智能小車(chē)。這款簡(jiǎn)易的智能小車(chē),可以通過(guò)操作人的遙控進(jìn)行操控,進(jìn)行各種運(yùn)動(dòng),當(dāng)遇到障礙物時(shí),可以靈活地進(jìn)行自動(dòng)避障。而小車(chē)的舵機(jī)轉(zhuǎn)向,更加的貼合我們的現(xiàn)實(shí)汽車(chē)的模型,對(duì)實(shí)現(xiàn)智能無(wú)人汽車(chē)的出現(xiàn)有一定的借鑒優(yōu)勢(shì)。我們還計(jì)劃為它加裝通過(guò)Wi-Fi連接的攝像頭模塊,將拍到的圖像數(shù)據(jù)傳輸?shù)诫娔X上。除此之外,我們還希望將來(lái)可以通過(guò)手機(jī)App來(lái)對(duì)小車(chē)進(jìn)行操控,讓小車(chē)使用更為方便,功能更加強(qiáng)大。2. 創(chuàng)意描述這款簡(jiǎn)易的智能小車(chē),可以通過(guò)操作手

3、柄進(jìn)行遙控操控,進(jìn)行各種前進(jìn)、后退、轉(zhuǎn)彎、變速等運(yùn)動(dòng)。切換模式后,當(dāng)遇到障礙物時(shí),它可以通過(guò)紅外避障模塊,探測(cè)到障礙物,靈活地進(jìn)行自動(dòng)避障。創(chuàng)新點(diǎn):使用手柄操作,操縱方便,具有很大的娛樂(lè)性。3. 功能及總體設(shè)計(jì)該作品主要可以分為兩個(gè)部分:小車(chē)的運(yùn)動(dòng)、轉(zhuǎn)向部分和紅外避障部分。對(duì)于運(yùn)動(dòng)和轉(zhuǎn)向部分,經(jīng)由Arduino UNO板,再用PM-R3多功能擴(kuò)展板連接電機(jī)和舵機(jī),實(shí)現(xiàn)小車(chē)運(yùn)動(dòng)。操作時(shí),通過(guò)藍(lán)牙和遙控手柄連接主板,達(dá)到操縱的目的;紅外避障部分,分布在小車(chē)各側(cè)的多個(gè)紅外小板通過(guò)紅外傳感器模塊感應(yīng)到障礙物,進(jìn)而控制舵機(jī)的轉(zhuǎn)動(dòng),避開(kāi)障礙物。1) 功能介紹這款簡(jiǎn)易的智能小車(chē),通過(guò)操作手柄進(jìn)行遙控操控,進(jìn)

4、行各種前進(jìn)、后退、轉(zhuǎn)彎、變速等運(yùn)動(dòng)。切換模式后,當(dāng)遇到障礙物時(shí),它可以通過(guò)紅外避障模塊,探測(cè)到障礙物,靈活地進(jìn)行自動(dòng)避障。2) 總體設(shè)計(jì)該小車(chē)主要由運(yùn)動(dòng)和轉(zhuǎn)向部分和紅外避障部分兩個(gè)部分組成。(1)整體框架圖項(xiàng)目整體框架圖如圖1所示。圖1 整體框架圖PM-R3多功能擴(kuò)展板連接到Arduino UNO板上,通過(guò)PM-R3多功能擴(kuò)展板連接并驅(qū)動(dòng)步進(jìn)電機(jī)和轉(zhuǎn)向舵機(jī);另外,PM-R3多功能擴(kuò)展板連接了紅外避障模塊,四個(gè)紅外避障小板接收到的障礙物的信號(hào)通過(guò)它處理,控制電機(jī)的工作和舵機(jī)的轉(zhuǎn)向。(2)系統(tǒng)流程圖 系統(tǒng)流程圖(遙控模式略)如圖2所示。圖2 系統(tǒng)流程圖避障模式下,在小車(chē)運(yùn)動(dòng)過(guò)程中,如果遇到障礙物,

5、被紅外小板探測(cè)到后,讓舵機(jī)轉(zhuǎn)動(dòng),從而達(dá)到轉(zhuǎn)向的目的;如果前方各個(gè)方向都有障礙物,小車(chē)則后退。(3)總電路圖 系統(tǒng)總電路圖如圖3所示圖三 系統(tǒng)總電路圖 Arduino UNO板上連接了有PM-R3多功能擴(kuò)展板。驅(qū)動(dòng)步進(jìn)電機(jī)和轉(zhuǎn)向舵機(jī)也通過(guò)PM-R3多功能擴(kuò)展板連接;另外,PM-R3多功能擴(kuò)展板連接到紅外避障模塊,四個(gè)紅外避障小板接收到的障礙物的信號(hào)通過(guò)它傳回?cái)U(kuò)展板,控制電機(jī)的工作和舵機(jī)的轉(zhuǎn)向。3) 模塊介紹本項(xiàng)目主要包括以下幾個(gè)模塊:運(yùn)動(dòng)與轉(zhuǎn)向模塊、紅外避障模塊,下面分別給出各部分的功能、元件、電路圖和相關(guān)代碼。(1)運(yùn)動(dòng)與轉(zhuǎn)向模塊功能介紹:小車(chē)通過(guò)操作手柄進(jìn)行遙控操控,進(jìn)行各種前進(jìn)、后退、轉(zhuǎn)彎

6、、變速等運(yùn)動(dòng)元器件清單:S3003舵機(jī),17mm聯(lián)軸器 D-3mm,0.5模50齒齒輪,0.5模34齒齒輪,傳動(dòng)連桿,后輪連桿,電機(jī)固定支架,25mm金屬減速電機(jī),開(kāi)關(guān),PM-R3多功能擴(kuò)展板,PS2手,11.1V-2400mAH鋰電池組,杜邦線。電路圖:電機(jī)模塊接線圖如圖4所示;電機(jī)模塊電路原理圖如圖5所示;PM-R3擴(kuò)展電路板電路示意圖如圖6所示。圖4 電機(jī)模塊接線圖圖5 電機(jī)模塊電路示意圖圖6 PM-R3擴(kuò)展電路板電路示意圖相關(guān)代碼:#include /舵機(jī)庫(kù)文件#include /藍(lán)牙PS2X手柄庫(kù)文件PS2X ps2x; /聲明手柄ps2xServo myservo; /聲明舵機(jī)my

7、servo/ps2引腳#define PS2_DAT A0 /14 #define PS2_CMD A1 /15#define PS2_SEL A2 /16#define PS2_CLK A3 /17/紅外傳感器引腳#define Q 7 /7#define QR 8 /8#define QL 10 /10#define H 9 /9/電機(jī)驅(qū)動(dòng)引腳定義#define PWMB1 5 #define PWMB2 6 #define SERVOPIN 2 /舵機(jī)驅(qū)動(dòng)引腳定義#define SERVOMIN -20 /舵機(jī)轉(zhuǎn)動(dòng)角度#define SERVOMID 45 /舵機(jī)轉(zhuǎn)動(dòng)角度#define

8、SERVOMAX 120 /舵機(jī)轉(zhuǎn)動(dòng)角度#define TURNLEFT myservo.write(SERVOMIN) /向左轉(zhuǎn)#define TURNMID myservo.write(SERVOMID) /向中轉(zhuǎn)#define TURNRIGHT myservo.write(SERVOMAX) /向右轉(zhuǎn)#define MOTORFOWARD1 setMotorA(155) /遙控向前移動(dòng)#define MOTORFOWARD2 setMotorA(55) /避障向前移動(dòng)#define MOTORBACK1 setMotorA(-155) /遙控向后移動(dòng)#define MOTORBACK2

9、 setMotorA(-55) /避障向后移動(dòng)#define MOTORSTOP setMotorA(0) /剎車(chē)bool EnableRockerR = 1; /右邊搖桿操控控制變量bool EnableRockerL = 1; /左邊搖桿操控控制變量int RMid = 0 ; /小車(chē)向中轉(zhuǎn)控制變量int LStop = 0 ; /剎車(chē)控制變量int error = 0; /控制信號(hào)判斷變量byte type = 0; /信號(hào)種類(lèi)判斷void setup() Serial.begin(57600); /設(shè)置串口波57600 /電機(jī)驅(qū)動(dòng) pinMode(PWMB1, OUTPUT); /配置

10、引腳,PWM1為輸出 pinMode(PWMB2, OUTPUT); /配置引腳,PWM2為輸出 /避障信號(hào)收集 pinMode(Q ,INPUT); /Q對(duì)應(yīng)前面中間的紅外傳感器 pinMode(QR,INPUT); /QR對(duì)應(yīng)前面右邊的紅外傳感器 pinMode(QL,INPUT); /QL對(duì)應(yīng)前面左邊的紅外傳感器 pinMode(H,INPUT); /H對(duì)應(yīng)后邊的紅外傳感器 /舵機(jī)庫(kù)函數(shù)中的引腳鏈接函數(shù) myservo.attach(SERVOPIN); /初始狀態(tài) MOTORSTOP; SERVOMID; delay(300); /判斷ps手柄的控制信號(hào)是否接收 error = ps2

11、x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT); if (error = 0) Serial.print(Found Controller, configured successful ); Serial.println(Try out all the buttons, X will vibrate the controller, faster as you press harder;); Serial.println(holding L1 or R1 will print out the analog stick values.);

12、Serial.println(Note: Go to for updates and to report bugs.); else if (error = 1) Serial.println(No controller found, check wiring, see readme.txt to enable debug. visit for troubleshooting tips); else if (error = 2) Serial.println(Controller found but not acce

13、pting commands. see readme.txt to enable debug. Visit for troubleshooting tips); else if (error = 3) Serial.println(Controller refusing to enter Pressures mode, may not support it. ); type = ps2x.readType(); /判斷ps2信號(hào)類(lèi),我們所用的是DualShock Controller信號(hào) switch (type) case 0: Serial.prin

14、t(Unknown Controller type found ); break; case 1: Serial.print(DualShock Controller found ); break; case 2: Serial.print(GuitarHero Controller found ); break; case 3: Serial.print(Wireless Sony DualShock Controller found ); break; void(* resetFunc) (void) = 0; /重置void loop() int i = 0; /避障與藍(lán)牙遙控切換變量

15、/紅外傳感器數(shù)字信號(hào)讀取 int Q0=digitalRead(Q); int Q1=digitalRead(QR); int Q2=digitalRead(QL); int H0=digitalRead(H); /信號(hào)判斷 if (error = 1) resetFunc(); /沒(méi)有控制信號(hào)則跳出循環(huán) ps2x.read_gamepad(); /讀取控制信號(hào) if (ps2x.Button(PSB_START) Serial.println(Start is being held); /按下start按鈕時(shí)串口監(jiān)視器顯示Start is being held if (ps2x.NewBut

16、tonState(PSB_SELECT) /避障和藍(lán)牙遙控切換 Serial.println(Select is being held); i = (i + 1)% 2; /藍(lán)牙遙控 if(i = 0) /按鈕控制電機(jī) if (ps2x.ButtonPressed(PSB_PAD_UP) /前進(jìn) Serial.println(PAD_UP just pressed); MOTORFOWARD1; EnableRockerL = 0; else if(ps2x.ButtonReleased(PSB_PAD_UP) /剎車(chē) Serial.println( PAD_UP just released)

17、; MOTORSTOP; EnableRockerL = 1; LStop = 0; if (ps2x.ButtonPressed(PSB_PAD_DOWN) /后退 Serial.println(PAD_DOWN just pressed); MOTORBACK1; EnableRockerL = 0; else if(ps2x.ButtonReleased(PSB_PAD_DOWN) /剎車(chē) Serial.println( PAD_DOWN just released); MOTORSTOP; EnableRockerL = 1; LStop = 0; /搖桿控制電機(jī) if (Enable

18、RockerL) if (0 = ps2x.Analog(PSS_LY) & ps2x.Analog(PSS_LY) = ps2x.Analog(PSS_LY)&ps2x.Analog(PSS_LY)170) /后退 MOTORBACK1; Serial.println( b); LStop = 0; else if(LStop = 0) /剎車(chē) MOTORSTOP; Serial.println( s); LStop +; /按鈕控制舵機(jī) if (ps2x.ButtonPressed(PSB_CIRCLE) /右轉(zhuǎn) Serial.println(Circle just pressed); T

19、URNRIGHT; EnableRockerR = 0; else if (ps2x.ButtonReleased(PSB_CIRCLE) /轉(zhuǎn)回中間 Serial.println(Circle just released); TURNMID; EnableRockerR = 1; RMid = 0; if (ps2x.ButtonPressed(PSB_SQUARE) /左轉(zhuǎn) Serial.println(Square just pressed); TURNLEFT; EnableRockerR = 0; else if (ps2x.ButtonReleased(PSB_SQUARE) /轉(zhuǎn)

20、回中間 Serial.println(Square just released); TURNMID; EnableRockerR = 1; RMid = 0; /搖桿控制舵機(jī) if (EnableRockerR) if (0 = ps2x.Analog(PSS_RX)&ps2x.Analog(PSS_RX) =ps2x.Analog(PSS_RX)&ps2x.Analog(PSS_RX) 160) /右轉(zhuǎn) TURNRIGHT; Serial.println( r); RMid = 0; else if(RMid = 0) /轉(zhuǎn)回中間 TURNMID; Serial.println(mid);

21、RMid +; (2)紅外避障模塊功能介紹:八路紅外避障模塊是智能小車(chē)紅外線探測(cè)系統(tǒng)的工具。它使用紅外線發(fā)射和接收管等分立元器件組成探頭,并使用LM339 電壓比較器獲得輸出信號(hào)。電源從模塊VCC,GND 輸入,VCC,SIG1,GND 對(duì)應(yīng)接到紅外小板上,對(duì)應(yīng)的通道LED 顯示燈滅(常態(tài)下無(wú)遮擋輸出高電平),若通電后LED 常亮,則對(duì)應(yīng)調(diào)節(jié)電位器一順時(shí)針旋轉(zhuǎn),使感應(yīng)距離變小,逆時(shí)針旋轉(zhuǎn)使感應(yīng)距離變大。此時(shí)用手或者白紙遮擋紅外小板,則對(duì)應(yīng)通道顯示燈會(huì)亮,表示輸出一個(gè)低電平信號(hào)。單片機(jī)只要對(duì)OUT1-OUT4 的電平信號(hào)進(jìn)行判斷。常態(tài)下無(wú)遮擋為高電平,有遮擋時(shí)輸出為低電平。元器件清單:8路紅外主

22、板,避障小板,杜邦線。電路圖:紅外避障模塊電路原理圖如圖7所示。圖7 紅外避障模塊電路原理圖相關(guān)代碼:紅外避障部分,代碼如下 if(Q0=HIGH) /輸出高電平,正前方無(wú)障礙物 if(Q1=HIGH&Q2=HIGH) /輸出高電平,前方左右無(wú)障礙物,前進(jìn) TURNMID; MOTORFOWARD2; else if(Q1=LOW&Q2=HIGH) /右前方輸出低電平,左前方輸出高電平,右前方有障物,向左轉(zhuǎn) MOTORFOWARD2; TURNLEFT; else if(Q1=HIGH&Q2=LOW) /左前方輸出低電平,右前方輸出高電平,左前方有障礙物,向右轉(zhuǎn) MOTORFOWARD2; T

23、URNRIGHT; else /前方左右均有障礙物,后退 TURNMID; MOTORBACK; else /輸出低電平,正前方有障礙物 if(Q1=HIGH&Q2=HIGH) /前方左右輸出高電平,無(wú)障礙物,默認(rèn)后退至左后方 MOTORBACK2; TURNLEFT; delay(100); MOTORBACK2; TURNRIGHT; delay(100); else if(Q1=LOW&Q2=HIGH) /右前方輸出低電平,左前方輸出高電平,右前方有障物,后退至左后方 MOTORBACK2; TURNLEFT; delay(100); MOTORBACK2; TURNRIGHT; del

24、ay(100); else if(Q1=HIGH&Q2=LOW) /左前方輸出低電平,右前方輸出高電平,左前方有障礙物,后退至右后方 MOTORBACK2; TURNRIGHT; delay(100); MOTORBACK2; TURNLEFT; delay(100); else /前方左右均輸出低電平,前方左右有障礙物 if(H0=HIGH) /后方輸出高電平,無(wú)障礙物,向后退 TURNMID; MOTORBACK2; else if(H0=LOW) /后方輸出低電平,有障礙物,剎車(chē) MOTORSTOP; if (ps2x.NewButtonState(PSB_CROSS) /強(qiáng)制剎車(chē) Se

25、rial.println(X just changed); MOTORSTOP; delay(50);void setMotorA(int m1Speed) /電機(jī)驅(qū)動(dòng)函數(shù) if (m1Speed = 0) digitalWrite(PWMB2, HIGH); analogWrite(PWMB1, 255 - m1Speed); else digitalWrite(PWMB1, HIGH); analogWrite(PWMB2, m1Speed + 255); 4. 產(chǎn)品展示整體外觀圖如圖9所示。圖8 整體外觀圖圖9 最終演示結(jié)果圖5. 故障及問(wèn)題分析(1)問(wèn)題:組裝小車(chē)很順利,但是燒入Arduino代碼之后,舵機(jī)的角度不對(duì),原計(jì)劃是在Arduino代碼里直接修改舵機(jī)角度,但是緊接著發(fā)現(xiàn),修改完后小車(chē)的舵機(jī)有時(shí)候會(huì)卡死。解決方案:經(jīng)過(guò)多次嘗試,我們決定拆下舵機(jī)查看,查了許多資料,最終得知是未進(jìn)行安裝前舵機(jī)的調(diào)節(jié)。之后,我們對(duì)舵機(jī)進(jìn)行了多次調(diào)整,終于是舵

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論