智能循跡車制作方法詳解1
院系名稱: 專業(yè)班級: 學(xué)生姓名: 協(xié)會(huì):
目 錄 目錄……………………………………………………………………………1 第一章 緒論 …………………………………………………………………2 1.1機(jī)器人在當(dāng)今的重要性 …………………………………………………2 1.2機(jī)器人的發(fā)展與現(xiàn)狀 ……………………………………………………2 1.3我與機(jī)器人 ………………………………………………………………2 第二章 實(shí)驗(yàn)報(bào)告 ……………………………………………………………3 2.1實(shí)驗(yàn)名稱 …………………………………………………………………3 2.2實(shí)驗(yàn)?zāi)康?…………………………………………………………………3 2.3實(shí)驗(yàn)器材 …………………………………………………………………3 2.4實(shí)驗(yàn)原理 …………………………………………………………………3 2.5實(shí)驗(yàn)步驟 …………………………………………………………………3 2.6數(shù)據(jù)分析 …………………………………………………………………4 2.7結(jié)論 ………………………………………………………………………4 2.8誤差討論 …………………………………………………………………4 第三章 方案設(shè)計(jì)與論證………………………………………………………5 3.1移動(dòng)平臺 …………………………………………………………………5 3.2控制模塊 …………………………………………………………………5 3.3驅(qū)動(dòng)模塊 …………………………………………………………………6 3.4循跡模塊 …………………………………………………………………8 3.5穩(wěn)壓模塊 …………………………………………………………………8 第四章 程序與調(diào)試 …………………………………………………………10 4.1有關(guān)C51單片機(jī) …………………………………………………………10 4.2開發(fā)環(huán)境 …………………………………………………………………10 4.3程序框圖 …………………………………………………………………10 4.4調(diào)試過程 …………………………………………………………………10 第五章 附件 …………………………………………………………………12 5.1BF-1機(jī)器人實(shí)圖…………………………………………………………12 5.2BF-1機(jī)器人餐廳…………………………………………………………12 5.3BF-1機(jī)器人部分硬件圖…………………………………………………13 5.4BF-1機(jī)器人電路原理圖…………………………………………………14 5.5BF-1機(jī)器人程序框圖……………………………………………………16 5.6BF-1程序…………………………………………………………………17 致謝……………………………………………………………………………24 參考文獻(xiàn)………………………………………………………………………24
第一章 緒論 1.1機(jī)器人在當(dāng)今的重要性 隨著社會(huì)的發(fā)展,工業(yè)生產(chǎn)量越來越大,單單靠人來工作是不行的,機(jī)器人的出現(xiàn)從一定程度上解決了這一問題。尤其在中國,社會(huì)正在進(jìn)入老齡化,除了生產(chǎn)之外還需要有很大一部分人力來照顧老人,但是如果有機(jī)器人來替我們完成部分工作,就可以緩解社會(huì)壓力。機(jī)器人研究涉及的學(xué)科涵蓋機(jī)械、電子、傳感器、驅(qū)動(dòng)與控制等多個(gè)領(lǐng)域,過去,對機(jī)器人行業(yè)有過重大貢獻(xiàn)的人數(shù)不勝數(shù)。不過,從簡單的時(shí)間線已經(jīng)能夠看出,從第一代工業(yè)機(jī)器人、第二代帶有“感覺”的機(jī)器人到第三代智能機(jī)器人,機(jī)器人的體積越來越小,與PC結(jié)合得越來越緊密。說不定,個(gè)人機(jī)器人就快成為現(xiàn)實(shí)了。 1.2機(jī)器人的發(fā)展與現(xiàn)狀 1920年捷克斯洛伐克作家卡雷爾·恰佩克在他的科幻小說《羅薩姆的機(jī)器人萬能公司》中,根據(jù)Robota(捷克文,原意為“勞役、苦工”)和Robotnik(波蘭文,原意為“工人”),創(chuàng)造出“機(jī)器人”這個(gè)詞。之后機(jī)器在短短的幾十年間飛速發(fā)展,到今天,機(jī)器人技術(shù)在一些發(fā)達(dá)國家已經(jīng)相當(dāng)成熟。 1954年 美國人喬治·德沃爾制造出世界上第一臺可編程的機(jī)器人,并注冊了專利。這種機(jī)械手能按照不同的程序從事不同的工作,因此具有通用性和靈活性。 1968年 美國斯坦福研究所公布他們研發(fā)成功的機(jī)器人Shakey。它帶有視覺傳感器,能根據(jù)人的指令發(fā)現(xiàn)并抓取積木,不過控制它的計(jì)算機(jī)有一個(gè)房間那么大。Shakey可以算是世界第一臺智能機(jī)器人,拉開了第三代機(jī)器人研發(fā)的序幕。 1999年日本索尼公司推出犬型機(jī)器人愛寶(AIBO),當(dāng)即銷售一空,從此娛樂機(jī)器人成為目前機(jī)器人邁進(jìn)普通家庭的途徑之一。 2002年丹麥iRobot公司推出了吸塵器機(jī)器人Roomba,它能避開障礙,自動(dòng)設(shè)計(jì)行進(jìn)路線,還能在電量不足時(shí),自動(dòng)駛向充電座。Roomba是目前世界上銷量最大、最商業(yè)化的家用機(jī)器人。 2006年 6月,微軟公司推出Microsoft Robotics Studio,機(jī)器人模塊化、平臺統(tǒng)一化的趨勢越來越明顯,比爾·蓋茨預(yù)言,家用機(jī)器人很快將席卷全球。 在中國近幾年機(jī)器人研究也有所發(fā)展,但是與發(fā)達(dá)國家的技術(shù)還有相當(dāng)大的差距,機(jī)器人知識在民間的普及還不夠全面。作為當(dāng)今大學(xué)生,我們應(yīng)該學(xué)著接觸科學(xué)前沿,努力學(xué)習(xí),豐富自己的知識儲備,為我國的機(jī)器人發(fā)展做出自己的貢獻(xiàn)。 1.3我與機(jī)器人 在很小時(shí)候就喜歡看類似于《鐵臂阿童木》之類有關(guān)機(jī)器人的動(dòng)畫片,后來在電視上看到大學(xué)生機(jī)器人比賽,總幻想有一天自己也可以擁有一個(gè)屬于自己的機(jī)器人。有這個(gè)夢想很多年了,大學(xué)給我了一個(gè)接觸機(jī)器人的機(jī)會(huì),使得我可以在這方面努力。雖然距離正真意義上的機(jī)器人還有很長的路要走,但是目前的小制作還是給我在追求夢想多的道路上很大的動(dòng)力。我會(huì)堅(jiān)持自己的夢想,刻苦鉆研,使自己在這方面的道路上可以走的更遠(yuǎn)。
第二章 實(shí)驗(yàn)報(bào)告 2.1實(shí)驗(yàn)名稱 BF-1機(jī)器人的設(shè)計(jì)與制作 2.2實(shí)驗(yàn)?zāi)康?/font> 驗(yàn)證BF-1機(jī)器人的可實(shí)現(xiàn)性,學(xué)習(xí)相關(guān)的電路和編程知識,對機(jī)器人有些基本的認(rèn)識,擴(kuò)展自己的思維方式,強(qiáng)化自己的動(dòng)手能力。 2.3實(shí)驗(yàn)器材 1.主要元件列表: 序號 | 元件 | 規(guī)格 | 數(shù)量 | 備注 | 序號 | 元件 | 規(guī)格 | 數(shù)量 | 備注 | 1 | 單片機(jī) | STC89C52 | 1 |
| 21 | 三極管 | 8050 | 1 |
| 2 | 電機(jī)驅(qū)動(dòng) | L298n | 1 |
| 22 | 蜂鳴器 |
| 1 | 有源 | 3 | 電壓比較器 | Lm339 | 1 |
| 23 | 數(shù)碼管 |
| 1 | 八段一位 | 4 | 穩(wěn)壓管 | L7805CV | 1 |
| 24 | 排針 | 40P | 2 | 寬體 | 5 | 電阻1 | 220 | 4 |
| 25 | 杜邦線 | 10cm | 20 |
| 6 | 電阻2 | 330 | 12 |
| 26 | IC座1 | 14P | 1 |
| 7 | 電阻3 | 5.1k | 8 |
| 27 | IC座2 | 40P | 1 |
| 8 | 電阻4 | 10k | 2 |
| 28 | 電池盒 |
| 1 | 六節(jié)5號 | 9 | 電容1 | 30pF | 2 |
| 29 | 萬用板1 | 5*7cm | 1 |
| 10 | 電容2 | 0.1uF | 4 |
| 30 | 萬用板2 | 7*9cm | 2 |
| 11 | 電容3 | 10uF | 1 |
| 31 | 萬用板3 | 9*1cm | 1 |
| 12 | 電容4 | 100uF | 1 |
| 32 | 減速電機(jī) |
| 2 |
| 13 | 電容5 | 470uF | 1 |
| 33 | 輪子 | 6cm | 2 |
| 14 | 電位器 | 10k | 4 |
| 34 | 電機(jī)固定架 |
| 2 | 配套電機(jī) | 15 | 二極管 | IN4007 | 8 |
| 35 | 萬向輪 |
| 1 |
| 16 | 晶振 | 11.0592MHz |
|
| 36 | 銅柱1 | M3*10mm | 8 |
| 17 | 紅外對管 | TCRT5000 | 5 |
| 37 | 銅柱2 | M3*30mm | 10 |
| 18 | 自鎖開關(guān) |
| 1 |
| 38 | 螺絲 | M3*5mm |
|
| 19 | 按鍵開關(guān) |
| 5 |
| 39 | 螺母 | M3 |
|
| 20 | 發(fā)光二極管 |
| 3 |
| 40 | 排線 |
|
| 布線用 |
2.主要工具:電烙鐵、錫絲、螺絲刀、剪刀、鉗子、電鉆。 2.4實(shí)驗(yàn)原理 單芯片計(jì)算機(jī)可以像電腦一樣寫入程序發(fā)出指令。(原理圖見第五章_附件_5.4_ BF-1機(jī)器人電路原理圖。) 2.5實(shí)驗(yàn)步驟 1.在網(wǎng)上搜集相關(guān)資料,設(shè)定整個(gè)方案的大致輪廓。學(xué)習(xí)電路、單片機(jī)的基本知識,熟悉相關(guān)軟件的使用方法。 2.根據(jù)掌握的知識和BF-1要實(shí)現(xiàn)的具體功能,繪制出機(jī)器人的機(jī)械圖和原理圖。通過仿真軟件對各部分電路做出大致的評估。 3.根據(jù)制定好的圖紙完成機(jī)器人的硬件部分,包括機(jī)械和電路,對電路進(jìn)行簡單的測試,完善電路。 4.根據(jù)BF-1要實(shí)現(xiàn)的具體功能,編寫程序,反復(fù)調(diào)試,完成最終程序。 2.6數(shù)據(jù)分析 BF-1機(jī)器人最終可以在特定的環(huán)境中(第五章_附件_5.4_ BF-1機(jī)器人餐廳)完成規(guī)定動(dòng)作:在廚房放上菜后設(shè)定桌號,然后機(jī)器人將飯菜送到指定的餐桌,當(dāng)客人取下飯菜之后,機(jī)器人可以自行返回廚房。 2.7結(jié)論 實(shí)驗(yàn)驗(yàn)證了BF-1餐飲服務(wù)性機(jī)器人的可行性,對于我來說是一個(gè)小小的鼓勵(lì)。在完成整個(gè)實(shí)驗(yàn)的過程中,我學(xué)到了很多新的知識,其中在微控制原理這一方面有很大的收獲,因?yàn)橐郧皬臎]有接觸過,現(xiàn)在懂了不少。此外在機(jī)器人的制作過程中,除了熟悉Keil C51等單片機(jī)開發(fā)環(huán)境外,我還掌握了AutoCAD、Protel、Proteus等計(jì)算機(jī)軟件的基本操作,這些對以后的電路設(shè)計(jì)都是很好的基礎(chǔ)。 最主要的是在實(shí)驗(yàn)中我更加體會(huì)到了探索的樂趣,加深了我對機(jī)器人的興趣愛好,堅(jiān)定了我要繼續(xù)在這方面學(xué)習(xí)的信心。并且在探索的過程中我還認(rèn)識了很多志同道合的同學(xué),大家都有著一樣的興趣,在一起共同學(xué)習(xí)共同進(jìn)步,這是一件非常美好的事情。 但是即使對于這種簡單的機(jī)器人來說,我還有很多東西無法解決,所以以后要努力學(xué)習(xí),豐富自己的知識,為自己的夢想奮斗。 2.8誤差討論 機(jī)器人在直線處不能總是沿直線行進(jìn),偶爾會(huì)出現(xiàn)左右搖擺的情況,這可能是循跡程序不完善的因素。在整個(gè)電路中,有關(guān)電阻和電容的使用并沒有經(jīng)過精致地計(jì)算。以上幾條以我現(xiàn)在的知識水平暫且無法解決,需要以后相關(guān)知識完備后在做完善。BF-1本來裝有人體釋熱傳感器,用來防止機(jī)器人在送飯過程中撞上道路上的行人,但是在實(shí)際中此功能不能實(shí)現(xiàn),后測試發(fā)現(xiàn)是傳感器損壞,在沒有找到新的傳感器的情況下,此功能暫時(shí)去除。
第三章 方案設(shè)計(jì)與論證 3.1移動(dòng)平臺 對于BF-1機(jī)器人來說,只需要進(jìn)行簡單的前后左右移動(dòng)就可以,無需復(fù)雜的機(jī)械臂。所以在平臺的選擇上就簡單了很多。 方案一: 用四通道玩具遙控車的底盤。優(yōu)點(diǎn):容易找到,不需要太多的改造,且價(jià)格便宜。缺點(diǎn):速度不容易掌控,轉(zhuǎn)向遲鈍。 方案二: 在網(wǎng)上購買機(jī)器人專用的平臺。優(yōu)點(diǎn):容易上手,可以直接使用,各個(gè)方面相對穩(wěn)定。缺點(diǎn):價(jià)格較貴,失去了動(dòng)手制作的意義。 方案三: 使用減速電機(jī),自己制作移動(dòng)平臺。優(yōu)點(diǎn):費(fèi)用少,感受制作過程。缺點(diǎn):平臺的堅(jiān)固度和穩(wěn)定性相對較弱。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 圖3.1 減速電機(jī) 綜合以上,結(jié)合我自身的經(jīng)濟(jì)能力和知識水平,我決定采用方案三,從網(wǎng)上購買了兩個(gè)減速電機(jī),安裝在萬用板上作為機(jī)器人的移動(dòng)平臺。之所以選擇用萬用板,是因?yàn)槿f用板上容易打洞,便于電機(jī)和相關(guān)器件的安裝。 3.2控制模塊 對于BF-1機(jī)器人來說,并沒有太過復(fù)雜的程序,對控制器的CPU、RAM、ROM都沒有太高的要求,所以我采用單片機(jī)作為機(jī)器人的核心。 方案一: 直接用電壓比較器作為核心,通過比較不同傳感器的變化從而輸出高低電平控制電機(jī)驅(qū)動(dòng)模塊,達(dá)到循跡的目的。但是對于BF-1機(jī)器人來說要做到循跡行走、停止、鍵盤輸入、顯示、運(yùn)算等工作,所以沒有計(jì)算機(jī)來控制是不能實(shí)現(xiàn)的。故此方案不可行。 方案二: 選用一片CPLD(如EPM7128LC84-15)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。CPLD具有速度快、編程容易、資源豐富、開發(fā)周期短等優(yōu)點(diǎn),可利用VHDL語言進(jìn)行編寫開發(fā)。但CPLD在控制上較單片機(jī)有較大的劣勢。同時(shí),CPLD的處理速度非常快,而小車的行進(jìn)速度不可能太高,那么對系統(tǒng)處理信息的要求也就不會(huì)太高,在這一點(diǎn)上,MCU就已經(jīng)可以勝任了。若采用該方案,必將在控制上遇到許許多多不必要增加的難題。為此,我們不采用該種方案,進(jìn)而提出了第三種設(shè)想。 方案三: 采用單片機(jī)作為整個(gè)系統(tǒng)的核心,用其控制行進(jìn)中的小車,以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于實(shí)現(xiàn)小車的自動(dòng)控制,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來它的優(yōu)勢——控制簡單、方便、快捷。這樣一來,單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能及可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。因此,這種方案是一種較為理想的方案。 針對本設(shè)計(jì)特點(diǎn)——多開關(guān)量輸入的復(fù)雜程序控制系統(tǒng),需要擅長處理多開關(guān)量的標(biāo)準(zhǔn)單片機(jī),而不能用精簡I/O口和程序存儲器的小體積單片機(jī),D/A、A/D功能也不必選用。根據(jù)這些分析,我選定了C51單片機(jī)作為本設(shè)計(jì)的主控裝置,51單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對于本設(shè)計(jì)也綽綽有余,更可貴的是51單片機(jī)價(jià)格非常低廉。由于51單片機(jī)的普遍性,所以在市面很容易買到51單片機(jī)的開發(fā)板,編寫燒錄程序都相對方便。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 圖3.2 C51單片機(jī)開發(fā)板 在綜合考慮了傳感器、兩部電機(jī)的驅(qū)動(dòng)等諸多因素后,我決定采用一片單片機(jī),充分利用STC89C52單片機(jī)的資源。 3.3驅(qū)動(dòng)模塊 方案一: 采用繼電器對電動(dòng)機(jī)的開或關(guān)進(jìn)行控制,通過開關(guān)的切換對小車的速度進(jìn)行調(diào)整.此方案的優(yōu)點(diǎn)是電路較為簡單,缺點(diǎn)是繼電器的響應(yīng)時(shí)間慢,易損壞,壽命較短,可靠性不高。 方案二: 采用功率三極管作為功率放大器的輸出控制直流電機(jī)。線性型驅(qū)動(dòng)的電路結(jié)構(gòu)和原理簡單,加速能力強(qiáng),采用由達(dá)林頓管組成的 H型橋式電路(如圖3.3.1)。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 圖3.3.1 H橋式電路 方案三: 使用現(xiàn)市面上有很比較成熟的H橋集成芯片,這些芯片工作穩(wěn)定,用單片機(jī)控制達(dá)林頓管使之工作在占空比可調(diào)的開關(guān)狀態(tài)下,精確調(diào)整電動(dòng)機(jī)轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,效率非常高,集成芯片保證了簡單的實(shí)現(xiàn)轉(zhuǎn)速和方向的控制,電子管的開關(guān)速度很快,穩(wěn)定性也極強(qiáng),是一種廣泛采用的 PWM調(diào)速技術(shù)。這種調(diào)速方式有調(diào)速特性優(yōu)良、調(diào)整平滑、調(diào)速范圍廣、過載能力大,能承受頻繁的負(fù)載沖擊,還可以實(shí)現(xiàn)頻繁的無級快速啟動(dòng)、制動(dòng)和反轉(zhuǎn)等優(yōu)點(diǎn)。經(jīng)過反復(fù)地比較,我選用了L298n(如圖3.3.2)。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg 圖3.3.2 L298n 3.4 循跡模塊 方案一: 采用簡易光敏電阻結(jié)合外圍電路探測,但實(shí)際效果并不理想,對行駛過程中的穩(wěn)定性要求很高,且誤測幾率較大、易受光線環(huán)境和路面介質(zhì)影響。在使用過程極易出現(xiàn)問題,而且容易因?yàn)樵摬考斐烧麄(gè)系統(tǒng)的不穩(wěn)定。故最終未采用該方案。 方案二: 采用四只紅外對管(如圖3.4),分別置于機(jī)器人車身前軌道的兩側(cè),根據(jù)四只光電開關(guān)接受到白線與黑線的情況來控制小車轉(zhuǎn)向來調(diào)整車向,測試表明,只要合理安裝好,只用中間的兩只光電開關(guān)就可以很好的實(shí)現(xiàn)循跡的功能。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg 圖3.4 紅外對管
方案三: 用激光傳感器來循跡。外界環(huán)境的影響對激光傳感器干擾很小,并且通過單片機(jī)來分時(shí)點(diǎn)亮激光管,可以實(shí)現(xiàn)多個(gè)激光發(fā)射管對一個(gè)激光接收管。但是激光管在安裝過程中要求較高,一旦遇到靜電就容易衰減。并且激光發(fā)射管和激光接收管相對與紅外對管是非常昂貴的。 綜合利弊,我最終選用第二種方案。用LM399作為電壓比較器,將采集到模擬信號轉(zhuǎn)換為數(shù)字信號,直接供單片機(jī)的I/O口。 3.5穩(wěn)壓模塊 BF-1機(jī)器人的控制板需要5V的電壓為單片機(jī)供電,但是由于L298N降壓嚴(yán)重,所以5V電壓對于電機(jī)驅(qū)動(dòng)模塊是不行的,至少需要7V左右的電壓才能保證電機(jī)可以接收到5V的工作電壓。 方案一: 用6節(jié)充電鎳氫電池(電壓1.2V)串聯(lián),前四節(jié)引出兩根導(dǎo)線(電壓4.8V)為控制模塊和循跡模塊供電,總電池組兩端接兩根導(dǎo)線(電壓7.2V)為電機(jī)驅(qū)動(dòng)模塊供電。但是在電池的飽和狀態(tài)和過放狀態(tài)之間,電池的電壓變化較大,對于需要穩(wěn)定電壓來工作的單片機(jī)來說,此方案不能達(dá)到要求。 方案二: 用6節(jié)充電鎳氫電池(電壓1.2V)串聯(lián)成7.2V的電池組,直接為電機(jī)驅(qū)動(dòng)模塊供電。用三個(gè)二極管串聯(lián),將電壓將至5.1V為控制模塊和循跡模塊供電。此方案與方案一有著相同的弊端,隨著電池電量的改變,加壓后的電壓波動(dòng)較大。所以我放棄此方案。 方案三: 用6節(jié)充電鎳氫電池(電壓1.2V)串聯(lián)成7.2V的電池組,直接為電機(jī)驅(qū)動(dòng)模塊供電。采用L7805穩(wěn)壓元件將7.2V電壓降壓到5V為控制模塊和循跡模塊供電。穩(wěn)壓電路很簡單,轉(zhuǎn)換后的電壓比較穩(wěn)定,并且L7805的價(jià)格也不算貴,所以我采用此方案。
第四章 程序與調(diào)試 4.1有關(guān)C51單片機(jī) 在BF-1機(jī)器人中使用的是STC89C52單片機(jī)。STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg 圖4.1 單片機(jī) 4.2開發(fā)環(huán)境 在程序的編寫中有匯編語言和C語言,C語言相對于匯編語言更容易理解,門檻低,容易學(xué)習(xí)。所以我選擇用C語言來編寫B(tài)F-1的程序。 Keil C51軟件是目前功能最強(qiáng)大的單片機(jī)C語言集成開發(fā)環(huán)境(圖4.2)。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg 圖4.2 Keil C51界面 4.3程序框圖 因?yàn)闄C(jī)器要完成將飯菜送達(dá)指定的餐桌,所以在機(jī)器人運(yùn)行之后首先要有先有鍵盤輸入相應(yīng)的桌號,當(dāng)BF-1接到接到命令后就會(huì)根據(jù)指定將飯菜送到指定位置,在送飯的過程中,機(jī)器人要做到沿指定路線行進(jìn)(即循跡),還要通過計(jì)算判斷是否到達(dá)指定餐桌。當(dāng)?shù)搅瞬妥篮螅绻腿藢埐硕讼轮螅瑱C(jī)器人還要在返回廚房,等待下一次命令。(詳細(xì)程序見第五章_附件_5.5_程序框圖。) 4.4調(diào)試過程 在機(jī)器人的機(jī)械調(diào)試過程中,本來我是打算將BF-1的底盤制作成思路驅(qū)動(dòng)的,因?yàn)樵谖覀兊挠∠笾兴膫(gè)輪子的車子比較常見,當(dāng)然四個(gè)個(gè)輪子的穩(wěn)定性也要好些。但是在實(shí)際的制作中我發(fā)現(xiàn)四輪驅(qū)動(dòng)的底盤并不好控制,尤其是在轉(zhuǎn)彎時(shí),四輪底盤的會(huì)顯得很遲鈍。后來我改用兩個(gè)驅(qū)動(dòng)輪加一個(gè)萬向輪作為小車的底盤,(詳細(xì)視圖見第五章_附件_5.3.1_移動(dòng)平臺),靠后面兩個(gè)輪子的速度差轉(zhuǎn)向。在這樣的情況下,移動(dòng)平臺的靈活性增強(qiáng)很多,可以實(shí)現(xiàn)原地任意角度轉(zhuǎn)向。 機(jī)器人的電路調(diào)試中過程中并沒有遇到太多問題,因?yàn)槲沂孪人鸭^大量有關(guān)電路,做了一定分析和篩選之后繪制了BF-1的原理圖,并且在焊接板子之前做好了PCB圖,重要部分也做過Porteus仿真。所以在整個(gè)過程中僅僅是遇到了兩個(gè)問題。第一個(gè)問題是我先前在每一個(gè)模塊的電路的電源處都接了一個(gè)整流二極管來防止電源反接對電路造成危害,但是后來發(fā)現(xiàn)控制模塊和循跡模塊的電壓都偏低。經(jīng)過檢查才發(fā)現(xiàn),原來經(jīng)過7805穩(wěn)壓后的電壓已經(jīng)是5V了,在經(jīng)過二極管時(shí)會(huì)有0.7V的壓降。為此我將各模塊的整流二極管除去,將防止反接電路提至穩(wěn)壓管之前,這樣就既保證了各模塊電路不會(huì)受到電源反接的危害,又保證了整個(gè)系統(tǒng)電壓的穩(wěn)定。第二個(gè)問題就是濾波電容位置,我先前實(shí)在控制板的電源排陣附近安裝了104電容,但事實(shí)上系統(tǒng)在運(yùn)行中偶爾還會(huì)因?yàn)楦哳l干擾出錯(cuò)。查了相關(guān)資料后,我將104電容接在MCU的VCC管腳附近,有效的解決了這一問題。 由于剛接觸嵌入式不久,所在程序調(diào)試中遇到不少問題。就鍵盤檢測而言,進(jìn)入檢測的雙重循環(huán)以后開始設(shè)置桌號,但是卻不知道如何再跳出這雙重循環(huán)進(jìn)行下一步操作。在和學(xué)長的共同討論后,我們決定采用一個(gè)For循環(huán)定義變量a,在內(nèi)部循環(huán)中一旦a被賦值就用Braek語句跳出,在外部循環(huán)中a值改變打破For循環(huán)條件,故自然跳出外圍循環(huán)。還有就是在桌號檢測的程序中,為了能使機(jī)器人準(zhǔn)確地判斷桌號,我用了檢測后延時(shí)再檢測來防止誤檢,但是延時(shí)的時(shí)間長度就是一個(gè)難題了,短了會(huì)重復(fù)檢測同一桌號,長了會(huì)丟掉桌號。經(jīng)過反復(fù)地調(diào)試,最終確定下來的延時(shí)時(shí)間能使桌號檢測的準(zhǔn)確率達(dá)到80%,這是因?yàn)闄C(jī)器人在行進(jìn)的過程中速度并不是恒定。后來我將程序改為檢測后延時(shí)檢測,確定檢測到桌子之后再延時(shí)走過這個(gè)桌號,這樣的程序就相對穩(wěn)定很多,基本不會(huì)出現(xiàn)桌號判斷失誤的可能。(詳細(xì)程序見第五章_附件_5.6_BF-1程序。)
第五章 附件 5.1 BF-1機(jī)器人實(shí)圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg 5.2 BF-1機(jī)器人餐廳 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg 5.3 BF-1機(jī)器人部分硬件圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg 5.3.1 移動(dòng)平臺 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg 5.3.2電機(jī)驅(qū)動(dòng)模塊 5.4 BF-1機(jī)器人電路原理圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg 5.4.1 控制模塊 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg 5.4.2 循跡模塊
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg 5.4.3 驅(qū)動(dòng)模塊
5.5 BF-1機(jī)器人程序框圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image029.gif
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image030.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image031.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image032.gif
5.6 BF-1程序 - /******BF-1機(jī)器人程序******/
- /******河南工業(yè)大學(xué)***電氣學(xué)院***周偉偉******/
- /******頭文件******/
- #include<reg51.h>//BF-1的單片機(jī)是STC89C51
- /******宏定義******/
- #define uint unsigned int//宏定義
- #define uchar unsigned char//宏定義
- #define shumaguan P0//數(shù)碼管
- /******硬件連接定義******/
- sbit buzz=P2^0;//蜂鳴器
- sbit ma0=P2^2;//電機(jī)A控制口
- sbit ma1=P2^3;//電機(jī)A控制1
- sbit ma2=P2^4;//電機(jī)A控制2
- sbit mb0=P2^5;//電機(jī)B控制口
- sbit mb1=P2^6;//電機(jī)B控制1
- sbit mb2=P2^7;//電機(jī)B控制2
- sbit key1=P1^0;//設(shè)置按鍵
- sbit key2=P1^1;//+按鍵
- sbit key3=P1^2;//-按鍵
- sbit key4=P1^3;//確定按鍵
- sbit zhongli=P1^7;//重力傳感器
- sbit hw1=P3^0;//紅外傳感1
- sbit hw2=P3^1;//紅外傳感2
- sbit hw3=P3^2;//紅外傳感3
- sbit hw4=P3^3;//紅外傳感4
- sbit shire=P3^7;//人體釋熱傳感器
- /******全局變量******/
- uchar circs,n,t,num,s;
- /******電機(jī)A控制函數(shù)******/
- void go_ma()//電機(jī)A前進(jìn)
- {
- ma0=1;
- ma1=1;
- ma2=0;
- }
- void back_ma()//電機(jī)A后退
- {
- ma0=1;
- ma1=1;
- ma2=0;
- }
- void stop_ma()//電機(jī)A停止
- {
- ma0=1;
- ma1=0;
- ma2=0;
- }
- /*****電機(jī)B控制函數(shù)******/
- void go_mb()//電機(jī)B前進(jìn)
- {
- mb0=1;
- mb1=1;
- mb2=0;
- }
- void back_mb()//電機(jī)B后退
- {
- mb0=1;
- mb1=1;
- mb2=0;
- }
- void stop_mb()//電機(jī)B停止
- {
- mb0=1;
- mb1=0;
- mb2=0;
- }
- /******BF-1機(jī)器人運(yùn)動(dòng)函數(shù)*******/
- void advance()//BF-1機(jī)器人前進(jìn)
- {
- go_ma();
- go_mb();
- }
- void back()//BF-1機(jī)器人后退
- {
- back_ma();
- back_mb();
- }
- void left_turn()//BF-1機(jī)器人左轉(zhuǎn)
- {
- stop_ma();
- go_mb();
- }
- void right_turn()//BF-1機(jī)器人右轉(zhuǎn)
- {
- go_ma();
- stop_mb();
- }
- void stop()//BF-1機(jī)器人停止
- {
- stop_ma();
- stop_mb();
- }
- /******BF-1機(jī)器人設(shè)備服務(wù)函數(shù)******/
- void delayms(uint xms)//延時(shí)函數(shù)
- {
- uinti,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar y)//數(shù)碼管顯示
- {
- ucharcode table[]={
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e};
- shumaguan=table[y];
- }
- void alarm()//蜂鳴器報(bào)警
- {
- buzz=0;
- delayms(500);
- buzz=1;
- delayms(500);
- }
- /******BF-1機(jī)器人鍵盤檢測函數(shù)******/
- void key_scan()//鍵盤檢測
- {
- for(n=100;n==100;)//進(jìn)入鍵盤檢測循環(huán)
- {
- if(key1==0)//設(shè)置按鍵
- {
- delayms(10);
- if(key1==0)
- {
- while(1)
- {
- display(num);
- if(key2==0)//按鍵+
- {
- delayms(10);
- if(key2==0)
- num++;
- if(num==10)
- num=0;
- while(!key2);
- }
- if(key3==0)//按鍵-
- {
- delayms(10);
- if(key3==0)
- num--;
- if(num==-1)
- num=9;
- while(!key3);
- }
- if(key4==0)//確定按鍵
- {
- delayms(10);
- if(key4==0)
- n=num;//賦n值
- while(!key4);
- break;//跳出檢測
- }
- }
- }
- }
- }
- }
- /******BF-1機(jī)器人紅外檢測函數(shù)******/
- void hw_scan()//紅外檢測
- {
- if(hw2==1&&hw3==1)//直線
- circs=1;
- if(hw2==1&&hw3==0)//偏左
- circs=2;
- if(hw2==0&&hw3==1)//偏右
- circs=3;
- if(hw2==0&&hw3==0)//壓線
- circs=4;
- if((hw2==0&&hw3==0)&&(hw1==0&&hw4==0))//飯桌
- {
- advance();
- delayms(40);
- if((hw2==0&&hw3==0)&&(hw1==0&&hw4==0))
- {
- advance();
- n--;
- t++;
- if(t==10)
- t=0;
- advance();
- delayms(60);
- while((hw2==1&&hw3==1)&&(hw1==1&&hw4==1));
- }
- }//桌號檢測分析
- }
- void hw_circs()//檢測分析
- {
- switch(circs)
- {
- case 1:
- s=1;
- break;
- case 2:
- s=2;
- break;
- case 3:
- s=3;
- break;
- case 4:
- s=4;
- break;
- }
- }
- /******BF-1機(jī)器人驅(qū)動(dòng)函數(shù)******/
- void drive()
- {
- if(s==1)//前進(jìn)
- {
- advance();
- delayms(15);
- }
- if(s==2)//左轉(zhuǎn)
- {
- left_turn();
- delayms(15);
- }
- if(s==3)//右轉(zhuǎn)
- {
- right_turn();
- delayms(15);
- }
- if(s==4)//停止
- {
- stop();
- delayms(15);
- }
- if(s==5)//停止并警報(bào)
- {
- stop();
- delayms(15);
- alarm();
- }
- }
- /******BF-1機(jī)器人主函數(shù)******/
- void main()//主函數(shù)
- {
- while(1)
- {
- num=0;
- key_scan();
- delayms(1000);
- while(1)
- {
- ma1=1;ma2=1;mb2=1;mb2=1;//檢測清零
- hw_scan();//傳感器檢測
- hw_circs();//檢測分析
- drive();//BF_1機(jī)器人驅(qū)動(dòng)
- display(t);//顯示狀態(tài)
- if(n==0)
- break;
- }
- alarm();
- alarm();
- while(1)
- {
- if(key1==0)//返回設(shè)置
- {
- delayms(10);
- if(key1==0)
- break;
- }
- }
- while(1)//返回廚房
- {
- ma1=1;ma2=1;mb2=1;mb2=1;//檢測清零
- hw_scan();//傳感器檢測
- hw_circs();//檢測分析
- drive();//BF_1機(jī)器人驅(qū)動(dòng)
- display(t);//顯示狀態(tài)
- if(t==0)
- break;
- }
- alarm();
- }
- }
復(fù)制代碼
致謝 本設(shè)計(jì)能夠順利完成,還承蒙各位學(xué)長的關(guān)心。在單片機(jī)的學(xué)習(xí)中,還有在BF-1的程序編寫調(diào)試過程中,正是得到了幾位學(xué)長的幫助,才大大的縮短了機(jī)器人的制作的時(shí)間,這里就不再一一介紹。在制作電路階段,電子科技協(xié)會(huì)為我提供了制作BF-1的實(shí)驗(yàn)室,我才能有合適的環(huán)境去專心完成相關(guān)工作。在此,我對電子科技協(xié)會(huì)表示最真摯的感謝!同時(shí)感謝所有幫助過我的同學(xué)! 參考文獻(xiàn) [4]郭天祥.51單片機(jī)C語言教程.電子工業(yè)出版社.2009 [5]陳永甫.常用電子元件及其應(yīng)用.人民郵電出版社.2005 [6]DavidCook[美].機(jī)器人制作.2005 [7]韋琳.模擬電路科學(xué)出版社.2006 [8]劉勇數(shù).字電路電子工業(yè)出版社.1992 [9]劉秋艷.Protel 99se電路設(shè)計(jì)中國鐵道出版社.2005 [10]周潤景.等Proteus在MCS-51&ARM7系統(tǒng)中的應(yīng)用百例.2006
|