版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p><b> 摘要2</b></p><p><b> 引 言2</b></p><p> 1 Arduino智能小車設(shè)計(jì)方案與參數(shù)3</p><p> 1.1 Arduino智能小車設(shè)計(jì)方案簡(jiǎn)介
2、3</p><p> 1.1.1 功能要求3</p><p> 1.1.2 基本原理3</p><p> 1.2 循跡小車參數(shù)4</p><p> 2 Arduino與51單片機(jī)的區(qū)別5</p><p> 2.1 Arduino單片機(jī)5</p><p> 2.1.1 Ard
3、uino單片機(jī)的介紹5</p><p> 2.1.2 Arduino單片機(jī)的特色5</p><p> 2.1.3 Arduino單片機(jī)的功能5</p><p> 2.2 51單片機(jī)6</p><p> 2.2.1 51單片機(jī)的介紹6</p><p> 2.2.2 51單片機(jī)的功能6</p&g
4、t;<p> 2.3 Arduino比51更好的地方7</p><p> 3 循跡小車設(shè)計(jì)8</p><p> 3.1 硬件設(shè)計(jì)8</p><p> 3.1.1 單片機(jī)最小系統(tǒng)8</p><p> 3.1.2 灰度傳感器模塊 9</p><p> 3.1.3 電機(jī)驅(qū)動(dòng)電路10<
5、;/p><p> 3.2 軟件設(shè)計(jì)12</p><p> 3.2.1 系統(tǒng)主程序13</p><p> 3.2.2 本系統(tǒng)編譯器13</p><p> 3.3 實(shí)物展示144</p><p> 3.4 部分程序展示145</p><p><b> 結(jié) 論20<
6、;/b></p><p><b> 致 謝21</b></p><p><b> 參考文獻(xiàn)22</b></p><p> Arduino循跡小車設(shè)計(jì)與實(shí)現(xiàn)</p><p> 摘要:循跡小車是Arduino單片機(jī)的一種典型應(yīng)用。本智能小車是由ardiuno單片機(jī)和外部電路組成,包括
7、檢測(cè)模塊,控制模塊,電源模塊。循跡車設(shè)計(jì)采用Arduino單片機(jī)作為小車的控制核心,采用灰度傳感器作為小車的檢測(cè)模塊來(lái)識(shí)別綠色路面中央的黑色引導(dǎo)線,采集信號(hào)并將信號(hào)轉(zhuǎn)換為能被ardiuno單片機(jī)識(shí)別的數(shù)字信號(hào);采用驅(qū)動(dòng)芯片L298N構(gòu)成雙H橋控制直流電機(jī)。其中軟件系統(tǒng)采用C程序。</p><p> 關(guān)鍵詞:Arduino單片機(jī),自動(dòng)循跡,驅(qū)動(dòng)電路。</p><p><b>
8、引言</b></p><p> 自第一臺(tái)工業(yè)機(jī)器人誕生以來(lái),機(jī)器人的民展已經(jīng)遍及機(jī)械、電子、冶金、交通、宇航、國(guó)防等領(lǐng)域。近年來(lái)機(jī)器人的智能水平不斷提高,并且迅速地改變著人們的生活方式。人們?cè)诓粩嗵接?、改造、認(rèn)識(shí)自然的過(guò)程中,制造能替代人工作的機(jī)器一直是人類的目標(biāo)。單片機(jī)是一種可通過(guò)編程控制的微處理器,雖其自身不能單獨(dú)用在某項(xiàng)工程或產(chǎn)品上,但當(dāng)其與外圍數(shù)字器件和模擬器件結(jié)合時(shí)便可發(fā)揮強(qiáng)大的功能,現(xiàn)在
9、單片機(jī)已廣泛應(yīng)用于眾多領(lǐng)域。例如:工業(yè)自動(dòng)化,智能儀器儀表,消費(fèi)類電子產(chǎn)品,通信方面,武器裝備等。</p><p> 作為與自動(dòng)化技術(shù)和電子密切相關(guān)的理工科學(xué)生,掌握單片機(jī)是最基礎(chǔ)的要求。為進(jìn)一步豐富和鞏固單片機(jī)知識(shí),也為能更好的聯(lián)系實(shí)際應(yīng)用,本次畢業(yè)設(shè)計(jì)選擇了基于單片機(jī)Arduino循跡車,并做出實(shí)物。鑒于電子技術(shù)、計(jì)算機(jī)技術(shù)以及各種更先進(jìn)的仿真軟件的出現(xiàn),使用高級(jí)語(yǔ)言如C代替匯編語(yǔ)言進(jìn)行編程和控制已成為現(xiàn)實(shí)
10、,單片機(jī)C語(yǔ)言編程相對(duì)于MC51匯編語(yǔ)言編程有如下優(yōu)點(diǎn):</p><p> 對(duì)單片機(jī)的指令系統(tǒng)不需要有很深的理解就可以編程操作單片機(jī)。寄存器分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)完全由編輯器自動(dòng)處理。程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),可使程序結(jié)構(gòu)化。庫(kù)中包括許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的處理能力,使用方便。具有方便的模塊化編程技術(shù),使已編好的程序便于移植,可極大縮短開發(fā)時(shí)間,增加程序的可讀性和可維護(hù)性。</
11、p><p> 事實(shí)上,當(dāng)今許多硬件的開發(fā)都已開始用C語(yǔ)言編程,如各種單片機(jī)、DSP、ARM等,用C語(yǔ)言進(jìn)行工業(yè)控制也已成為一種趨勢(shì),為了更好的適應(yīng)當(dāng)今社會(huì)形勢(shì),為了更好的面對(duì)挑戰(zhàn)、把握機(jī)遇,此次畢業(yè)設(shè)計(jì)決定嘗試用C語(yǔ)言編程完成。也希望能在進(jìn)一步熟悉單片機(jī)控制的同時(shí),對(duì)數(shù)字電子技術(shù)、模擬電子技術(shù)、計(jì)算控制技術(shù)以及常用外圍芯片有更深層次的了解,提高自己的綜合能力。</p><p> 1 Ard
12、uino智能小車設(shè)計(jì)方案與參數(shù)</p><p> 根據(jù)設(shè)計(jì)要求,Arduino智能小車要沿著山道環(huán)山跑一圈。Arduino智能小車主要由四部分組成:分別為大腦-微控制器Arduino、眼睛-灰度傳感器、軀體-電機(jī)驅(qū)動(dòng)模塊和心臟-電源模塊。</p><p> 1.1 Arduino智能小車方案簡(jiǎn)介</p><p> 依據(jù)所需功能的要求,設(shè)計(jì)計(jì)價(jià)器系統(tǒng)的結(jié)構(gòu)圖和硬
13、件電路,繪制出智能小車的電路圖,再繪制程序框圖,之后編程并燒錄到單片機(jī);將各模塊組合進(jìn)行調(diào)試。</p><p><b> 1.1.1功能要求</b></p><p> 小車以Arduino 為控制核心, 用單片機(jī)產(chǎn)生PWM波,控制小車速度。利用灰度傳感器對(duì)路面黑色軌跡進(jìn)行檢測(cè),并將路面檢測(cè)信號(hào)反饋給單片機(jī)內(nèi)。單片機(jī)對(duì)采集到的信號(hào)予以分析判斷,及時(shí)控制驅(qū)動(dòng)電機(jī)以調(diào)整
14、小車轉(zhuǎn)向,從而使小車能夠沿著黑色軌跡自動(dòng)行駛,實(shí)現(xiàn)小車自動(dòng)尋跡的目的。</p><p><b> 1.1.2基本原理</b></p><p> 智能小車系統(tǒng)主要由四部分組成:大腦-微控制器Arduino、眼睛-灰度傳感器、手腳-電機(jī)驅(qū)動(dòng)模塊、能源-電源模塊, 智能車循跡行駛過(guò)程是:首先灰度傳感器將檢測(cè)到黑線的信號(hào)傳送給單片機(jī)最小系統(tǒng),然后通過(guò)單片機(jī)最小系統(tǒng)的控制算
15、法對(duì)信號(hào)進(jìn)行計(jì)算處理,將此信號(hào)在通過(guò)控制算法驅(qū)動(dòng)電機(jī),最后實(shí)現(xiàn)對(duì)智能車運(yùn)動(dòng)軌跡進(jìn)行實(shí)時(shí)控制。</p><p> 微控制器-Arduino為內(nèi)部核心處理處理單元,將外部給予的電平信號(hào)通過(guò)以植入的c語(yǔ)言程序?yàn)橹鬟M(jìn)行處理。灰度傳感器為智能小車的眼睛,通過(guò)辨別地面的黑色線條的物理信號(hào),灰度再將之轉(zhuǎn)換為單片機(jī)能夠處理的電平信號(hào)。單片機(jī)將信號(hào)傳輸給電機(jī)驅(qū)動(dòng)模塊,即我們小車結(jié)構(gòu)的手腳接受指令運(yùn)行。智能車總體模塊設(shè)計(jì)圖如圖1-
16、1所示。</p><p> 圖1-1 循跡車總體模塊設(shè)計(jì)圖 </p><p> 1.2 循跡小車參數(shù)</p><p> 系統(tǒng)參數(shù)如下表所示:</p><p> 2 Arduino與51單片機(jī)的區(qū)別</p><p> 2.1 Arduino單片機(jī)</p><p> 2.1.1 Ard
17、uino單片機(jī)的介紹</p><p> Arduino是一款便捷靈活、方便上手的開源電子原型平臺(tái),包含硬件(各種型號(hào)的Arduino板)和軟件(Arduino IDE)。它適用于愛好者、藝術(shù)家、設(shè)計(jì)師和對(duì)于"互動(dòng)"有興趣的朋友們。是一個(gè)基于開放原始碼的軟硬件平臺(tái),構(gòu)建于開放原始碼simple I/O介面版,并且具有使用類似Java、C語(yǔ)言的Processing/Wiring開發(fā)環(huán)境。Ardu
18、ino包含兩個(gè)主要的部分:硬件部分是可以用來(lái)做電路連接的Arduino電路板;另外一個(gè)則是Arduino IDE,你的計(jì)算機(jī)中的程序開發(fā)環(huán)境。你只要在IDE中編寫程序代碼,將程序上傳到Arduino電路板后,程序便會(huì)告訴Arduino電路板要做些什么了。</p><p> 2.1.2 Arduino單片機(jī)的特色</p><p> 開放源代碼的電路圖設(shè)計(jì),程序開發(fā)接口可以免費(fèi)下載,也可依
19、個(gè)人需求自己修改。而且低價(jià)格的微處理控制器 (AVR系列控制器),可以采用USB接口供電,不需外接電源,也可以使用外部9VDC輸入。Arduino支持ISP在線燒,可以將新的"bootloader"固件燒入AVR芯片。有了bootloader之后,可以通過(guò)串口或者USB to RS232線更新固件。也可依據(jù)官方提供的Eagle格式PCB和SCH電路圖簡(jiǎn)化Arduino模組,完成獨(dú)立運(yùn)作的微處理控制;可簡(jiǎn)單地與傳感器,
20、各式各樣的電子元件連接(例如:紅外線,超音波,熱敏電阻,光敏電阻,伺服馬達(dá),…等)支持多種互動(dòng)程序,如:Flash、Max/Msp、vvvv、PD、C、Processing等。應(yīng)用方面:利用Arduino,突破以往只能使用鼠標(biāo)、鍵盤、CCD等輸入的裝置的互動(dòng)內(nèi)容,可以更簡(jiǎn)單地達(dá)成單人或多人游戲互動(dòng)。</p><p> 2.1.3 Arduino單片機(jī)的功能</p><p> 在功能上可
21、以快速使用Arduino與Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider等軟件結(jié)合,作出互動(dòng)作品。 Arduino可以使用現(xiàn)有的電子元件例如開關(guān)或者傳感器或者其他控制器件、LED、步進(jìn)馬達(dá)或其他輸出裝置。 Arduino也可以獨(dú)立運(yùn)行,并與軟件進(jìn)行交互,例如: Macromedia Flash, Processing, Max/MSP, Pure Data, VVVV
22、或其他互動(dòng)軟件等。 Arduino的IDE界面基于開放源代碼,可以免費(fèi)下載使用,開發(fā)出更多令人驚艷的互動(dòng)作品。</p><p> 在更多功能上有基于知識(shí)共享開放元源碼的電路圖設(shè)計(jì),有基于知識(shí)共享開放源碼的程式開發(fā)環(huán)境。Arduino可使用ICSP線上燒入器,將「bootloader」燒入新的IC晶片,可依據(jù)官方電路圖,簡(jiǎn)化Arduino模組,完成獨(dú)立運(yùn)作的微處理控制,可簡(jiǎn)單地與傳感器,各式各樣的電子元件連接(例
23、如:紅外線,超聲波,熱敏電阻,光敏電阻,伺服馬達(dá)等),USB接口上,不需外接電源。另外有提供9V直流電源輸入。</p><p><b> 2.2 51單片機(jī)</b></p><p> 2.2.1 51單片機(jī)的介紹 </p><p> 51單片機(jī)是對(duì)所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是Intel的8031
24、單片機(jī),后來(lái)隨著Flash rom技術(shù)的發(fā)展,8031單片機(jī)取得了長(zhǎng)足的進(jìn)展,成為應(yīng)用最廣泛的8位單片機(jī)之一,其代表型號(hào)是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測(cè)控系統(tǒng)之中。很多公司都有51系列的兼容機(jī)型推出,今后很長(zhǎng)的一段時(shí)間內(nèi)將占有大量市場(chǎng)。51單片機(jī)是基礎(chǔ)入門的一個(gè)單片機(jī),還是應(yīng)用最廣泛的一種。需要注意的是52系列的單片機(jī)一般不具備自編程能力。</p><p> 2.2.2 51單片機(jī)的功能<
25、;/p><p> 51單片機(jī)的功能特點(diǎn)分別有:8位CPU·4kbytes程序存儲(chǔ)器(ROM) (52為8K),128bytes的數(shù)據(jù)存儲(chǔ)器(RAM) (52有256bytes的RAM),32條I/O口線·111條指令,大部分為單字節(jié)指令,21個(gè)專用寄存器,2個(gè)可編程定時(shí)/計(jì)數(shù)器·5個(gè)中斷源,2個(gè)優(yōu)先級(jí)(52有6個(gè)),一個(gè)全雙工串行通信口,外部數(shù)據(jù)存儲(chǔ)器尋址空間為64kB,外部程序存儲(chǔ)器
26、尋址空間為64kB,邏輯操作位尋址功能·雙列直插40PinDIP封裝。</p><p> 51單片機(jī)的內(nèi)部結(jié)構(gòu)分別為CPU:由運(yùn)算和控制邏輯組成,同時(shí)還包括中斷系統(tǒng)和部分外部特殊功能寄存器;RAM:用以存放可以讀寫的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);ROM:用以存放程序、一些原始數(shù)據(jù)和表格;I/O口:四個(gè)8位并行I/O口,既可用作輸入,也可用作輸出;T/C:兩個(gè)定時(shí)/記數(shù)器,既可以工作
27、在定時(shí)模式,也可以工作在記數(shù)模式;五個(gè)中斷源的中斷控制系統(tǒng); 一個(gè)全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實(shí)現(xiàn)單片機(jī)之間或單片機(jī)與微機(jī)之間的串行通信;片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最佳振蕩頻率為6M-12M。</p><p> 2.3 Arduino比51更好的地方</p><p> Arduino與51單片機(jī)相比:變更人性化,編程相對(duì)人性化和直
28、觀,沒(méi)有單片機(jī)基礎(chǔ)的人也能很快上手。硬件性能上,Arduino更加穩(wěn)定,不會(huì)像51一樣時(shí)常出現(xiàn)跑飛的現(xiàn)象。Arduino作為開源的一款的單片機(jī),更重要的是在這個(gè)4g時(shí)代可搜尋的學(xué)習(xí)資料是非常多的。綜上所述,Arduino無(wú)疑是比51更適合新手和用于比賽專用的。</p><p><b> 3 循跡小車設(shè)計(jì)</b></p><p><b> 3.1 硬件設(shè)計(jì)
29、</b></p><p> 3.1.1單片機(jī)最小系統(tǒng)</p><p> 主控機(jī)系統(tǒng)采用Arduino mega2560單片機(jī),采用USB接口的核心電路板,它最大的特點(diǎn)就是具有多達(dá)54路數(shù)字輸入輸出,特別適合需要大量IO接口的設(shè)計(jì)。Mega2560的處理器核心是ATmega2560, 同時(shí)具有54路數(shù)字輸入/輸出口(其中16路可作為PWM輸出),16路模擬輸入,4路UART接
30、口,一個(gè)16MHz晶體振蕩器,一個(gè)USB口,一個(gè)電源 插座,一個(gè)ICSP header和一個(gè)復(fù)位按鈕。單片機(jī)最小系統(tǒng)電路圖如圖3-1所示。</p><p> 圖3-1 單片機(jī)最小系統(tǒng)</p><p> Arduino mega2560的主要參數(shù):</p><p> 處理器 ATmega2560,工作電壓 5V,輸入電壓(推薦) 7-12V,輸入電壓(范圍)
31、6-20V,數(shù)字IO腳 54 (其中16路作為PWM輸出),模擬輸入腳 16,IO腳直流電流 40 mA,3.3V腳直流電流 50 mA,F(xiàn)lash Memory 256 K,(ATmega328,其中8 KB 用于 bootloader),SRAM 8 KB,EEPROM 4 KB,工作時(shí)鐘 16 MHz。</p><p><b> 存儲(chǔ)器:</b></p><p&g
32、t; ATmega2560包括了片上256KB Flash,其中8KB用于Bootloader。同時(shí)還有8KB SRAM和4KB EEPROM。</p><p><b> 輸入輸出:</b></p><p> 一共有數(shù)字輸入輸出口,4路串口信號(hào),6路外部中斷,14路脈沖寬度調(diào)制PWM(0--13),SPI(53(SS),51(MOSI),50(MISO),52(
33、SCK)):SPI通信接口,16路模擬輸入,特別LED(13號(hào)):Arduino專門用于測(cè)試LED的保留接口,和TWI接口(專門支持通信)。</p><p> 3.1.2 灰度傳感器模塊</p><p> 灰度傳感器是利用黑線對(duì)紅外線不同的反射能力通過(guò)光敏二極管或光敏三極管,接收反射回的不同光強(qiáng)信號(hào),把不同光強(qiáng)轉(zhuǎn)換為電流信號(hào),最后通過(guò)電阻,轉(zhuǎn)換為單片機(jī)可識(shí)別的高低電平?;叶葌鞲衅鲗?shí)現(xiàn)循
34、跡的基本電路如3-2所示。</p><p> 圖3-2 灰度傳感器電路圖</p><p> (1)灰度傳感器工作原理</p><p> 傳感器的紅外發(fā)射二極管不斷發(fā)射紅外線,當(dāng)發(fā)射出的紅外線沒(méi)有被反射回來(lái)或被反射回來(lái)但強(qiáng)度不夠大時(shí),光敏三極管一直處于關(guān)斷狀態(tài),此時(shí)模塊的輸出端為低電平,指示二極管一直處于熄滅狀態(tài);而當(dāng)紅外線被反射回來(lái)且強(qiáng)度足夠大,光敏三極管飽
35、和,此時(shí)模塊的輸出端為高電平,指示二極管被點(diǎn)亮。</p><p> 小車行駛過(guò)程中向地面發(fā)射紅外光,當(dāng)紅外光遇到綠色路線,地板發(fā)生漫反射,安裝在小型車的反射光接收器會(huì)接收;如果是遇到黑色路線,紅外光將被黑線吸收,安裝在小車上的接收管沒(méi)有收到紅外光。控制器會(huì)根據(jù)是否收到反射的紅外光為判斷依據(jù)來(lái)確定的黑線的位置和小車的路線。這種探測(cè)方法,即利用紅外線在不同顏色的表面特征,具有不同的反射性能。</p>
36、<p> 紅外發(fā)射和接收紅外線感應(yīng)器,可以直接使用集成的紅外探頭,選擇寬度為3-5厘米的黑線。該傳感器的靈敏度是可調(diào)的,傳感器有時(shí)遇到黑線卻不能送出相應(yīng)的信號(hào),通過(guò)調(diào)節(jié)傳感器上的可調(diào)電阻,適當(dāng)?shù)脑龃蠡驕p小可改變靈敏度。</p><p><b> (2)傳感器分布</b></p><p> 傳感器通過(guò)信號(hào)采集,向單片機(jī)提供信息。因此傳感器合理的布局很重要
37、,傳感器布局需要考慮小車行駛過(guò)程中信息檢測(cè)的準(zhǔn)確度和前瞻性,能使在相同數(shù)量的傳感器下,獲得更多的數(shù)據(jù)。</p><p> 而由于考慮到我們改造車的車座較窄、不平整,且車身較請(qǐng),適合放多的傳感器,最終決定選用對(duì)6個(gè)傳感器來(lái)進(jìn)行布局,即在車子底座前端放6個(gè)傳感器。這種布局是目前最適合我們改造車的布局方法。</p><p> 3.1.3 電機(jī)驅(qū)動(dòng)電路</p><p>
38、 本設(shè)計(jì)采用L298N電機(jī)專用驅(qū)動(dòng)芯片帶動(dòng)兩個(gè)5V的直流電動(dòng)機(jī)。</p><p> L298N是一個(gè)內(nèi)部有兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)芯片,可以用來(lái)驅(qū)動(dòng)直流電動(dòng)機(jī)、步進(jìn)電動(dòng)機(jī)。使用標(biāo)準(zhǔn)邏輯電平信號(hào)控制,直接連接單片機(jī)管腳,具有兩個(gè)使能控制端,使能端在不受輸入信號(hào)影響的情況下不允許器件工作。L298N有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作。</p><p> L29
39、8N引腳結(jié)構(gòu)如表3-1</p><p> 圖3-3 L298N 驅(qū)動(dòng)芯片</p><p> 表3-1 L298N引腳編號(hào)與功能:</p><p> ?。?) 電機(jī)驅(qū)動(dòng)原理</p><p> 電路的形狀很像字母H。四個(gè)三極管就是H橋的四條垂直線,而電機(jī)就是H中的橫線,如圖3-4所示。</p><p> 圖3-
40、4 L298N內(nèi)部H橋驅(qū)動(dòng)電路</p><p> H橋電機(jī)驅(qū)動(dòng)電路包含四個(gè)三極管和一個(gè)電機(jī)。電機(jī)運(yùn)轉(zhuǎn),必須遵循導(dǎo)通對(duì)角線上的一對(duì)三極管?;诓煌龢O管對(duì)的導(dǎo)通情況可以控制電機(jī)的轉(zhuǎn)向,電流可可以從左至右流過(guò)電機(jī),也可以從右至左流過(guò)電機(jī)。當(dāng)Q1管和Q4管導(dǎo)通時(shí),電流就從電源正極經(jīng)Q1從左至右流過(guò)電機(jī),然后再經(jīng)Q4回到電源負(fù)極,該流向的電流將驅(qū)動(dòng)電機(jī)順時(shí)針轉(zhuǎn)動(dòng)。下面分析另一對(duì)三極管Q2和Q3,當(dāng)兩個(gè)三極管同時(shí)導(dǎo)通的
41、情況下,電流將從右至左流過(guò)電機(jī)。從而驅(qū)動(dòng)電機(jī)沿逆時(shí)針?lè)较蜣D(zhuǎn)動(dòng)。</p><p> 電機(jī)控制邏輯如下:以電機(jī)A為例,當(dāng)使能端ENA為高電平時(shí),如果輸入引腳IN1為低電平而輸入引腳IN2為高電平,電機(jī)A反轉(zhuǎn);如果輸入引腳IN1為高電平而輸入引腳IN2為低電平,電機(jī)A正轉(zhuǎn)。</p><p> 圖3-5 L298N驅(qū)動(dòng)芯片和直流電機(jī)接線圖</p><p><b&
42、gt; 3.2 軟件設(shè)計(jì)</b></p><p> 本設(shè)計(jì)的目的是以Arduino單片機(jī)為控制核心,將紅外光電傳感器輸出的電信號(hào)送至單片機(jī)電路,再由單片機(jī)向L298N電機(jī)驅(qū)動(dòng)模塊發(fā)送指令,控制后輪電機(jī)驅(qū)動(dòng)小車行進(jìn),控制前輪電機(jī)驅(qū)動(dòng)小車轉(zhuǎn)向,從而自動(dòng)循跡。</p><p> 3.2.1 系統(tǒng)主程序</p><p> 在主程序模塊中,需要完成對(duì)各參量
43、和接口的初始化、檢測(cè)黑線、前進(jìn)或轉(zhuǎn)向判斷等工作。當(dāng)小車探測(cè)到黑線后,根據(jù)檢測(cè)到黑線的傳感器的編號(hào)不同,小車要做出相應(yīng)的動(dòng)作。當(dāng)小車左邊的傳感器檢測(cè)到黑線時(shí),說(shuō)明小車車頭向右邊偏移,這時(shí)主控芯片控制前輪電機(jī)反轉(zhuǎn),車體向左邊修正;同理當(dāng)小車的右邊傳感器檢測(cè)到黑線時(shí),主控芯片控制前輪電機(jī)正轉(zhuǎn),車體向右邊修正;當(dāng)黑線在車體的中間,中間的傳感器一直檢測(cè)到黑線,這樣小車就會(huì)沿著黑線自動(dòng)循跡。主程序流程如圖3-6所示。</p><
44、p> 圖3-6 循跡車程序流程圖</p><p> 3.2.2 本系統(tǒng)編譯器</p><p> 本設(shè)計(jì)采用C語(yǔ)言來(lái)編譯程序。模塊化結(jié)構(gòu)程序的設(shè)計(jì),可以使系統(tǒng)軟件便于調(diào)試與優(yōu)化,也使其他人更好地理解和閱讀系統(tǒng)的程序設(shè)計(jì)。因此,軟件的設(shè)計(jì)上,運(yùn)用了模塊化程序的結(jié)構(gòu)對(duì)軟件進(jìn)行設(shè)計(jì),使得程序變得更加直觀易懂。</p><p> 隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,
45、從普遍使用匯編語(yǔ)言到逐漸使用高級(jí)語(yǔ)言開發(fā),單片機(jī)的開發(fā)軟件也在不斷發(fā)展,ARDUINO IDE軟件是目前Arduino專用開發(fā)的軟件,界面清晰整潔,編程簡(jiǎn)便。.</p><p> ARDUINO IDE開發(fā)系統(tǒng)可用于編輯C。由編譯器編譯可以生成目標(biāo)文件(.ino)。</p><p> 3.2.3 實(shí)物展示</p><p> 圖3-7 小車全景圖</p&
46、gt;<p> 3.4 部分程序展示</p><p> unsigned int p_1=22; </p><p> unsigned int p_2=24;</p><p> unsigned int p_3=26;</p><p> unsigned int p_4=28;</p><p
47、> unsigned int p_5=30;</p><p> unsigned int p_6=32;</p><p> #define l 1 </p><p> #define r 2 </p><p> #define rl 3</p><p> unsigned int
48、 num,co,c=0,mum,d=0;</p><p><b> int t;</b></p><p> void setup()</p><p><b> {</b></p><p> pinMode(2,OUTPUT);//lift back </p><p&g
49、t; pinMode(3,OUTPUT);//lift go</p><p> pinMode(4,OUTPUT);//right back</p><p> pinMode(5,OUTPUT);//right go</p><p> for(t=22;t<=52;t++)</p><p><b> {</b&
50、gt;</p><p> pinMode(t, INPUT);</p><p><b> }</b></p><p><b> }</b></p><p> void stop (unsigned char m)</p><p><b> {</b
51、></p><p><b> switch(m)</b></p><p><b> {</b></p><p> case r : analogWrite(5,0); analogWrite(4,0);</p><p> case l : analogWrite(3
52、,0); analogWrite(2,0);</p><p> case rl : analogWrite(5,0); analogWrite(4,0); analogWrite(3,0); analogWrite(2,0);</p><p> default : break;</p><p><b> }</b><
53、/p><p><b> }</b></p><p> void FOLL_FINE(unsigned int ti)</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {&
54、lt;/b></p><p><b> num=0;</b></p><p> p_1=digitalRead(22); </p><p> p_2=digitalRead(24);</p><p> p_3=digitalRead(26);</p><p> p_4=digita
55、lRead(28);</p><p> p_5=digitalRead(30);</p><p> p_6=digitalRead(32);</p><p> if(p_1) num++; </p><p> if(p_2) num++;</p><p> if(p_3) num++; </p>
56、<p> if(p_4) num++; </p><p> if(p_5) num++; </p><p> if(p_6) num++; </p><p> if(num>3) </p><p><b> {</b></p><p> //f
57、or(co=0;co<200;co++);</p><p><b> num=0;</b></p><p> p_1=digitalRead(22); </p><p> p_2=digitalRead(24);</p><p> p_3=digitalRead(26);</p><p&
58、gt; p_4=digitalRead(28);</p><p> p_5=digitalRead(30);</p><p> p_6=digitalRead(32);</p><p> if(p_1) num++; </p><p> if(p_2) num++;</p><p> if(p_3) num
59、++; </p><p> if(p_4) num++; </p><p> if(p_5) num++; </p><p> if(p_6) num++; </p><p><b> if(num>3)</b></p><p><b> {</b>
60、</p><p><b> c=c+1;</b></p><p><b> }</b></p><p><b> if(c==ti)</b></p><p><b> {</b></p><p> analogWrite(
61、2,0);</p><p> analogWrite(4,0);</p><p> analogWrite(3,40);</p><p> analogWrite(5,40);</p><p> delay(350);</p><p><b> return;</b></p>
62、<p><b> }</b></p><p><b> }</b></p><p><b> if(p_3)</b></p><p><b> {</b></p><p> analogWrite(2,0);</p>
63、<p> analogWrite(4,0);</p><p> analogWrite(3,90);</p><p> analogWrite(5,90);</p><p><b> }</b></p><p> else if(p_4)</p><p><b>
64、{</b></p><p> analogWrite(2,0);</p><p> analogWrite(4,0);</p><p> analogWrite(3,90);</p><p> analogWrite(5,90);</p><p><b> }</b><
65、/p><p> else if(p_2)</p><p><b> {</b></p><p> analogWrite(2,30);</p><p> analogWrite(4,0);</p><p> analogWrite(3,0);</p><p> an
66、alogWrite(5,40);</p><p><b> }</b></p><p> else if(p_5)</p><p><b> {</b></p><p> analogWrite(2,0);</p><p> analogWrite(4,30);&l
67、t;/p><p> analogWrite(3,40);</p><p> analogWrite(5,0);</p><p><b> }</b></p><p> else if(p_1)</p><p><b> {</b></p><p>
68、; analogWrite(2,40);</p><p> analogWrite(4,0);</p><p> analogWrite(3,0);</p><p> analogWrite(5,50);</p><p><b> }</b></p><p> else if(p_6)
69、</p><p><b> {</b></p><p> analogWrite(2,0);</p><p> analogWrite(4,40);</p><p> analogWrite(3,50);</p><p> analogWrite(5,0);</p><
70、;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void TURN_90(unsigned char e)</p><p><b> { </b></p&g
71、t;<p><b> stop(rl);</b></p><p> delay (500);</p><p> if(e==r) </p><p><b> { </b></p><p> delay (10);</p><p> an
72、alogWrite(2,0);</p><p> analogWrite(4,70);</p><p> analogWrite(3,60);</p><p> analogWrite(5,0);</p><p> delay (450); </p><p><b> do</b>&l
73、t;/p><p><b> {</b></p><p> p_1=digitalRead(22); </p><p> p_2=digitalRead(24);</p><p> p_3=digitalRead(26);</p><p> p_4=digitalRead(28);</
74、p><p> p_5=digitalRead(30);</p><p> p_6=digitalRead(32);</p><p> if(p_4||p_3) </p><p><b> {</b></p><p> delay (3); </p><p>
75、p_1=digitalRead(22); </p><p> p_2=digitalRead(24);</p><p> p_3=digitalRead(26);</p><p> p_4=digitalRead(28);</p><p> p_5=digitalRead(30);</p><p> p_6
76、=digitalRead(32);</p><p><b> } </b></p><p> } while(!(p_4||p_3));</p><p><b> }</b></p><p> else if(e==l) </p><p>&
77、lt;b> {</b></p><p> delay (10);</p><p> analogWrite(2,70);</p><p> analogWrite(4,0);</p><p> analogWrite(3,0);</p><p> analogWrite(5,60);<
78、;/p><p> delay (450); </p><p><b> do</b></p><p><b> {</b></p><p> p_1=digitalRead(22); //讀取12位灰度</p><p> p_2=digitalRead(24);&l
79、t;/p><p> p_3=digitalRead(26);</p><p> p_4=digitalRead(28);</p><p> p_5=digitalRead(30);</p><p> p_6=digitalRead(32);</p><p> if(p_3||p_4) </p>
80、<p><b> {</b></p><p> delay (3); </p><p> p_1=digitalRead(22); </p><p> p_2=digitalRead(24);</p><p> p_3=digitalRead(26);</p><p>
81、p_4=digitalRead(28);</p><p> p_5=digitalRead(30);</p><p> p_6=digitalRead(32); </p><p><b> } </b></p><p> } while(!(p_3||p_4));</p><p><
82、b> }</b></p><p><b> stop(rl);</b></p><p> delay (100); </p><p><b> }</b></p><p> void loop()</p><p><b> {<
83、;/b></p><p><b> while(1)</b></p><p><b> { </b></p><p> FOLL_FINE(1);</p><p><b> 結(jié) 論</b></p><p> 經(jīng)過(guò)努力《Arduin
84、o循跡小車設(shè)計(jì)與實(shí)現(xiàn)》實(shí)務(wù)專題的畢業(yè)設(shè)計(jì)終于接近尾聲。較好地實(shí)現(xiàn)了小車自動(dòng)循跡行駛功能。但是仍舊有許多不足的地方,循跡車部分由于是遙控車改造所以無(wú)法進(jìn)行大幅度的拐彎,循跡行駛的靈敏度不高,循跡部分的這兩個(gè)問(wèn)題造成拍攝視頻時(shí)難度加大。</p><p> 以為學(xué)的知識(shí)已經(jīng)很完善,但是通過(guò)這次對(duì)《Arduino智能小車》實(shí)務(wù)專題的畢業(yè)設(shè)計(jì),讓我認(rèn)識(shí)到自己所學(xué)的東西不過(guò)是冰山一角,認(rèn)識(shí)到理論和實(shí)踐相合的重要性。之后,我
85、會(huì)更加勤奮地去學(xué)習(xí)。如果說(shuō)完成畢業(yè)設(shè)計(jì)是我們這幾個(gè)月艱苦奮斗的“硬件”成果,那么能夠激起我對(duì)知識(shí)的不斷渴求則是這幾月不懈努力的“軟件”成果。 </p><p> 通過(guò)這“最后一次的大學(xué)作業(yè)”,我深刻理解了理論和實(shí)踐相結(jié)合的重要性,理論與實(shí)踐相結(jié)合不僅可以鞏固我們所學(xué)的的知識(shí),還加深與鞏固了原有的知識(shí),更重要的是還拓寬了我們的知識(shí)面,學(xué)到了更多更深的東西,與此同時(shí),自己的動(dòng)手能力也大大的提高。在說(shuō)明文的
86、編寫過(guò)程中,查閱了不少的相關(guān)資料,使我Arduino單片機(jī)、L298N驅(qū)動(dòng)芯片、灰度傳感器、光電傳感器等電子元器件有了更進(jìn)一步的了解和掌握,同時(shí)也襯托出自己專業(yè)知識(shí)學(xué)得還不扎實(shí)。特別是在電路制作過(guò)程中,由于缺少實(shí)際經(jīng)驗(yàn),對(duì)單片機(jī)的很多功能還不能熟練的掌握。所以在今后的工作和學(xué)習(xí)過(guò)程中,應(yīng)加強(qiáng)專業(yè)知識(shí)的學(xué)習(xí),不段以理論和實(shí)踐相結(jié)合,鍛煉出具有突出的專業(yè)技能,不段完善自己,拓寬知識(shí)面,最終成為復(fù)合型人才,適應(yīng)社會(huì)的挑戰(zhàn),實(shí)現(xiàn)人生的自我價(jià)值。
87、 </p><p><b> 致 謝</b></p><p> 在此次設(shè)計(jì)中,童曉薇老師作為我的指導(dǎo)老師,至始至終都給予我了不少幫助,從下任務(wù)書開始,就幫我制定規(guī)劃,提醒我應(yīng)注意的問(wèn)題;借給我資料,幫我聯(lián)系硬件;和我一起調(diào)程序,并提出了很多的修改意見以及完善方案;此外還認(rèn)真批閱了我的論文,指出其中很多瑕疵和不清晰的地方;更重要的是在我遇到困難時(shí)對(duì)我的鼓勵(lì),讓我不
88、懈怠、不退縮、也讓我更有信心;可以說(shuō)我的每一點(diǎn)進(jìn)展都與童老師的付出是分不開的。</p><p> 當(dāng)然在此,我還要向身邊關(guān)心我的老師、同學(xué)致以誠(chéng)摯的謝意!最后感謝母校對(duì)我這幾年的辛勤培養(yǎng)。還有其他老師和同學(xué),都幫了我不少忙,在此不再一一陳述。謹(jǐn)祝老師們工作順利,萬(wàn)事如意,桃李滿天下;同學(xué)們學(xué)業(yè)有成,前程似錦!</p><p><b> 參考文獻(xiàn)</b></p
89、><p> [1]基于Arduino的趣味電子制作 Simon Monk、張寶玲、吳蘭臻、 鄭海昕 科學(xué)出版社 (2011-07出版)</p><p> [2] (英)Simon Monk,ARDUINO 編程從零開始, 科學(xué)出版社</p><p> [3] 單成祥,牛彥文,傳感器設(shè)計(jì)基礎(chǔ),北京: 國(guó)防工業(yè)出版社,2007</p><
90、;p> [4] 竇振中,單片機(jī)外圍部件實(shí)用手冊(cè)輸出通道器件分冊(cè),北京:北京航空航天大學(xué)出版社,2003.</p><p> [5] 楊素行,模擬電子技術(shù)基礎(chǔ)簡(jiǎn)明教程(第三版),北京:高等教育出版社,2005</p><p> [6] 閻石,數(shù)字電子技術(shù)(第五版),北京:高等教育出版社,2006</p><p> [7] 孫余凱,傳感器應(yīng)用電路3
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動(dòng)循跡小車-畢業(yè)論文
- 蔽障循跡智能小車畢業(yè)論文
- 智能循跡小車設(shè)計(jì)【畢業(yè)論文】
- 循跡小車的設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文---智能循跡避障小車
- 智能循跡避障小車畢業(yè)論文
- 電氣自動(dòng)化循跡小車畢業(yè)論文
- 循跡小車畢業(yè)設(shè)計(jì)論文
- 循跡小車畢業(yè)設(shè)計(jì)--循跡小車設(shè)計(jì)
- 畢業(yè)論文--利用接近開關(guān)實(shí)現(xiàn)小車的循跡問(wèn)題
- 畢業(yè)論文-開題報(bào)告-文獻(xiàn)綜述智能循跡小車設(shè)計(jì)
- 智能循跡小車-職業(yè)學(xué)院畢業(yè)論文開題報(bào)告
- 畢業(yè)論文-開題報(bào)告-文獻(xiàn)綜述智能循跡小車設(shè)計(jì)
- 智能循跡小車論文
- 基于單片機(jī)的智能循跡小車設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的循跡小車的設(shè)計(jì)【畢業(yè)論文】
- 基于arduino單片機(jī)避障小車機(jī)器人畢業(yè)論文
- 智能循跡澆水小車論文
- 基于arduino單片機(jī)避障小車機(jī)器人畢業(yè)論文
- 教案:基于arduino單片機(jī)避障小車機(jī)器人畢業(yè)論文
評(píng)論
0/150
提交評(píng)論