基于STM32的智能循迹避障小车
【1】研究背景
隨著計(jì)算機(jī),微電子技術(shù)的快速發(fā)展,智能化技術(shù)的開(kāi)發(fā)越來(lái)越快,智能程度也越來(lái)越高,應(yīng)用的范圍也得到了極大的擴(kuò)展。因此,基于嵌入式技術(shù)的智能小車(chē)應(yīng)運(yùn)而生。
近來(lái)兩年,智能小車(chē)在生活中有著廣泛的應(yīng)用,如自動(dòng)駕駛技術(shù)、引導(dǎo)機(jī)器人、自動(dòng)化生產(chǎn)線上的物料陪送機(jī)器人等。循跡小車(chē)也是智能小車(chē)的一種,歸屬于機(jī)器人的范疇。目前,自動(dòng)駕駛和智能小車(chē)的應(yīng)用也越來(lái)越廣泛。
基于STM32F103主控板搭建智能小車(chē)的控制系統(tǒng),并采用模塊化的設(shè)計(jì)思想編寫(xiě)控制系統(tǒng)程序,為能夠在復(fù)雜地形下進(jìn)行巡檢作業(yè)的輪式小車(chē)研究提供理論依據(jù)。
【2】實(shí)訓(xùn)環(huán)境
(一) 實(shí)訓(xùn)環(huán)境
Java環(huán)境、STM32CubeMX、Keil5、st-link v2驅(qū)動(dòng)安裝、Pl2303驅(qū)動(dòng)安裝
(二) 環(huán)境介紹
(1)Java 環(huán)境:
STM32CubeMX環(huán)境需要Java支持,所以第一步必須要安裝Java
雙擊Java安裝包:~/stm32環(huán)境必備/jdk-7u60-windows-x64.exe
注意: 安裝過(guò)程中,直接選擇下一步,請(qǐng)不要更改文件安裝路徑
檢測(cè)java是否安裝成功:打開(kāi)cmd(左下角搜索cmd或者windows+r運(yùn)行內(nèi)輸入cmd),輸入java –version,顯示如下信息,則說(shuō)明安裝成功,如果安裝不成功,查看下頁(yè)app,進(jìn)行設(shè)置。
(2) STM32CubeMX
1.雙擊打開(kāi)文件:~/stm32環(huán)境必備/ SetupSTM32CubeMX-4.9.0.exe
2.直接選擇下一步即可(注意:不要修改安裝路徑,安裝路徑不能有中文)
3.安裝成功后,桌面上會(huì)有圖標(biāo)
4.如果圖標(biāo)上面不顯示圖案,點(diǎn)擊圖標(biāo),右鍵—屬性—更改圖標(biāo),雙擊圖標(biāo),確定即可
5.導(dǎo)入芯片包
5.1.雙擊圖標(biāo)打開(kāi)軟件,選擇Help—Install New Libraries—From…
5.2雙擊鼠標(biāo)選擇文件:~/stm32環(huán)境必備/ stm32cubef1_1.3.1.zip,等待自動(dòng)加載完成即可
(3) Keil5
1.雙擊打開(kāi)文件:~/stm32環(huán)境必備/mdk514.exe,按照提示安裝,選擇默認(rèn)路徑即可,安裝時(shí)間較長(zhǎng),請(qǐng)耐心等待
2.安裝完成之后可能會(huì)彈出一個(gè)窗口,關(guān)閉即可
3.安裝芯片包: ~/stm32環(huán)境必備/ Keil.STM32F1xx_DFP.1.1.0.pack
(4) st-link v2 驅(qū)動(dòng)安裝
st-link v2是我們下載stm32程序的接口,該硬件需要安裝驅(qū)動(dòng),方法如下:
找到驅(qū)動(dòng)文件:~/stm32環(huán)境必備/st-link_v2_usbdriver.exe,直接安裝即可
檢測(cè)安裝是否成功:右鍵計(jì)算機(jī)—屬性—設(shè)備管理器,如果安裝成功則會(huì)有如下顯示:
如果安裝完成之后還是無(wú)法下載,再安裝如下驅(qū)動(dòng):
~/stm32環(huán)境必備/ST-LINK_V2/stlink_winusb_install.bat
(5) Pl2303 驅(qū)動(dòng)安裝
Pl2303是USB轉(zhuǎn)串口上面的主要芯片,它需要安裝驅(qū)動(dòng)才能正常工作,安裝方法如下:
找到驅(qū)動(dòng)文件:~/stm32環(huán)境必備/PL2303Driver/PL-2303 Win7(X32)(X64) Driver Installer.exe,直接安裝即可
如果安裝完成之后還是無(wú)法下載,再安裝如下驅(qū)動(dòng):~/stm32環(huán)境必備/PL2303Driver/PL2303_Prolific_DriverInstaller_v1.10.0.exe
【3】項(xiàng)目物聯(lián)網(wǎng)硬件搭建
本項(xiàng)目利用STM32作為智能小車(chē)的主控制器來(lái)驅(qū)動(dòng)智能小車(chē)的直流電機(jī)工作,電機(jī)驅(qū)動(dòng)芯片采用L298N微型集成電路電機(jī)驅(qū)動(dòng)芯片,配合STM32核心板使用實(shí)現(xiàn)四個(gè)直流電機(jī)運(yùn)行和PWM軟件調(diào)速,通過(guò)改變直流電機(jī)占空比的電壓來(lái)改變平均電壓的數(shù)值,從而改變電機(jī)的轉(zhuǎn)速變化來(lái)驅(qū)動(dòng)小車(chē)運(yùn)行。智能小車(chē)行駛的狀態(tài)有:前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止。當(dāng)智能小車(chē)在行駛過(guò)程中遇到障礙物,超聲波避障檢測(cè)模塊檢測(cè)周?chē)系K物,小車(chē)自動(dòng)停止或轉(zhuǎn)向。
硬件系統(tǒng)主要由單片機(jī)主控模塊、電源模塊、三色LED燈模塊、電機(jī)驅(qū)動(dòng)模塊、超聲波避障模塊和控制終端模塊組成。硬件系統(tǒng)框圖如圖:
(1) 主控模塊
主控模塊采用STM32F103為主控制器,STM32F103屬于中低端的32位ARM微控制器,該系列芯片是意法半導(dǎo)體(ST)公司出品,其內(nèi)核是Cortex-M3。該系列芯片按片內(nèi)Flash的大小可分為三大類(lèi):小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。STM32F103可使用keil語(yǔ)言編譯,支持ST Link-SWD在線調(diào)試,主要用于收集信息、處理數(shù)據(jù)、協(xié)調(diào)系統(tǒng)中的每個(gè)功能模塊預(yù)計(jì)要完成的任務(wù)。
(2) 電源模塊
電源模塊在小車(chē)的運(yùn)行過(guò)程中,需要給單片機(jī)、電機(jī)、各大模塊及傳感器供電。
(3) 三色LED燈模塊
三色LED燈模塊是R,G,B三個(gè)管芯的LED。工作原理是:由紅綠藍(lán)三基色混色實(shí)現(xiàn)七種顏色的變化,采用輸出波形的脈寬調(diào)制,即調(diào)節(jié)LED燈導(dǎo)通的占空比,在掃描速度很快的情況下,利用人的視覺(jué)惰性達(dá)到漸變的效果。
(4) 電機(jī)驅(qū)動(dòng)模塊
電機(jī)驅(qū)動(dòng)模塊采用L298N為電機(jī)驅(qū)動(dòng)芯片。L298N是ST公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動(dòng)芯片。主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間峰值電流可達(dá)3A,持續(xù)工作電流為2A;額定功率25W。內(nèi)含兩個(gè)H橋高電壓大電流全橋式驅(qū)動(dòng)器,可以用來(lái)驅(qū)動(dòng)直流電動(dòng)機(jī)和步進(jìn)電動(dòng)機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測(cè)電阻,將變化量反饋給控制電路。使用L298N芯片驅(qū)動(dòng)電機(jī),該芯片可以驅(qū)動(dòng)一臺(tái)兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動(dòng)兩臺(tái)直流電機(jī),并聯(lián)時(shí)可以驅(qū)動(dòng)四臺(tái)電機(jī)。本次項(xiàng)目將L298N配合STM32核心板無(wú)縫對(duì)插使用,實(shí)現(xiàn)無(wú)損擴(kuò)展并對(duì)四個(gè)馬達(dá)進(jìn)行驅(qū)動(dòng)和PWM調(diào)速。
(5) 超聲波避障模塊
原理:在模塊上電以后,給Trig管腳一個(gè)持續(xù)20us以上的高電平,該模塊可以開(kāi)始工作。這時(shí),該模塊會(huì)自動(dòng)從這一個(gè)“大喇叭”發(fā)送8個(gè)40KHZ的方波,并將Echo管腳拉高,然后自動(dòng)檢測(cè)是否有信號(hào)返回。如果返回,Echo管腳便拉低,那么Echo高電平持續(xù)的時(shí)間就是超聲波從發(fā)送到接收的時(shí)間。我們要做的就是開(kāi)啟超聲波模塊,然后再通過(guò)Echo知道超聲波從發(fā)送到接收的時(shí)間就可以。
(6) 紅外感應(yīng)模塊
光電開(kāi)關(guān)又稱(chēng)紅外光電傳感器,反饋反射型。發(fā)射口不間斷發(fā)射光束,接收器把收到的光能量轉(zhuǎn)換為電流,傳輸給后面的檢測(cè)線路
可以正常反射 → 低電平;紅外光被吸收 → 高電平。
【4】實(shí)訓(xùn)具體任務(wù)及內(nèi)容
1.開(kāi)機(jī)后紅燈閃爍3次,黃燈閃爍2次,然后亮綠燈,開(kāi)始循跡行駛
2.行駛過(guò)程需根據(jù)軌道能平緩調(diào)整方向
3.行駛過(guò)程前面20cm范圍內(nèi)有障礙物,需能停止,并亮紅燈,障礙物移開(kāi)后,需亮綠燈并開(kāi)始前行
【5】實(shí)訓(xùn)結(jié)果(項(xiàng)目運(yùn)行說(shuō)明及截圖)
(一)項(xiàng)目運(yùn)行說(shuō)明
在Application/User中新建LED.c 、redlight.c 、delay.c 、car.c 四個(gè)函數(shù),在四個(gè)函數(shù)中分別建立相對(duì)應(yīng)的函數(shù),需要用到某個(gè)函數(shù)直接在主函數(shù)里調(diào)用,就可以實(shí)現(xiàn)功能。
(1) 在LED.c中自定義ChangeLed函數(shù),采用PWM時(shí)鐘延時(shí)使三色LED閃爍,使用 HAL 庫(kù)中的__HAL_TIM_SetCompare 修改脈沖寬度來(lái)修改占空比,在主函數(shù)中調(diào)用修改3個(gè)通道的值可以修改所亮燈的顏色以及亮度。
(2) 在redlight.h中定義HASLEFT、HASLEFTMID、HASMIDDLE、HASRIGHTMID、HASRIGHT、HASNOTHING六個(gè)參數(shù)值;在redlight.c中自定義ScanRed函數(shù),使用 HAL 庫(kù)中的HAL_GPIO_ReadPin 判斷讀取的引腳是最左邊、最右邊、左中、右中或中間,并返回相應(yīng)的參數(shù)值。在主函數(shù)中引入switch…case語(yǔ)句,通過(guò)判斷HASLEFT等幾個(gè)參數(shù)值,去執(zhí)行相應(yīng)的語(yǔ)句,使小車(chē)做出相對(duì)應(yīng)的動(dòng)作。
(3) 在delay.c中,自定義兩個(gè)延時(shí)函數(shù)delay_nus和delay_nms,在主函數(shù)中調(diào)用完成延時(shí)。
(4) 在car.c中,自定義ChangeSpeed函數(shù),使用 HAL 庫(kù)中的__HAL_TIM_SetCompare 修改脈沖寬度來(lái)修改占空比,設(shè)定兩個(gè)通道left、right。再自定義left_go、left_stop、left_back、right_go、right_stop、right_back六個(gè)函數(shù),使用 HAL 庫(kù)中的HAL_GPIO_WritePin 讀取引腳是RESET或SET,通過(guò)改變left、right的速度FULL_Speed或ZeroSpeed,判斷小車(chē)左右輪前進(jìn)或后退。
【6】實(shí)訓(xùn)小結(jié)
1.闡述實(shí)訓(xùn)過(guò)程遇到的難題及解決辦法,給自己帶來(lái)的收獲;
(一)難題及解決辦法:
(1)STM32CubeMX導(dǎo)入到Keil uVision5中,顯示“The ARM C/C++ Compiler 已停止工作,由于出現(xiàn)問(wèn)題,程序停止正常工作。Windows將關(guān)閉程序,并會(huì)在有可用的解決方案時(shí)通知你。”,找了好多資料,修改中文用戶(hù)名,配置環(huán)境變量等,試了很多種方法,都沒(méi)有解決。后來(lái)問(wèn)了王老師,安裝了另外一個(gè)版本的Keil uVision5。
(2)驅(qū)動(dòng)安裝成功,但是在設(shè)備管理器無(wú)法顯示,或者就是有一個(gè)“!”,安裝存在問(wèn)題,也是安裝了另一個(gè)版本的ST-LINK_V2驅(qū)動(dòng)。
(3)串口接口接觸不良,插頭插在電腦上顯示設(shè)備“USB2.0-Serial”有“!”,無(wú)法與小車(chē)之間構(gòu)成連接。
(4)串口連接成功且PL2303顯示安裝成功,卻無(wú)法檢測(cè)到串口。
(5)循跡行駛的時(shí)候,小車(chē)行駛時(shí)的速度快,來(lái)不及調(diào)整好方向就繼續(xù)往前走,導(dǎo)致沒(méi)有沿著黑膠帶行駛,且左輪的轉(zhuǎn)速較右輪慢,通過(guò)修改速度FULL_Speed以及左右方向調(diào)整的延時(shí)delay_nms去調(diào)整小車(chē)整體的循跡方向。
(二)收獲:
本學(xué)期為期一周的嵌入式實(shí)訓(xùn)在不知不覺(jué)中結(jié)束了,雖說(shuō)這次實(shí)訓(xùn)的時(shí)間不是很長(zhǎng),但是感覺(jué)自己收獲頗豐,不僅學(xué)習(xí)到了一些新知識(shí),回顧了以前的一些快要遺忘的知識(shí)點(diǎn),而且使自己的學(xué)習(xí)目標(biāo)更加明確,學(xué)習(xí)方法更加完善,也體會(huì)到了軟件開(kāi)發(fā)的趣味,更加認(rèn)識(shí)到了自己在軟件編程及學(xué)習(xí)上的一些不足之處。
此次實(shí)訓(xùn)是由西安的華清遠(yuǎn)見(jiàn)公司的王樂(lè)王老師帶我們完成的。項(xiàng)目的實(shí)施方式是團(tuán)隊(duì)分組合作,共同完成,讓我們體會(huì)到了公司開(kāi)發(fā)項(xiàng)目的氛圍。我們一人一臺(tái)電腦,老師邊講邊練。雖然有一些實(shí)驗(yàn),我們之前也都學(xué)習(xí)了解過(guò),但是大多停留在淺層次,實(shí)際做項(xiàng)目卻很少。這次實(shí)訓(xùn)給了我們一個(gè)很好的邊學(xué)習(xí)邊實(shí)踐的機(jī)會(huì),對(duì)我們深入學(xué)習(xí)這些技術(shù)有很大幫助,深刻體會(huì)到了這些技術(shù)的實(shí)用性。每當(dāng)自己成功調(diào)試一段代碼或者通過(guò)自己的努力克服一個(gè)技術(shù)困難,滿(mǎn)滿(mǎn)的成就感。
沒(méi)有做實(shí)驗(yàn)之前,總是覺(jué)得做起來(lái)很簡(jiǎn)單,可是實(shí)驗(yàn)過(guò)程中,往往會(huì)出現(xiàn)很多意料不到的問(wèn)題,比如,在緊急時(shí)刻,電腦突然卡了,寫(xiě)的代碼什么的就需要再重新去寫(xiě)。剛開(kāi)始了解實(shí)訓(xùn)題目的時(shí)候,感覺(jué)很難去完成,經(jīng)過(guò)這幾天的學(xué)習(xí),一步一步的,發(fā)現(xiàn)也沒(méi)有那么難。它讓我學(xué)會(huì)了如何通過(guò)自己的努力去了解一件新事物,更重要的是端正自己的學(xué)習(xí)態(tài)度,只要真正下功夫去學(xué)習(xí),才能有收獲;學(xué)會(huì)了如何去分析問(wèn)題,遇到問(wèn)題時(shí),不能急躁,要去找出問(wèn)題的根源,進(jìn)而去解決。讓我深刻意識(shí)到“實(shí)踐出真知”;沒(méi)有實(shí)踐,就不會(huì)知道實(shí)驗(yàn)中會(huì)出現(xiàn)什么問(wèn)題,也就不能從中得到收獲。
此次實(shí)訓(xùn)最大的收獲不是我學(xué)到了多少知識(shí)而是這幾天實(shí)訓(xùn)給我的感悟:首先是心態(tài)。一定要有一個(gè)積極的心態(tài),獨(dú)立解決問(wèn)題的意識(shí),培養(yǎng)扎實(shí)基礎(chǔ)的認(rèn)識(shí),不要什么東西都感覺(jué)很簡(jiǎn)單就不去做了或者不屑一顧。有自己的東西自己的付出才會(huì)有程序運(yùn)行成功時(shí)的喜悅和小自豪,這樣也有助于培養(yǎng)自己的興趣。要時(shí)刻牢記態(tài)度決定一切。其次是興趣。學(xué)習(xí)工作中興趣很關(guān)鍵,一個(gè)引發(fā)人積極性的問(wèn)題,有了興趣就自覺(jué)了,效率自然就高了。再次要敢于嘗試和挑戰(zhàn)。不要安于現(xiàn)成,不要害怕失敗,在程序調(diào)試的過(guò)程中這點(diǎn)尤為重要,“發(fā)現(xiàn)問(wèn)題然后解決問(wèn)題”是一個(gè)積累經(jīng)驗(yàn)的過(guò)程,而且很高效。最后要不懈追求。對(duì)于源代碼進(jìn)行不斷的完善,盡可能的實(shí)現(xiàn)項(xiàng)目要求。對(duì)于初學(xué)者或者開(kāi)發(fā)較少的人來(lái)說(shuō),大量寫(xiě)程序還是有必要的,但同時(shí)要注意思考,理解其實(shí)現(xiàn)的內(nèi)在意義。還可以自己添加一些有意義的功能去實(shí)現(xiàn)。當(dāng)看到自己編寫(xiě)的程序正常運(yùn)行時(shí),興趣也會(huì)隨之而來(lái)。
2.闡述此次實(shí)訓(xùn)對(duì)自己實(shí)踐能力的影響,對(duì)已學(xué)專(zhuān)業(yè)知識(shí)的認(rèn)識(shí),對(duì)將來(lái)工作學(xué)習(xí)方向的影響;
(1)對(duì)自己實(shí)踐能力的影響:
實(shí)訓(xùn)是一個(gè)有針對(duì)性的訓(xùn)練,跟平常上課不太一樣,平時(shí)上完理論課很少有時(shí)間上機(jī)或者隔幾天才上機(jī)聯(lián)系,等到上機(jī)時(shí)一些東西就遺忘了,很耗費(fèi)時(shí)間。此次實(shí)訓(xùn),認(rèn)識(shí)到自己的計(jì)算機(jī)水平還有待提高,要打好基礎(chǔ),才能進(jìn)一步深入的學(xué)習(xí)。
(2)對(duì)已學(xué)專(zhuān)業(yè)知識(shí)的認(rèn)識(shí):
嵌入式軟件開(kāi)發(fā)應(yīng)用廣泛而且前景很好,目前正處于人才緊缺的關(guān)口,嵌入式技術(shù)在未來(lái)能夠得到更加廣泛的應(yīng)用。學(xué)好嵌入式,C語(yǔ)言很重要,基礎(chǔ)不太好的有必要再學(xué)習(xí)積累一下這方面的知識(shí)。很多東西的學(xué)習(xí)不是一帆風(fēng)順也是耗時(shí)的,嵌入式也不例外,要想學(xué)好必須要下大功夫,還要堅(jiān)持。這次的實(shí)訓(xùn)讓我明確了:嵌入式系統(tǒng)開(kāi)發(fā)對(duì)于提升我們的系統(tǒng)知識(shí)有很大的幫助,尤其是操作系統(tǒng)的知識(shí)。嵌入式系統(tǒng)對(duì)于知識(shí)面的要求很廣,且有一定的深度。
(3)對(duì)將來(lái)工作學(xué)習(xí)方向的影響:
一周的實(shí)訓(xùn),感受到了計(jì)算機(jī)在我們生活中工作中的運(yùn)用,這些軟件、程序能讓我們提高工作的效率,更直觀便捷的切入主題。在計(jì)算機(jī)這個(gè)神秘的領(lǐng)域,我感覺(jué)自己還有好多東西要學(xué),還有好多東西不懂,但是這也再次堅(jiān)定了我考研深造的決心。
總結(jié)
以上是生活随笔為你收集整理的基于STM32的智能循迹避障小车的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: web期末大作业 使用HTML+CSS制
- 下一篇: 【Java多线程】轻松搞定Java多线程