久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2386|回復: 1
收起左側(cè)

智能循跡車制作方法詳解

[復制鏈接]
ID:296405 發(fā)表于 2018-3-26 16:15 | 顯示全部樓層 |閱讀模式
智能循跡車制作方法詳解1



院系名稱
專業(yè)班級
學生姓名
協(xié)

目   錄
目錄……………………………………………………………………………1
第一章 緒論 …………………………………………………………………2
1.1機器人在當今的重要性 …………………………………………………2
1.2機器人的發(fā)展與現(xiàn)狀 ……………………………………………………2
1.3我與機器人 ………………………………………………………………2
第二章 實驗報告 ……………………………………………………………3
2.1實驗名稱 …………………………………………………………………3
2.2實驗目的 …………………………………………………………………3
2.3實驗器材 …………………………………………………………………3
2.4實驗原理 …………………………………………………………………3
2.5實驗步驟 …………………………………………………………………3
2.6數(shù)據(jù)分析 …………………………………………………………………4
2.7結(jié)論 ………………………………………………………………………4
2.8誤差討論 …………………………………………………………………4
第三章 方案設計與論證………………………………………………………5
3.1移動平臺 …………………………………………………………………5
3.2控制模塊 …………………………………………………………………5
3.3驅(qū)動模塊 …………………………………………………………………6
3.4循跡模塊 …………………………………………………………………8
3.5穩(wěn)壓模塊 …………………………………………………………………8
第四章 程序與調(diào)試 …………………………………………………………10
4.1有關(guān)C51單片機 …………………………………………………………10
4.2開發(fā)環(huán)境 …………………………………………………………………10
4.3程序框圖 …………………………………………………………………10
4.4調(diào)試過程 …………………………………………………………………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機器人在當今的重要性
       隨著社會的發(fā)展,工業(yè)生產(chǎn)量越來越大,單單靠人來工作是不行的,機器人的出現(xiàn)從一定程度上解決了這一問題。尤其在中國,社會正在進入老齡化,除了生產(chǎn)之外還需要有很大一部分人力來照顧老人,但是如果有機器人來替我們完成部分工作,就可以緩解社會壓力。機器人研究涉及的學科涵蓋機械、電子、傳感器、驅(qū)動與控制等多個領(lǐng)域,過去,對機器人行業(yè)有過重大貢獻的人數(shù)不勝數(shù)。不過,從簡單的時間線已經(jīng)能夠看出,從第一代工業(yè)機器人、第二代帶有“感覺”的機器人到第三代智能機器人,機器人的體積越來越小,與PC結(jié)合得越來越緊密。說不定,個人機器人就快成為現(xiàn)實了。
1.2機器人的發(fā)展與現(xiàn)狀
   1920年捷克斯洛伐克作家卡雷爾·恰佩克在他的科幻小說《羅薩姆的機器人萬能公司》中,根據(jù)Robota(捷克文,原意為“勞役、苦工”)和Robotnik(波蘭文,原意為“工人”),創(chuàng)造出“機器人”這個詞。之后機器在短短的幾十年間飛速發(fā)展,到今天,機器人技術(shù)在一些發(fā)達國家已經(jīng)相當成熟。
1954年 美國人喬治·德沃爾制造出世界上第一臺可編程的機器人,并注冊了專利。這種機械手能按照不同的程序從事不同的工作,因此具有通用性和靈活性。
1968年 美國斯坦福研究所公布他們研發(fā)成功的機器人Shakey。它帶有視覺傳感器,能根據(jù)人的指令發(fā)現(xiàn)并抓取積木,不過控制它的計算機有一個房間那么大。Shakey可以算是世界第一臺智能機器人,拉開了第三代機器人研發(fā)的序幕。
1999年日本索尼公司推出犬型機器人愛寶(AIBO),當即銷售一空,從此娛樂機器人成為目前機器人邁進普通家庭的途徑之一。
2002年丹麥iRobot公司推出了吸塵器機器人Roomba,它能避開障礙,自動設計行進路線,還能在電量不足時,自動駛向充電座。Roomba是目前世界上銷量最大、最商業(yè)化的家用機器人。
2006年 6月,微軟公司推出Microsoft Robotics Studio,機器人模塊化、平臺統(tǒng)一化的趨勢越來越明顯,比爾·蓋茨預言,家用機器人很快將席卷全球。
       在中國近幾年機器人研究也有所發(fā)展,但是與發(fā)達國家的技術(shù)還有相當大的差距,機器人知識在民間的普及還不夠全面。作為當今大學生,我們應該學著接觸科學前沿,努力學習,豐富自己的知識儲備,為我國的機器人發(fā)展做出自己的貢獻。
