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