畢業(yè)設計+智能循跡避障小車設計-
《畢業(yè)設計+智能循跡避障小車設計-》由會員分享,可在線閱讀,更多相關《畢業(yè)設計+智能循跡避障小車設計-(34頁珍藏版)》請在裝配圖網上搜索。
1、 單片機系統課程設計 輪式移動機器人的設計 學院: 通信與電子工程學院 班級: 電子131 姓名: 初清晨 學號: 2013131013 同組成員: 孟慶陽 張軒 指導老師: 王艷春 日期: 2015年12月24日 組 員 分 工 1、組長:張 軒 ,實物焊接,報告整理,程序設計 2、組員:孟慶陽 ,實物焊接,仿真測試,報告整理 3、組員:初清晨 ,實物焊接,報告整理,仿真測試
2、 目錄 摘要 1 第一章 緒論 2 1.1智能小車的意義和作用 2 1.2智能小車的現狀 3 第二章 方案設計與論證 3 2.1 主控系統 3 2.2 電機驅動模塊 4 2.3 循跡模塊 5 2.4 避障模塊 6 2.5 機械系統 7 2.6電源模塊 7 第三章 硬件設計 7 3.1 AT89S52單片機的簡介 8 3.2總體設計 11 3.3驅動電路 12 3.4信號檢測模塊 13 3.5主控電路 14 第四章 軟件設計 15 4.1主程序框圖 15 4.2
3、電機驅動程序 15 4.3循跡模塊 16 4.4避障模塊 20 結束語 25 致謝 26 附錄一 循跡加紅外避障綜合程序 28 附錄二 實物圖 32 摘要 隨著計算機、微電子、信息技術的快速進步,智能化技術的開發(fā)速度越來越快,智能度越來越高,應用范圍也得到了極大的擴展。智能作為現代的新發(fā)明,是以后的發(fā)展方向,它可以按照預先設定的模式在一個環(huán)境里自動的運作,不需要人為的管理,可應用于科學勘探等用途。智能電動小車就是其中的一個體現。設計者可以通過軟件編程實現它的行進、循跡、停止的精確控制以及檢測數據的存儲、顯示,無需人工干預。因此,智能電動小車具有再編
4、程的特性,是機器人的一種。 本設計采用AT89S52單片機加電機驅動電路和紅外遙控及循跡模塊還有紅外接收一體化傳感器設計而成,采用模塊化的設計方案,運用紅外遙控器控制小車的前進、后退、左轉、右轉、啟動和停止。 關鍵詞:智能小車;STC89C52單片機;L9110;紅外對管 Intelligent tracking and obstacle-avoid car Abstract:Based infrared detection of black lines and the road obstacles, and use a STC89C52 MCU as the control
5、ling core for the speed and direction, A electronic drived, which can automatic track and avoid the obstacle, was designed and fabricated. In which, the car is drived by the L298N circuit, its speed is controlled by the output PWM signal from the STC89C52. Keywords: Smart Car; STC89C52 MCU; L298N;
6、Infrared Emitting Diode 第一章 緒論 1.1智能小車的意義和作用 自第一臺工業(yè)機器人誕生以來,機器人的發(fā)展已經遍及機械、電子、冶金、交通、宇航、國防等領域。近年來機器人的智能水平不斷提高,并且迅速地改變著人們的生活方式。人們在不斷探討、改造、認識自然的過程中,制造能替代人勞動的機器一直是人類的夢想。 隨著科學技術的發(fā)展,機器人的感覺傳感器種類越來越多,其中視覺傳感器成為自動行
7、走和駕駛的重要部件。視覺的典型應用領域為自主式智能導航系統,對于視覺的各種技術而言圖像處理技術已相當發(fā)達,而基于圖像的理解技術還很落后,機器視覺需要通過大量的運算也只能識別一些結構化環(huán)境簡單的目標。視覺傳感器的核心器件是攝像管或CCD,目前的CCD已能做到自動聚焦。但CCD傳感器的價格、體積和使用方式上并不占優(yōu)勢,因此在不要求清晰圖像只需要粗略感覺的系統中考慮使用接近覺傳感器是一種實用有效的方法。 機器人要實現自動導引功能和避障功能就必須要感知導引線和障礙物,感知導引線相當給機器人一個視覺功能。避障控制系統是基于自動導引小車(AVG—auto-guide vehicle)系統,基于它的智能小
8、車實現自動識別路線,判斷并自動避開障礙,選擇正確的行進路線。使用傳感器感知路線和障礙并作出判斷和相應的執(zhí)行動作。 該智能小車可以作為機器人的典型代表。它可以分為三大組成部分:傳感器檢測部分、執(zhí)行部分、CPU。機器人要實現自動避障功能,還可以擴展循跡等功能,感知導引線和障礙物??梢詫崿F小車自動識別路線,選擇正確的行進路線,并檢測到障礙物自動躲避。基于上述要求,傳感檢測部分考慮到小車一般不需要感知清晰的圖像,只要求粗略感知即可,所以可以舍棄昂貴的CCD傳感器而考慮使用價廉物美的紅外反射式傳感器來充當。智能小車的執(zhí)行部分,是由直流電機來充當的,主要控制小車的行進方向和速度。單片機驅動直流電機一般有
9、兩種方案:第一,勿需占用單片機資源,直接選擇有PWM功能的單片機,這樣可以實現精確調速;第二,可以由軟件模擬PWM輸出調制,需要占用單片機資源,難以精確調速,但單片機型號的選擇余地較大??紤]到實際情況,本文選擇第二種方案。CPU使用STC89C52單片機,配合軟件編程實現。 1.2智能小車的現狀 現智能小車發(fā)展很快,從智能玩具到其它各行業(yè)都有實質成果。其基本可實現循跡、避障、檢測貼片、尋光入庫、避崖等基本功能,這幾節(jié)的電子設計大賽智能小車又在向聲控系統發(fā)展。比較出名的飛思卡爾智能小車更是走在前列。我此次的設計主要實現循跡避障這兩個功能。 第二章 方案設計與論證 2.1 主控
10、系統 根據設計要求,我認為此設計屬于多輸入量的復雜程序控制問題。據此,擬定了以下兩種方案并進行了綜合的比較論證,具體如下: 方案一: 選用一片CPLD(如EPM7128LC84-15)作為系統的核心部件,實現控制與處理的功能。CPLD具有速度快、編程容易、資源豐富、開發(fā)周期短等優(yōu)點,可利用VHDL語言進行編寫開發(fā)。但CPLD在控制上較單片機有較大的劣勢。同時,CPLD的處理速度非???,而小車的行進速度不可能太高,那么對系統處理信息的要求也就不會太高,在這一點上,MCU就已經可以勝任了。若采用該方案,必將在控制上遇到許許多多不必要增加的難題。為此,我們不采用該種方案,進而提出了第二種設想。
11、 方案二: 采用單片機作為整個系統的核心,用其控制行進中的小車,以實現其既定的性能指標。充分分析我們的系統,其關鍵在于實現小車的自動控制,而在這一點上,單片機就顯現出來它的優(yōu)勢——控制簡單、方便、快捷。這樣一來,單片機就可以充分發(fā)揮其資源豐富、有較為強大的控制功能及可位尋址操作功能、價格低廉等優(yōu)點。因此,這種方案是一種較為理想的方案。 針對本設計特點——多開關量輸入的復雜程序控制系統,需要擅長處理多開關量的標準單片機,而不能用精簡I/O口和程序存儲器的小體積單片機,D/A、A/D功能也不必選用。根據這些分析,我選定了P89C51RA單片機作為本設計的主控裝置,51單片機具有功能強大的位操
12、作指令,I/O口均可按位尋址,程序空間多達8K,對于本設計也綽綽有余,更可貴的是51單片機價格非常低廉。 在綜合考慮了傳感器、兩部電機的驅動等諸多因素后,我們決定采用一片單片機,充分利用STC89C52單片機的資源。 2.2 電機驅動模塊 方案一: 采用分立元件組成的平衡式驅動電路,這種電路可以由單片機直接對其進行操作,但由于分立元件占用空間比較大,還要配上兩個繼電器,考慮到小車的空間問題,此方案不夠理想。 方案二: 采用L9110 是為控制和驅動電機設計的兩通道推挽式功率放大專用集成電路器件,將分立電路集成在單片 IC 之中,使外圍器件成本降低,整機可靠性提高。該芯片有
13、兩個 TTL/CMOS兼容電平的輸入,具有良好的抗干擾性;兩個輸出端能直接驅動電機的正反向運動,它具有較大的電流驅動能力,每通道能通過 800mA 的持續(xù)電流,峰值電流能力可達 1.5A;同時它具有較低的輸出飽和壓降;內置的鉗位二極管能釋放感性負載的反向沖擊電流,使它在驅動繼電器、直流電機、步進電機或開關功率管的使用上安全可靠。L9110 被廣泛應用于玩具汽車電機驅動、脈沖電磁閥門驅動,步進電機驅動和開關功率管等電路上。 圖2.2 L9110 2.3 循跡模塊 方案一: 采用簡易光電傳感器結合外圍電路探測,但實際效果并不理想,對行駛過程中的穩(wěn)定性要求很高,且誤測幾率較大
14、、易受光線環(huán)境和路面介質影響。在使用過程極易出現問題,而且容易因為 該部件造成整個系統的不穩(wěn)定。故最終未采用該方案。 方案二: 采用兩只紅外對管,分別置于小車車身前軌道的兩側,根據兩只光電開關接受到白線與黑線的情況來控制小車轉向來調整車向,測試表明,只要合理安裝好兩只光電開關的位置就可以很好的實現循跡的功能。 圖2.3 紅外對管 2.4 避障模塊 方案一: 采用超聲波避障,超聲波受環(huán)境影響較大,電路復雜,而且地面對超聲波的反射,會影響系統對障礙物的判斷。 方案二: 采用紅外線避障,利用單片機產生38KHz信號對紅外線發(fā)射管進行調制發(fā)射,發(fā)射出去的紅外線遇到避障物的時候發(fā)射回
15、來,紅外線接收管對反射回來信號進行解調,輸出TTL電平。外界對紅外信號的干擾比較小,而且易于實現,價格比較便宜,故采用方案二。 紅外線接受電路原理圖 2.5 機械系統 本題目要求小車的機械系統穩(wěn)定、靈活、簡單,而三輪運動系統具備以上特點。 驅動部分:由于玩具汽車的直流電機功率較小,而小車上裝有電池、電機、電子器件等,使得電機負擔較重。為使小車能夠順利啟動,且運動平穩(wěn),在直流電機和輪車軸之間加裝了三級減速齒輪。 電池的安裝:將電池放置在車體的電機前后位置,降低車體重心,提高穩(wěn)定性,同時可增加驅動輪的抓地力,減小輪子空轉所引起的誤差。簡單,而三輪運動系統具備以上特點。 2.6電源模
16、塊 方案一: 采用有線電源通過USB接口供電,其優(yōu)點是可穩(wěn)定的提供5V電壓,但占用資源比較大。 方案二: 采用4支1.5V電池單電源供電,但6V的電壓太小不能同時給單片機與與電機供電。 方案三: 采用8支1.5V電池雙電源分別給單片機與電機供電可解決方案二的問題且能讓小車完成其功能。但是占用空間過大沒有采取。 所以,我選擇了方案一來實現供電。 第三章 硬件設計 3.1 AT89S52單片機的簡介 AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有8K在系統可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產品
17、指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。下圖為AT89S52引腳圖。 圖3-1 AT89S52引腳圖 (1)主要特性: ●與MCS-51 兼容 ●8K字節(jié)可編程閃爍存儲器 ●壽命:1000寫/擦循環(huán) ●數據保留時間:10年 ●全靜態(tài)工作:0Hz-24MHz ●三級程序存儲器鎖定 ●256*8位內部RAM ●32可編程I/O線 ●兩個16位
18、定時器/計數器 ●5個中斷源 ●可編程串行通道 ●低功耗的閑置和掉電模式 ●片內振蕩器和時鐘電路 (2)管腳說明: VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高
19、,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接
20、收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89S52的一些特殊功能口,如下表3-1所示: 表3-1 特殊功能引腳對照表 引腳號 特殊功能 P3.0 RXD 串行通信輸入 P3.1 TXD 串行通信輸出 P3.2 INT0 外部中斷0 輸入,低電平有效 P3.3 INT1 外部中
21、斷1 輸入,低電平有效 P3.4 T0 計數器0 外部事件計數輸入端 P3.5 T1 計數器1 外部事件計數輸入端 P3.6 WR 外部隨機存儲器的寫選通,低電平有效 P3.7 RD 外部隨機存儲器的讀選通,低電平有效 P3口同時為閃爍編程和編程校驗接收一些控制信號。 RST:AT89S52 的復位信號輸入引腳,高電位工作,當要對芯片復位時,只要將此引腳電位提升到高電位,并持續(xù)兩個機器周期以上的時間,AT89S52 便能完成系統復位的各項工作,使得內部特殊功能寄存器的內容均被設成已知狀態(tài)。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)
22、。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。 EA/VPP:該引
23、腳為低電平時,則讀取外部的程序代碼 (存于外部EPROM 中)來執(zhí)行程序。因此在8031中,EA引腳必須接低電位,因為其內部無程序存儲器空間。如果是使用AT89S52或其它內部有程序空間的單片機時,此引腳接成高電平使程序運行時訪問內部程序存儲器,當程序指針PC值超過片內程序存儲器地址(如8051/8751/89C51的PC超過0FFFH)時,將自動轉向外部程序存儲器繼續(xù)運行。此外,在將程序代碼燒錄至8751內部EPROM、89C51內部FALSH時,可以利用此引腳來輸入提供編程電壓(8751為2lV、AT89S52為12V、8051是由生產廠方一次性加工好)。 XTAL1:接外部晶振的一個引
24、腳。在單片機內部,它是一反相放大器輸入端,這個放大器構成了片內振蕩器。它采用外部振蕩器時,此引腳應接地。 XTAL2:接外部晶振的一個引腳。在片內接至振蕩器的反相放大器輸出端和內部時鐘發(fā)生器輸入端。當采用外部振蕩器時,則此引腳接外部振蕩信號的輸入。 (3)振蕩器特性: XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。 (4)芯片擦除: 整個PEROM陣
25、列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復編程以前,該操作必須被執(zhí)行。 此外,AT89S52設有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數器,串口和中斷系統仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。 3.2總體設計 智能小車采用前輪驅動,前輪左右兩邊各用一個電機驅動,調制前面兩個輪子的轉速起停從而達到控制轉向的目的,后輪是萬象輪,起支撐
26、的作用。將循跡光電對管分別裝在車體下的左右。當車身下左邊的傳感器檢測到黑線時,主控芯片控制左輪電機停止,車向左修正,當車身下右邊傳感器檢測到黑線時,主控芯片控制右輪電機停止,車向右修正。 避障的原理和循線一樣,在車身右邊裝一個光電對管,當其檢測到障礙物時,主控芯片給出信號報警并控制車子倒退,轉向,從而避開障礙物。 3.2主板設計框圖如圖3.2,所需原件清單如表3.2。 Stc89c52 循跡紅外對管 時鐘電路 復位電路 報警電路 電機驅動 避障紅外對管 圖3.2 主板設計框圖 元件 數量 元件 數量 元件 數量 直流電機 2只
27、電阻 若干 集成電路芯片 若干 單片機 1 塊 二極管 若干 電容 若干 紅外對管 2只 蜂鳴器 1只 電位器 若干 12M晶振 1只 杜邦線 若干 玩具小車 1個 排針 若干 液晶屏 1個 一體化紅外接收頭 1只 表3.2 元件清單 3.3驅動電路 電機驅動一般采用H橋式驅動電路,L9110內部集成了H橋式驅動電路,從而可以采用L9110電路來驅動電機。其引腳圖如3.3.1,驅動原理圖如圖3.3.2。 圖3.3.1 L9110引腳圖 圖3.3.2 電機驅動電路 3.4信號檢測模塊 小車循跡原理是小車
28、在畫有黑線的白紙 “路面”上行駛,由于黑線和白紙對光線的反射系數不同,可根據接收到的反射光的強弱來判斷“道路”—黑線。筆者在該模塊中利用了簡單、應用也比較普遍的檢測方法——紅外探測法。 紅外探測法,即利用紅外線在不同顏色的物理表面具有不同的反射性質的特點。在小車行駛過程中不斷地向地面發(fā)射紅外光,當紅外光遇到白色地面時發(fā)生漫發(fā)射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,則小車上的接收管接收不到信號,再通過LM393作比較器來采集高低電平,從而實現信號的檢測。避障亦是此原理。電路圖如圖3.4。 市面上有很多紅外傳感器,在這里我選用94型光電對管。 圖3.4循跡
29、原理圖 3.5主控電路 本模塊主要是對采集信號進行分析,同時給出PWM波控制電機速度,起停。以及再檢測到障礙報警等作用。其電路圖如圖3.5。 圖3.5 主控電路 第四章 軟件設計 4.1啟動 循跡 是否檢測到停止線 停止 是否檢測到障礙是否檢測到 N Y Y 避障 Y N 主程序框圖: 4.1 主程序圖 4.2電機驅動程序 void goahead() { s1=1; s2=0; s3=1; s4=0; } void goback() { s1=0; s2=1; s3=0; s4=1; } v
30、oid turnleft()
{
s3=1;
s4=0;
}
void turnright()
{
s1=1;
s2=0;
}
void stop()
{
en1=0;
en2=0;
}
4.3循跡模塊
開始
前進
掃描I/O口,是否檢測到黑線
Y
左邊 右邊
左轉
右轉
N
循跡框圖:
開始
前進
掃描I/O口,是否檢測到黑線
Y
左邊 右邊
左轉
右轉
N
圖4.3 循跡框圖
循跡程序:
#include
31、 //包含51相關的頭文件 typedef unsigned char uchar; //重定義char數據類型 typedef unsigned int uint; //重定義int數據類型 #define ShowPort P2 //定義數碼管顯示端口 uchar code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, 0x49,0x41,0x
32、1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9//定義數碼管顯示數據 static unsigned int RecvData; //定義接收紅外數據變量 static unsigned char CountData; //定義紅外個數計數變量 static unsigned char AddData; //定義自增變量 static unsigned int LedFlash; //定義閃動頻率計數變量
33、unsigned char HeardData; //定義接收到數據的高位變量 bit RunFlag=0; //定義運行標志位 bit EnableLight=0; //定義指示燈使能位 /***********完成基本數據變量定義**************/ sbit S1State=P1^0; //定義S1狀態(tài)標志位 sbi
34、t S2State=P1^1; //定義S2狀態(tài)標志位 sbit B1State=P1^2; //定義B1狀態(tài)標志位 sbit IRState=P1^3; //定義IR狀態(tài)標志位 sbit RunStopState=P1^4; //定義運行停止標志位 sbit FontIRState=P1^5;
35、 //定義FontIR狀態(tài)標志位 sbit LeftIRState=P1^6; //定義LeftIR狀態(tài)標志位 sbit RightIRState=P1^7; //定義RightIRState狀態(tài)標志位 /*************完成狀態(tài)指示燈定義*************/ sbit S1=P3^2; //定義S1按鍵端口 sbit S2=P3^
36、4; //定義S2按鍵端口 /*************完成按鍵端口的定義*************/ sbit LeftLed=P2^0; //定義前方左側指示燈端口 sbit RightLed=P0^7; //定義前方右側指示燈端口 /*************完成前方指示燈端口定義*********/ sbit LeftIR=P3^5;
37、 //定義前方左側紅外探頭 sbit RightIR=P3^6; //定義前主右側紅外探頭 sbit FontIR=P3^7; //定義正前方紅外探頭 /*************完成紅外探頭端口定義***********/ sbit M1A=P0^0; //定義電機1正向端口 sbit M1B=P0^1;
38、 //定義電機1反向端口 sbit M2A=P0^2; //定義電機2正向端口 sbit M2B=P0^3; //定義電機2反向端口 /*************完成電機端口定義***************/ sbit B1=P0^4; //定義話筒傳感器端口 sbit RL1
39、=P0^5; //定義光敏電阻端口 sbit SB1=P0^6; //定義蜂鳴端口 /*********完成話筒,光敏電阻,蜂鳴器.端口定義**/ sbit IR1=P3^3; //定義紅外接收端口 /*********完成紅外接收端口的定義*************/ void Delay()
40、 //定義延時子程序 { uint DelayTime=30000; //定義延時時間變量 while(DelayTime--); //開始進行延時循環(huán) return; //子程序返回 } void main(void) //主程序入口 { while(1)
41、 {
LeftLed=LeftIR; //左邊的指示燈狀態(tài)為左邊的紅外探頭
RightLed=RightIR; //右邊的指示燈狀態(tài)為右邊的紅外探頭
Delay(); //延時
}
}
4.4避障模塊
避障框圖:
開始
后退一點,報警
后退
左轉
前進
右轉
Y
循跡
是否檢測到黑線
前進
N
圖4.4 避障框圖
避障程序:
#include
42、 //定義前方左側指示燈端口 sbit RightLed=P0^7; //定義前方右側指示燈端口 sbit FontLled=P1^7; sbit LeftIR=P3^5; //定義前方左側紅外探頭端口 sbit RightIR=P3^6 //定義前方右側紅外探頭端口 sbit FontIR=P3^7; //定義前方正前方紅外探頭端口 sbit M1A=P0^0; //定義左側電機驅動A端 sbit M1B=P0^1;
43、 //定義左側電機驅動B端 sbit M2A=P0^2; //定義右側電機驅動 sbit M2B=P0^3; //定義右側電機驅動B端 sbit B1=P0^4; //定義語音識識別傳感器端口 sbit SB1=P0^6; //定義蜂鳴器端口 void tingzhi() { M1A=0; //將M
44、1電機A端初始化為0 M1B=0; //將M1電機B端初始化為0 M2A=0; //將M2電機A端初始化為0 M2B=0; } void qianjin() { M1A=1; M1B=0; M2A=1; M2B=0;
45、} void houtui() { M1A=0; M1B=1; M2A=0; M2B=1; } void zuozhuan() { M1A=1; M1B=0; M2A=0;
46、 M2B=1; } void youzhuan() { M1A=0; M1B=1; M2A=1; M2B=0; } void delay_nus(unsigned int i) //延時:i>=12 ,i的最小延時單12 us { i=i/10; while(--
47、i); } void delay_nms(unsigned int n) //延時n ms { n=n+1; while(--n) delay_nus(900); //延時 1ms,同時進行補償 } void ControlCar(unsigned char ConType) //定義電機控制子程序 { tingzhi(); switch(ConType) //判斷用戶設定電機形式 { case 1: //前進
48、 //判斷用戶是否選擇形式1 { qianjin(); break; } case 2: //后退 //判斷用戶是否選擇形式2 { houtui(); //M2電機反轉 break; } case 3: //左轉 //判斷用戶是否選擇形式3 { zuozhuan(); //M2電機正轉
49、break; } case 4: //右轉 //判斷用戶是否選擇形式4 { youzhuan(); //M1電機正轉 //M2電機反轉 break; } case 8: //停止 //判斷用戶是否選擇形式8 { tingzhi(); break;
50、 //退出當前選擇 } } } void main() //主程序入口 { bit RunFlag=0; //定義小車運行標志位 //RunShow=0; //初始化顯示狀態(tài) ControlCar(8); //初始化小車運行狀態(tài) while(1) //程序主循環(huán)
51、{ Start: LeftLed=LeftIR; //前方左側指示燈指示出前方左側紅外探頭狀態(tài) RightLed=RightIR; //前方右側指示燈指示出前方右側紅外探頭狀態(tài) FontLled= FontIR; SB1=FontIR; if(FontIR == 0) //如果前面避障傳感器檢測到障礙物 { ControlCar(8); //停止
52、delay_nms (300); //停止300MS 防止電機反相電壓沖擊 導致系統復位 ControlCar(2); //后退 delay_nms (1000); //后退1500MS ControlCar(3); // delay_nms (1800); goto NextRun; } if(FontIR == 1 ) { ControlCar(1); //右側沒有信號時,開始向左轉一定的角度 delay_n
53、ms (10); goto NextRun; } goto Start; NextRun: ControlCar(1); } } 結束語 整個系統的設計以單片機為核心,利用了多種傳感器,將軟件和硬件相結合。本系統能實現如下功能: (1) 自動沿預設軌道行駛小車在行駛過程中,能夠自動檢測預先設好的軌道,實現直道和弧形軌道的前進。若有偏離,能夠自動糾正,返回到預設軌道上來。 (2)當小車探測到前進前方的障礙物時,可以躲避障礙物,從無障礙區(qū)通過。小車通過障礙區(qū)后,能夠自動循跡 (3)自動檢測停車線并自動停車。 從運行情況來
54、看避障的效果比較好,循跡的效果不是很好,我認為是由于焊接時沒有注意右側紅外燈管沒有焊接好,這也是我這次設計最大的誤區(qū),沒有及時的拆卸和重新焊接。我相信如果實驗條件和時間的允許下我肯定能解決這一問題。 通過本次設計我掌握了很多以前不熟練的東西,認識了很多以前不熟悉得東西,使我在人生上又進了一步。也認識到很多的不足。 致謝 本設計能夠順利完成,還承蒙王老師以及身邊的很多同學的指導和幫助。在設計過程中,王老師給予了悉心的指導,最重要的是給了我解決問題的思路和方法,并且在設計環(huán)境和器材方面給予了大力的幫助和支持,在此,我對王老師表示最真摯的感謝!同時感謝所有幫助過我的同學!
55、 感些評閱老師百忙之中抽出時間對本論文進行了評閱! 參考文獻 [1] 楊永輝.《現代電子技術》[J] .智能小車的多傳感器數據融合.2005 [2] 何立民.《單片機與嵌入式系統應用》[J].基于HCS12的小車智能控制系統設計.2007 [3] 譚浩強.《C程序設計》.北京:清華大學出版社,2005,7 [4] 張立.《電子世界》[J].電動小車的循跡.2004 [5] 武慶生,仇梅.單片機原理與應用(M).電子科技大學出版,1998,12 [6] 徐科軍.傳感器與檢測技術[M].電子工業(yè)出版社,2007 [7] 劉瑞新.單片機原理及應用教程 .機械工
56、業(yè)出版社,2003,7
[8] 劉湘濤,江世明.單片機原理與應用[M].電子工業(yè)出版社,2006
[9] 何立民.單片機初級教程[M].北京航空航天大學出版社,1999
[10] 熊建云. Protel99 SE.北京:機械工業(yè)出版社,2007
[11] 鄭郁正.單片機原理及應用.四川大學出版杜,2003
[12] 盧靜,陳非凡,張高飛等.基于單片機的無刷直流電動機控制系統設計.北京機械工業(yè)學院學報,2002,10
[13] 張燕,曾光宇.光電式傳感器的應用與發(fā)展[J].科技情報開發(fā)與經濟,2007
25
附錄一 循跡加紅外避障綜合程序
#include 57、89x52.h>
#define uint unsigned int
#define uchar unsigned char
#define out P2
sbit zuo1=P0^1;
sbit zuo2=P0^0;
sbit you1=P0^3;
sbit you2=P0^2;
sbit zuod=P3^5;
sbit youd=P3^6;
sbit qiand=P3^7; //左 右 前 3個紅外傳感器
sbit jiao=P0^6;
sbit D1=P2^0;
sbit D2=P0^7;
uchar code ZM[]={
0x 58、03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,
};
void delay(uint x)
{
uchar i;
while(x--)
for(i=0;i<123;i++);
}
void delay_nus(unsigned int i) //延時:i>=12 ,i的最小延時單12 us
{
i=i/10;
while(--i);
}
void delay_nms(unsigned int n) //延時n ms
{
n=n+1;
while(--n)
d 59、elay_nus(900); //延時 1ms,同時進行補償
}
void qian()
{
zuo1=0;
zuo2=1; //左邊往前
you1=0;
you2=1; //右邊往前
}
void hou()
{
zuo1=1;
zuo2=0; //左邊往后
you1=1;
you2=0; //右邊往后
}
void zuo()
{
zuo1=0;
zuo2=1; //左邊往前
you1=1;
you2=0; //右邊往后
}
void you()
60、{
zuo1=1;
zuo2=0; //左邊往后
you1=0;
you2=1; //右邊往前
}
void tingzhi()
{
zuo1=0;
zuo2=0; //左邊往后
you1=0;
you2=0; //右邊往前
}
void main()
{
while(1)
{
if(zuod==0&youd==0) //如果左右兩個傳感器沒有檢測到黑線
{
qian(); //直走
out=ZM[1];
if(qiand==0) // 61、如果在直走的過程中遇見障礙物
{
delay(50); //延時判斷是否為干擾
if(qiand==0) //不是干擾
{
jiao=0; //蜂鳴器報警
tingzhi();
delay_nms (120);
hou(); //后退半秒
out=ZM[2];
delay(500);
you(); //右轉200毫秒
out=ZM[4];
delay(200);
jiao=1; //取消報警
62、 }
}
}
if(zuod==1&youd==0) //如果左邊的傳感器檢測到黑線
{
while(1)
{
zuo();
out=ZM[3]; //左轉
D1=0;
if(zuod==0) //一直左轉到傳感器檢測不到為止
{
D1=1;
break; //跳出循環(huán)
}
}
}
if(youd==1&zuod==0)
{
while(1)
{
you();
out=ZM[4];
D2=0;
if(youd==0)
{
D2=1;
break; //道理同上
}
}
}
}
}
//效果:沿著黑線行走 中途遇見障礙物后退右轉
附錄二 實物圖
30
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。