1.3我與機器人
在很小時候就喜歡看類似于《鐵臂阿童木》之類有關(guān)機器人的動畫片,后來在電視上看到大學生機器人比賽,總幻想有一天自己也可以擁有一個屬于自己的機器人。有這個夢想很多年了,大學給我了一個接觸機器人的機會,使得我可以在這方面努力。雖然距離正真意義上的機器人還有很長的路要走,但是目前的小制作還是給我在追求夢想多的道路上很大的動力。我會堅持自己的夢想,刻苦鉆研,使自己在這方面的道路上可以走的更遠。

第二章    實驗報告
2.1實驗名稱
    BF-1機器人的設計與制作
2.2實驗目的
    驗證BF-1機器人的可實現(xiàn)性,學習相關(guān)的電路和編程知識,對機器人有些基本的認識,擴展自己的思維方式,強化自己的動手能力。
2.3實驗器材
1.主要元件列表:
  
序號
  
  
元件
  
  
規(guī)格
  
  
數(shù)量
  
  
備注
  
  
序號
  
  
元件
  
  
規(guī)格
  
  
數(shù)量
  
  
備注
  
  
1
  
  
單片機
  
  
STC89C52
  
  
1
  
  
  
  
21
  
  
三極管
  
  
8050
  
  
1
  
  
  
  
2
  
  
電機驅(qū)動
  
  
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
  
  
減速電機
  
  
  
  
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
  
  
自鎖開關(guān)
  
  
  
  
1
  
  
  
  
38
  
  
螺絲
  
  
M3*5mm
  
  
  
  
  
  
19
  
  
按鍵開關(guān)
  
  
  
  
5
  
  
  
  
39
  
  
螺母
  
  
M3
  
  
  
  
  
  
20
  
  
發(fā)光二極管
  
  
  
  
3
  
  
  
  
40
  
  
排線
  
  
  
  
  
  
布線用
  
2.主要工具:電烙鐵、錫絲、螺絲刀、剪刀、鉗子、電鉆。
2.4實驗原理
   單芯片計算機可以像電腦一樣寫入程序發(fā)出指令。(原理圖見第五章_附件_5.4_ BF-1機器人電路原理圖。)
2.5實驗步驟
    1.在網(wǎng)上搜集相關(guān)資料,設定整個方案的大致輪廓。學習電路、單片機的基本知識,熟悉相關(guān)軟件的使用方法。
    2.根據(jù)掌握的知識和BF-1要實現(xiàn)的具體功能,繪制出機器人的機械圖和原理圖。通過仿真軟件對各部分電路做出大致的評估。
    3.根據(jù)制定好的圖紙完成機器人的硬件部分,包括機械和電路,對電路進行簡單的測試,完善電路。
    4.根據(jù)BF-1要實現(xiàn)的具體功能,編寫程序,反復調(diào)試,完成最終程序。
2.6數(shù)據(jù)分析
    BF-1機器人最終可以在特定的環(huán)境中(第五章_附件_5.4_ BF-1機器人餐廳)完成規(guī)定動作:在廚房放上菜后設定桌號,然后機器人將飯菜送到指定的餐桌,當客人取下飯菜之后,機器人可以自行返回廚房。
2.7結(jié)論
    實驗驗證了BF-1餐飲服務性機器人的可行性,對于我來說是一個小小的鼓勵。在完成整個實驗的過程中,我學到了很多新的知識,其中在微控制原理這一方面有很大的收獲,因為以前從沒有接觸過,現(xiàn)在懂了不少。此外在機器人的制作過程中,除了熟悉Keil C51等單片機開發(fā)環(huán)境外,我還掌握了AutoCAD、Protel、Proteus等計算機軟件的基本操作,這些對以后的電路設計都是很好的基礎。
    最主要的是在實驗中我更加體會到了探索的樂趣,加深了我對機器人的興趣愛好,堅定了我要繼續(xù)在這方面學習的信心。并且在探索的過程中我還認識了很多志同道合的同學,大家都有著一樣的興趣,在一起共同學習共同進步,這是一件非常美好的事情。
    但是即使對于這種簡單的機器人來說,我還有很多東西無法解決,所以以后要努力學習,豐富自己的知識,為自己的夢想奮斗。
2.8誤差討論
    機器人在直線處不能總是沿直線行進,偶爾會出現(xiàn)左右搖擺的情況,這可能是循跡程序不完善的因素。在整個電路中,有關(guān)電阻和電容的使用并沒有經(jīng)過精致地計算。以上幾條以我現(xiàn)在的知識水平暫且無法解決,需要以后相關(guān)知識完備后在做完善。BF-1本來裝有人體釋熱傳感器,用來防止機器人在送飯過程中撞上道路上的行人,但是在實際中此功能不能實現(xiàn),后測試發(fā)現(xiàn)是傳感器損壞,在沒有找到新的傳感器的情況下,此功能暫時去除。

第三章    方案設計與論證
3.1移動平臺
       對于BF-1機器人來說,只需要進行簡單的前后左右移動就可以,無需復雜的機械臂。所以在平臺的選擇上就簡單了很多。
方案一:
用四通道玩具遙控車的底盤。優(yōu)點:容易找到,不需要太多的改造,且價格便宜。缺點:速度不容易掌控,轉(zhuǎn)向遲鈍。
方案二:
在網(wǎng)上購買機器人專用的平臺。優(yōu)點:容易上手,可以直接使用,各個方面相對穩(wěn)定。缺點:價格較貴,失去了動手制作的意義。
方案三:
使用減速電機,自己制作移動平臺。優(yōu)點:費用少,感受制作過程。缺點:平臺的堅固度和穩(wěn)定性相對較弱。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
圖3.1 減速電機
綜合以上,結(jié)合我自身的經(jīng)濟能力和知識水平,我決定采用方案三,從網(wǎng)上購買了兩個減速電機,安裝在萬用板上作為機器人的移動平臺。之所以選擇用萬用板,是因為萬用板上容易打洞,便于電機和相關(guān)器件的安裝。
3.2控制模塊
對于BF-1機器人來說,并沒有太過復雜的程序,對控制器的CPU、RAM、ROM都沒有太高的要求,所以我采用單片機作為機器人的核心。
方案一:
直接用電壓比較器作為核心,通過比較不同傳感器的變化從而輸出高低電平控制電機驅(qū)動模塊,達到循跡的目的。但是對于BF-1機器人來說要做到循跡行走、停止、鍵盤輸入、顯示、運算等工作,所以沒有計算機來控制是不能實現(xiàn)的。故此方案不可行。
方案二:
選用一片CPLD(如EPM7128LC84-15)作為系統(tǒng)的核心部件,實現(xiàn)控制與處理的功能。CPLD具有速度快、編程容易、資源豐富、開發(fā)周期短等優(yōu)點,可利用VHDL語言進行編寫開發(fā)。但CPLD在控制上較單片機有較大的劣勢。同時,CPLD的處理速度非常快,而小車的行進速度不可能太高,那么對系統(tǒng)處理信息的要求也就不會太高,在這一點上,MCU就已經(jīng)可以勝任了。若采用該方案,必將在控制上遇到許許多多不必要增加的難題。為此,我們不采用該種方案,進而提出了第三種設想。
方案三:
采用單片機作為整個系統(tǒng)的核心,用其控制行進中的小車,以實現(xiàn)其既定的性能指標。充分分析我們的系統(tǒng),其關(guān)鍵在于實現(xiàn)小車的自動控制,而在這一點上,單片機就顯現(xiàn)出來它的優(yōu)勢——控制簡單、方便、快捷。這樣一來,單片機就可以充分發(fā)揮其資源豐富、有較為強大的控制功能及可位尋址操作功能、價格低廉等優(yōu)點。因此,這種方案是一種較為理想的方案。
針對本設計特點——多開關(guān)量輸入的復雜程序控制系統(tǒng),需要擅長處理多開關(guān)量的標準單片機,而不能用精簡I/O口和程序存儲器的小體積單片機,D/A、A/D功能也不必選用。根據(jù)這些分析,我選定了C51單片機作為本設計的主控裝置,51單片機具有功能強大的位操作指令,I/O口均可按位尋址,程序空間多達8K,對于本設計也綽綽有余,更可貴的是51單片機價格非常低廉。由于51單片機的普遍性,所以在市面很容易買到51單片機的開發(fā)板,編寫燒錄程序都相對方便。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
3.2 C51單片機開發(fā)板
在綜合考慮了傳感器、兩部電機的驅(qū)動等諸多因素后,我決定采用一片單片機,充分利用STC89C52單片機的資源。
3.3驅(qū)動模塊
方案一:
采用繼電器對電動機的開或關(guān)進行控制,通過開關(guān)的切換對小車的速度進行調(diào)整.此方案的優(yōu)點是電路較為簡單,缺點是繼電器的響應時間慢,易損壞,壽命較短,可靠性不高。
方案二:
采用功率三極管作為功率放大器的輸出控制直流電機。線性型驅(qū)動的電路結(jié)構(gòu)和原理簡單,加速能力強,采用由達林頓管組成的 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)定,用單片機控制達林頓管使之工作在占空比可調(diào)的開關(guān)狀態(tài)下,精確調(diào)整電動機轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,效率非常高,集成芯片保證了簡單的實現(xiàn)轉(zhuǎn)速和方向的控制,電子管的開關(guān)速度很快,穩(wěn)定性也極強,是一種廣泛采用的 PWM調(diào)速技術(shù)。這種調(diào)速方式有調(diào)速特性優(yōu)良、調(diào)整平滑、調(diào)速范圍廣、過載能力大,能承受頻繁的負載沖擊,還可以實現(xiàn)頻繁的無級快速啟動、制動和反轉(zhuǎn)等優(yōu)點。經(jīng)過反復地比較,我選用了L298n(如圖3.3.2)。

file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
圖3.3.2 L298n
3.4 循跡模塊
方案一:
采用簡易光敏電阻結(jié)合外圍電路探測,但實際效果并不理想,對行駛過程中的穩(wěn)定性要求很高,且誤測幾率較大、易受光線環(huán)境和路面介質(zhì)影響。在使用過程極易出現(xiàn)問題,而且容易因為該部件造成整個系統(tǒng)的不穩(wěn)定。故最終未采用該方案。
方案二:
采用四只紅外對管(如圖3.4),分別置于機器人車身前軌道的兩側(cè),根據(jù)四只光電開關(guān)接受到白線與黑線的情況來控制小車轉(zhuǎn)向來調(diào)整車向,測試表明,只要合理安裝好,只用中間的兩只光電開關(guān)就可以很好的實現(xiàn)循跡的功能。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
圖3.4 紅外對管

方案三:
       用激光傳感器來循跡。外界環(huán)境的影響對激光傳感器干擾很小,并且通過單片機來分時點亮激光管,可以實現(xiàn)多個激光發(fā)射管對一個激光接收管。但是激光管在安裝過程中要求較高,一旦遇到靜電就容易衰減。并且激光發(fā)射管和激光接收管相對與紅外對管是非常昂貴的。
綜合利弊,我最終選用第二種方案。用LM399作為電壓比較器,將采集到模擬信號轉(zhuǎn)換為數(shù)字信號,直接供單片機的I/O口。
3.5穩(wěn)壓模塊
       BF-1機器人的控制板需要5V的電壓為單片機供電,但是由于L298N降壓嚴重,所以5V電壓對于電機驅(qū)動模塊是不行的,至少需要7V左右的電壓才能保證電機可以接收到5V的工作電壓。
方案一:
       6節(jié)充電鎳氫電池(電壓1.2V)串聯(lián),前四節(jié)引出兩根導線(電壓4.8V)為控制模塊和循跡模塊供電,總電池組兩端接兩根導線(電壓7.2V)為電機驅(qū)動模塊供電。但是在電池的飽和狀態(tài)和過放狀態(tài)之間,電池的電壓變化較大,對于需要穩(wěn)定電壓來工作的單片機來說,此方案不能達到要求。
方案二:
       6節(jié)充電鎳氫電池(電壓1.2V)串聯(lián)成7.2V的電池組,直接為電機驅(qū)動模塊供電。用三個二極管串聯(lián),將電壓將至5.1V為控制模塊和循跡模塊供電。此方案與方案一有著相同的弊端,隨著電池電量的改變,加壓后的電壓波動較大。所以我放棄此方案。
方案三:
       6節(jié)充電鎳氫電池(電壓1.2V)串聯(lián)成7.2V的電池組,直接為電機驅(qū)動模塊供電。采用L7805穩(wěn)壓元件將7.2V電壓降壓到5V為控制模塊和循跡模塊供電。穩(wěn)壓電路很簡單,轉(zhuǎn)換后的電壓比較穩(wěn)定,并且L7805的價格也不算貴,所以我采用此方案。

第四章    程序與調(diào)試
4.1有關(guān)C51單片機
       BF-1機器人中使用的是STC89C52單片機。STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式?臻e模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg
4.1 單片機
4.2開發(fā)環(huán)境
在程序的編寫中有匯編語言和C語言,C語言相對于匯編語言更容易理解,門檻低,容易學習。所以我選擇用C語言來編寫B(tài)F-1的程序。
Keil C51軟件是目前功能最強大的單片機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程序框圖
       因為機器要完成將飯菜送達指定的餐桌,所以在機器人運行之后首先要有先有鍵盤輸入相應的桌號,當BF-1接到接到命令后就會根據(jù)指定將飯菜送到指定位置,在送飯的過程中,機器人要做到沿指定路線行進(即循跡),還要通過計算判斷是否到達指定餐桌。當?shù)搅瞬妥篮螅绻腿藢埐硕讼轮螅瑱C器人還要在返回廚房,等待下一次命令。(詳細程序見第五章_附件_5.5_程序框圖。)
4.4調(diào)試過程
       在機器人的機械調(diào)試過程中,本來我是打算將BF-1的底盤制作成思路驅(qū)動的,因為在我們的印象中四個輪子的車子比較常見,當然四個個輪子的穩(wěn)定性也要好些。但是在實際的制作中我發(fā)現(xiàn)四輪驅(qū)動的底盤并不好控制,尤其是在轉(zhuǎn)彎時,四輪底盤的會顯得很遲鈍。后來我改用兩個驅(qū)動輪加一個萬向輪作為小車的底盤,(詳細視圖見第五章_附件_5.3.1_移動平臺),靠后面兩個輪子的速度差轉(zhuǎn)向。在這樣的情況下,移動平臺的靈活性增強很多,可以實現(xiàn)原地任意角度轉(zhuǎn)向。
       機器人的電路調(diào)試中過程中并沒有遇到太多問題,因為我事先搜集過大量有關(guān)電路,做了一定分析和篩選之后繪制了BF-1的原理圖,并且在焊接板子之前做好了PCB圖,重要部分也做過Porteus仿真。所以在整個過程中僅僅是遇到了兩個問題。第一個問題是我先前在每一個模塊的電路的電源處都接了一個整流二極管來防止電源反接對電路造成危害,但是后來發(fā)現(xiàn)控制模塊和循跡模塊的電壓都偏低。經(jīng)過檢查才發(fā)現(xiàn),原來經(jīng)過7805穩(wěn)壓后的電壓已經(jīng)是5V了,在經(jīng)過二極管時會有0.7V的壓降。為此我將各模塊的整流二極管除去,將防止反接電路提至穩(wěn)壓管之前,這樣就既保證了各模塊電路不會受到電源反接的危害,又保證了整個系統(tǒng)電壓的穩(wěn)定。第二個問題就是濾波電容位置,我先前實在控制板的電源排陣附近安裝了104電容,但事實上系統(tǒng)在運行中偶爾還會因為高頻干擾出錯。查了相關(guān)資料后,我將104電容接在MCUVCC管腳附近,有效的解決了這一問題。
       由于剛接觸嵌入式不久,所在程序調(diào)試中遇到不少問題。就鍵盤檢測而言,進入檢測的雙重循環(huán)以后開始設置桌號,但是卻不知道如何再跳出這雙重循環(huán)進行下一步操作。在和學長的共同討論后,我們決定采用一個For循環(huán)定義變量a,在內(nèi)部循環(huán)中一旦a被賦值就用Braek語句跳出,在外部循環(huán)中a值改變打破For循環(huán)條件,故自然跳出外圍循環(huán)。還有就是在桌號檢測的程序中,為了能使機器人準確地判斷桌號,我用了檢測后延時再檢測來防止誤檢,但是延時的時間長度就是一個難題了,短了會重復檢測同一桌號,長了會丟掉桌號。經(jīng)過反復地調(diào)試,最終確定下來的延時時間能使桌號檢測的準確率達到80%,這是因為機器人在行進的過程中速度并不是恒定。后來我將程序改為檢測后延時檢測,確定檢測到桌子之后再延時走過這個桌號,這樣的程序就相對穩(wěn)定很多,基本不會出現(xiàn)桌號判斷失誤的可能。(詳細程序見第五章_附件_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電機驅(qū)動模塊
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 驅(qū)動模塊

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程序
  1. /******BF-1機器人程序******/
  2. /******河南工業(yè)大學***電氣學院***周偉偉******/

  3. /******頭文件******/
  4. #include<reg51.h>//BF-1的單片機是STC89C51
  5. /******宏定義******/
  6. #define uint unsigned int//宏定義
  7. #define uchar unsigned char//宏定義
  8. #define shumaguan P0//數(shù)碼管
  9. /******硬件連接定義******/
  10. sbit buzz=P2^0;//蜂鳴器
  11. sbit ma0=P2^2;//電機A控制口
  12. sbit ma1=P2^3;//電機A控制1
  13. sbit ma2=P2^4;//電機A控制2
  14. sbit mb0=P2^5;//電機B控制口
  15. sbit mb1=P2^6;//電機B控制1
  16. sbit mb2=P2^7;//電機B控制2
  17. sbit key1=P1^0;//設置按鍵
  18. sbit key2=P1^1;//+按鍵
  19. sbit key3=P1^2;//-按鍵
  20. sbit key4=P1^3;//確定按鍵
  21. sbit zhongli=P1^7;//重力傳感器
  22. sbit hw1=P3^0;//紅外傳感1
  23. sbit hw2=P3^1;//紅外傳感2
  24. sbit hw3=P3^2;//紅外傳感3
  25. sbit hw4=P3^3;//紅外傳感4
  26. sbit shire=P3^7;//人體釋熱傳感器
  27. /******全局變量******/
  28. uchar circs,n,t,num,s;
  29. /******電機A控制函數(shù)******/
  30. void go_ma()//電機A前進
  31. {
  32.     ma0=1;
  33.     ma1=1;
  34.     ma2=0;
  35. }
  36. void back_ma()//電機A后退
  37. {
  38.     ma0=1;
  39.     ma1=1;
  40.     ma2=0;  
  41. }
  42. void stop_ma()//電機A停止
  43. {
  44.     ma0=1;
  45.     ma1=0;
  46.     ma2=0;
  47. }
  48. /*****電機B控制函數(shù)******/
  49. void go_mb()//電機B前進
  50. {
  51.     mb0=1;
  52.     mb1=1;
  53.     mb2=0;
  54. }
  55. void back_mb()//電機B后退
  56. {
  57.     mb0=1;
  58.     mb1=1;
  59.     mb2=0;  
  60. }
  61. void stop_mb()//電機B停止
  62. {
  63.     mb0=1;
  64.     mb1=0;
  65.     mb2=0;
  66. }
  67. /******BF-1機器人運動函數(shù)*******/
  68. void advance()//BF-1機器人前進
  69. {
  70.     go_ma();
  71.     go_mb();
  72. }
  73. void back()//BF-1機器人后退
  74. {
  75.     back_ma();
  76.     back_mb();
  77. }
  78. void left_turn()//BF-1機器人左轉(zhuǎn)
  79. {
  80.     stop_ma();
  81.     go_mb();
  82. }
  83. void right_turn()//BF-1機器人右轉(zhuǎn)
  84. {
  85.     go_ma();
  86.     stop_mb();
  87. }
  88. void stop()//BF-1機器人停止
  89. {
  90.     stop_ma();
  91.     stop_mb();
  92. }
  93. /******BF-1機器人設備服務函數(shù)******/
  94. void delayms(uint xms)//延時函數(shù)
  95. {
  96.     uinti,j;
  97.          for(i=xms;i>0;i--)
  98.                for(j=110;j>0;j--);
  99. }
  100. void display(uchar y)//數(shù)碼管顯示
  101. {
  102.     ucharcode table[]={
  103.     0xc0,0xf9,0xa4,0xb0,
  104.     0x99,0x92,0x82,0xf8,
  105.     0x80,0x90,0x88,0x83,
  106.     0xc6,0xa1,0x86,0x8e};

  107.     shumaguan=table[y];
  108. }
  109. void alarm()//蜂鳴器報警
  110. {
  111.            buzz=0;
  112.            delayms(500);
  113.            buzz=1;
  114.            delayms(500);
  115. }
  116. /******BF-1機器人鍵盤檢測函數(shù)******/
  117. void key_scan()//鍵盤檢測
  118. {
  119. for(n=100;n==100;)//進入鍵盤檢測循環(huán)
  120.     {
  121.     if(key1==0)//設置按鍵
  122.            {
  123.                   delayms(10);
  124.                   if(key1==0)
  125.                   {
  126.                          while(1)
  127.                          {
  128.                          display(num);
  129.                          if(key2==0)//按鍵+
  130.                                 {
  131.                                        delayms(10);
  132.                                        if(key2==0)  
  133.                                               num++;
  134.                                               if(num==10)
  135.                                                      num=0;
  136.                                        while(!key2);
  137.                                 }

  138.                          if(key3==0)//按鍵-
  139.                                 {
  140.                                        delayms(10);
  141.                                        if(key3==0)  
  142.                                               num--;
  143.                                               if(num==-1)
  144.                                                      num=9;
  145.                                        while(!key3);
  146.                                 }
  147.                          if(key4==0)//確定按鍵
  148.                                 {
  149.                                        delayms(10);
  150.                                        if(key4==0)
  151.                                               n=num;//賦n值
  152.                                        while(!key4);
  153.                                        break;//跳出檢測
  154.                                 }
  155.                          }
  156.                   }
  157.            }
  158.     }
  159. }
  160. /******BF-1機器人紅外檢測函數(shù)******/
  161. void hw_scan()//紅外檢測
  162. {
  163.     if(hw2==1&&hw3==1)//直線
  164.            circs=1;
  165.     if(hw2==1&&hw3==0)//偏左
  166.            circs=2;
  167.     if(hw2==0&&hw3==1)//偏右
  168.            circs=3;
  169.     if(hw2==0&&hw3==0)//壓線
  170.     circs=4;
  171.     if((hw2==0&&hw3==0)&&(hw1==0&&hw4==0))//飯桌
  172.     {
  173.            advance();
  174.            delayms(40);
  175.            if((hw2==0&&hw3==0)&&(hw1==0&&hw4==0))
  176.            {
  177.                   advance();
  178.                   n--;
  179.                   t++;
  180.                   if(t==10)
  181.                          t=0;
  182.            advance();
  183.            delayms(60);
  184.            while((hw2==1&&hw3==1)&&(hw1==1&&hw4==1));
  185.            }
  186.     }//桌號檢測分析
  187. }
  188. void hw_circs()//檢測分析
  189. {
  190.     switch(circs)
  191.     {
  192.            case 1:
  193.            s=1;
  194.            break;
  195.            case 2:
  196.            s=2;
  197.            break;
  198.            case 3:
  199.            s=3;
  200.            break;
  201.            case 4:
  202.            s=4;
  203.            break;
  204.     }
  205. }
  206. /******BF-1機器人驅(qū)動函數(shù)******/
  207. void drive()
  208. {
  209.     if(s==1)//前進
  210.     {
  211.            advance();
  212.            delayms(15);
  213.     }
  214.     if(s==2)//左轉(zhuǎn)
  215.     {
  216.            left_turn();
  217.            delayms(15);
  218.     }
  219.     if(s==3)//右轉(zhuǎn)
  220.     {
  221.            right_turn();
  222.            delayms(15);
  223.     }
  224.     if(s==4)//停止
  225.     {
  226.            stop();
  227.            delayms(15);
  228.     }
  229.     if(s==5)//停止并警報
  230.     {
  231.            stop();
  232.            delayms(15);
  233.            alarm();
  234.     }
  235. }
  236. /******BF-1機器人主函數(shù)******/
  237. void main()//主函數(shù)
  238. {
  239. while(1)
  240. {
  241.     num=0;
  242.     key_scan();
  243.     delayms(1000);
  244.     while(1)
  245.     {
  246.           ma1=1;ma2=1;mb2=1;mb2=1;//檢測清零
  247.            hw_scan();//傳感器檢測
  248.            hw_circs();//檢測分析
  249.            drive();//BF_1機器人驅(qū)動
  250.            display(t);//顯示狀態(tài)
  251.            if(n==0)
  252.                   break;
  253.     }

  254.     alarm();
  255.     alarm();

  256.     while(1)
  257.     {
  258.            if(key1==0)//返回設置
  259.            {
  260.                   delayms(10);
  261.                   if(key1==0)
  262.                          break;
  263.            }
  264.     }     

  265.     while(1)//返回廚房
  266.            {
  267.                  ma1=1;ma2=1;mb2=1;mb2=1;//檢測清零
  268.                   hw_scan();//傳感器檢測
  269.                   hw_circs();//檢測分析
  270.                   drive();//BF_1機器人驅(qū)動
  271.                   display(t);//顯示狀態(tài)
  272.                   if(t==0)
  273.                          break;
  274.            }
  275.     alarm();
  276. }
  277. }
復制代碼


致謝
       本設計能夠順利完成,還承蒙各位學長的關(guān)心。在單片機的學習中,還有在BF-1的程序編寫調(diào)試過程中,正是得到了幾位學長的幫助,才大大的縮短了機器人的制作的時間,這里就不再一一介紹。在制作電路階段,電子科技協(xié)會為我提供了制作BF-1的實驗室,我才能有合適的環(huán)境去專心完成相關(guān)工作。在此,我對電子科技協(xié)會表示最真摯的感謝!同時感謝所有幫助過我的同學!
參考文獻
[1]網(wǎng)絡.百度百科. http://baike.baidu.com/
[2]網(wǎng)絡.百度文庫. http://wenku.baidu.com/
[3]網(wǎng)絡.百度知道. http://zhidao.baidu.com/
[4]郭天祥.51單片機C語言教程.電子工業(yè)出版社.2009
[5]陳永甫.常用電子元件及其應用.人民郵電出版社.2005
[6]DavidCook[美].機器人制作.2005
[7]韋琳.模擬電路科學出版社.2006
[8]劉勇數(shù).字電路電子工業(yè)出版社.1992
[9]劉秋艷.Protel 99se電路設計中國鐵道出版社.2005
[10]周潤景.等Proteus在MCS-51&ARM7系統(tǒng)中的應用百例.2006

回復

使用道具 舉報

ID:392045 發(fā)表于 2018-8-31 16:05 | 顯示全部樓層
謝謝大佬 謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线第一页 | 亚洲欧美日韩在线一区二区 | 欧美色综合网 | 精品国产一区二区三区性色av | 国产午夜久久久 | 91精品国产91久久综合桃花 | 精品亚洲第一 | 五月婷婷丁香婷婷 | 一区二区国产精品 | 精品久久电影 | 在线中文字幕视频 | 密乳av| 亚洲国产一区二区三区在线观看 | 欧产日产国产精品国产 | 久久久久久久久蜜桃 | 久久久久国产一区二区三区四区 | 中文字幕国产一区 | 在线观看国产视频 | 精品久久久久久久久亚洲 | 美女在线国产 | 青青草av在线播放 | 免费一区 | 男人天堂午夜 | 亚洲+变态+欧美+另类+精品 | 日本成人中文字幕 | 国产一区二区三区在线免费 | 9久久精品 | 在线国产精品一区 | 男女爱爱网站 | 亚洲一区二区在线播放 | 一区二区免费 | 欧美不卡一区二区 | 欧美视频在线免费 | 美女福利视频网站 | 久久99精品国产自在现线小黄鸭 | 成人免费视频 | 精品久久电影 | 国产露脸国语对白在线 | 久久夜视频 | 婷婷久久久久 | 在线视频一区二区 |