精品一区二区中文在线,无遮挡h肉动漫在线观看,国产99视频精品免视看9,成全免费高清大全

基于單片機的超聲波測距儀的設計與實現畢業論文

時間:2023-05-01 06:59:05 論文范文 我要投稿
  • 相關推薦

基于單片機的超聲波測距儀的設計與實現畢業論文

基于單片機的超聲波測距儀的設計與實現

基于單片機的超聲波測距儀的設計與實現畢業論文

中文摘要 本設計基于單片機AT89C52,利用超聲波傳感器HC-SR04、LCD顯示屏及蜂鳴器等元件共同實現了帶溫度補償功能可報警的超聲波測距儀。我們以AT89C52作為主控芯片,通過計算超聲波往返時間從而測量與前方障礙物的距離,并在LCD顯示。單片機控制超聲波的發射。然后單片機進行處理運算,把測量距離與設定的報警距離值進行比較判斷,當測量距離小于設定值時,AT89C52發出指令控制蜂鳴器報警,并且AT89C52控制各部件刷新各測量值。在不同溫度下,超聲波的傳播速度是有差別的,所以我們通過DS18B20測溫單元進行溫度補償,減小因溫度變化引起的測量誤差,提高測量精度。超聲波測距儀可以實現4m以內的精確測距,經驗證誤差小于3mm。

關鍵詞:超聲波;測距儀;AT89C52;DS18B20;報警

Design and Realization of ultrasonic range finder based

ABSTRACT The design objective is to design and implement microcontroller based ultrasonic range finder. The main use of AT89C52, HC-SR04 ultrasonic sensor alarm system complete ranging production. We AT89C52 as the main chip, by calculating the round-trip time ultrasound to measure the distance to obstacles in front of, and displayed in the LCD. SCM ultrasonic

transmitter. Then the microcontroller for processing operation to measure the distance and set alarm values are compared to judge distance, when measured distance is less than the set value, AT89C52 issue commands to control the buzzer alarm, and control each member refresh AT89C52 measured values. Because at different temperatures, ultrasonic wave propagation velocity is a difference, so we DS18B20 temperature measurement by the temperature

compensation unit, reducing errors due to temperature changes, and improve measurement

accuracy. Good design can achieve precise range ultrasonic distance within 4m, proven error is less than 3mm.

Keywords:Ultrasonic;Location;AT89C52;DS18B20;Alarm

目錄

第一章 前言 ..................................................................................................................................................... 1

1.1 課題背景及意義 .............................................................................................................................. 1

1.1.1超聲波特性 .............................................................................................................................. 1

1.1.2超聲波測距 .............................................................................................................................. 2

1.2 超聲波模塊基本介紹 ........................................................................................................................ 3

1.2.1 超聲波的電器特性 ............................................................................................................... 3

1.2.2 超聲波的工作原理 ............................................................................................................... 5

1.3主要研究內容和關鍵問題 .............................................................................................................. 6

第二章 方案總體設計 ..................................................................................................................................... 7

2.1 超聲波測距儀功能 ............................................................................................................................ 7

2.2設計要求 ............................................................................................................................................. 8

2.3系統基本方案 ..................................................................................................................................... 9

2.3.1方案比較 .................................................................................................................................. 9

2.3.2方案匯總 ................................................................................................................................. 11

第三章 系統硬件設計 ................................................................................................................................... 13

3.1 單片機最小系統 .............................................................................................................................. 13

3.2 超聲波測距模塊 ............................................................................................................................. 13

3.3 顯示模塊 .................................................................... 15

3.4溫度補償電路 ................................................................ 15

3.5 蜂鳴報警電路 ................................................................................................................................. 16

第四章 系統軟件設計 ................................................................................................................................... 17

4.1 AT89C52程序流程圖 ...................................................................................................................... 17

4.2 計算距離程序流程圖 ...................................................................................................................... 19

4.3 報警電路程序流程圖 ...................................................................................................................... 19

4.4 超聲波回波接收程序流程圖 .......................................................................................................... 20

第五章 系統的調試與測試 ......................................................................................................................... 21

5.1 安裝 .................................................................................................................................................. 21

5.2 系統的調試 ...................................................................................................................................... 21

第六章 總結 ................................................................................................................................................... 23

參考文獻......................................................................................................................................................... 24 致 謝........................................................................................................................... 錯誤!未定義書簽。

附錄 ................................................................................................................................................................ 26

附錄1 整機電路原理圖 ........................................................................................................................ 26

附錄2 超聲波溫度和速度的關系 ........................................................................................................ 27

附錄3 部分源程序 ................................................................................................................................ 29

第一章 前言

1.1 課題背景及意義

1.1.1超聲波特性

眾所周知,振動產生聲波。通常每秒聲波振動的次數被稱為頻率,單位是Hz。人的聽覺范圍為20?20,000Hz,即我們無法獲取振動頻率小于20Hz和大于20,000Hz的聲波。所以科學家把聲波按照人類的聽覺范圍進行了分類:振動頻率大于20,000Hz的成為超聲波,小于20Hz的稱為次聲波。

超聲波是一種超越人類聽力極限的聲波,頻率大于20KHz,是在彈性介質中的機械振蕩。超聲波能夠在固體、液體和氣體中傳播,不同的傳播介質傳播的速度不相同。超聲波和其他機械波一樣,在傳播的過程中也會因折射和反射而衰減。超聲波有以下特性:

1.波長

通常我們把波的傳播速度用波長乘以頻率來表示。電磁波傳播的速度非常快,高達3×108m/s,但是聲波傳播的速度很慢,在空氣中常溫常壓下僅為343m/s(20℃、101KPa)。在波傳播的速度比較低的情況下,波長非常短,更容易辨識,如果用超聲波來測距,也就代表著我們能夠在距離和方向上獲得更高的分辨率。有了更高的分辨率,才可能使我們在測量過程中得到更高的精度。

2.反射特性

通過捕獲在目標上反射的超聲波,從而檢測到物體的存在。因為金屬、水泥、玻璃、木材、橡膠與紙能夠反射將近100%的超聲波,用超聲波能夠很輕易地找到這些對象。但是像布匹、棉毛等材料,它本身吸收超聲波,用超聲波來檢測它們很困難。同時,要想探測位于凹凸表面和斜坡表面上的物體,由于被測物的不規則使得反射波變得不規則,測量難度會加大。超聲波本身的特性決定了空曠的場所是超聲波的理想測試環境,并且被測物體一定要能夠反射超聲波。

3.溫度效應

超聲波在空氣中傳播是隨環境溫度溫度變化的,可以用c =331.5+0.607t(m/s)來表示聲波的傳播速度。 其中“c”為聲波傳播速度(m/s),“t”表示溫度(℃)。所以,要想精確地測量障礙物的距離,實時檢測環境溫度并進行補償是非常必要的,尤其冬季

室內外溫差較大,對超聲波測距的精度影響很大,此時可用溫度補償模塊來減小溫度變化所帶來的測量誤差。考慮到本設計的測試環境是在室內,而且超聲波主要是用于實現避障功能,對測量精度要求不高,所以關于溫度效應對系統的影響問題在這里不做深入的探討。超聲波在空氣中傳播時,溫度與速度的關系會在附錄中,供查閱。

4.衰減

在空氣中傳播的超聲波,會因為在球形表面上發生衍射現象導致能量擴散損失,也會因介質吸收能量造成吸收損失,并且波強衰減量與距離是成正比的。超聲波的衰減率還與頻率成正比。如圖6所示,超聲波的頻率增高,衰減率就越高,傳播的距離也就越短。由此可見超聲波的衰減特性直接影響了超聲波傳播的有效距離。

1.1.2超聲波測距

在現實生活中某些特殊場合,有些傳統的測距方式存在著難以克服的缺陷,例如電極法測量液位,運用差位分布電極,通過給電或發射脈沖來進行液面檢測,由于電極長時間浸泡在液體中,非常容易被腐蝕和電解,進而失去靈敏性。使用超聲波測距就能夠很好地解決這些問題。當下市面上超聲波測距系統存在體積龐大、價格昂貴、精度偏低等種種問題,使其在一些中小規模的測距中難以得到普遍的使用。在這樣的背景下,本文設計了一款基于AT89C52單片機的低成本、高精度、微型化的超聲波測距儀。

超聲波較之于其他機械波,具有以下特有性質:超聲波為定向傳播,繞射少,反射能力強;超聲波衰減很小,穿透能力強,在空氣中傳播速度較慢,也可在液體固體中傳播;當超聲波從一種介質入射到另一種介質時,由于在兩種介質中的傳播速度不同,在介質面上會產生反射、衍射等現象。因此,它在軍用,農牧業,醫學,工業有廣泛的應用。并且能夠實現洗滌、焊接、粉碎、測速測距等功能。

雖然目前的技術水平,人類利用超聲波傳感器的技術成果還是很有限的,但是隨著科學技術的飛速發展,超聲波傳感器的應用領域將越來越廣泛。這是一個蓬勃發展的技術和工業領域,有著無限的發展前景。展望未來,超聲波傳感器在各方面都是一個新的重要的工具,將有巨大的發展空間。在運動測距中將有更高精度的方向定位,以滿足社會日益增長的需求。聲納定位的精度的提高,可以滿足未來秘密武器進行打擊的需要。無需多言,未來的超聲波傳感器、自動化智能集成聯合其他的傳感器,可以實現多傳感器的一體化協同作業。伴隨傳感器技術的進步,傳感器將具有簡單的學習功能,自動確定發展方向的功能,并最終具有創造性。

2

1.2 超聲波模塊基本介紹

1.2.1 超聲波的電器特性

1.聲壓特性

聲壓級 (S.P.L.) 是表示音量的單位,利用下列公式予以表示。

S.P.L.= 20logP/Pre (dB)式中,“P”為有效聲壓 (μbar),“Pre”為參考聲壓 (2×10-4μbar)如圖1所示為幾種常用超聲波傳感器的聲壓圖。

圖1 超聲波傳感器的聲壓圖

2.靈敏度特性

靈敏度是一個用來表示聲音接收級的單位,如下式所列。

靈敏度= 20log E/P (dB),此式中,“E”是產生的電壓 (V),“P”是輸入的聲壓(μbar)。超聲波收發器的靈敏度直接決定系統的測距范圍,如圖8所示為幾種中常見超聲波傳感器的靈敏度圖,從圖中可以發現40KHz時傳感器的聲壓級最高,也就是說40KHz時所對應的靈敏度最高。

3

圖2 超聲波傳感器靈敏度示意圖

3.輻射特性

把超聲波傳感器安裝在臺面上。然后,測量角度與聲壓 (靈敏度) 之間的關系。為了準確地表達輻射,與前部相對比,聲壓 (靈敏度) 級衰減6dB的角度被稱為半衰減角度,用θ1/2表示。超聲波設備的外表面尺寸較小易于獲得精確的輻射角度。圖3展示的是幾種常見的超聲波傳感器的輻射特性。

圖3 超聲波傳感器的輻射特性

分析以上研究結果不難看出超聲波傳感器工作在40KHz范圍內具有最大的聲壓級和最高的靈敏度,這為設計中選擇合適的超聲波傳感器指明了方向。

4

1.2.2 超聲波的工作原理

市面上常見的超聲波傳感器多為開放型,

超聲波傳感器的內部結構如圖4所示,復合式振動器巧妙地固定在底座上。這種復合振動器是由諧振器、金屬片和電陶片構成的雙壓電晶片的元件振動器。諧振器是圓錐形的,目標是可以有效輻射因振動而產生的超聲波,而且能夠有效地聚合超聲波于振動器中心。

當電壓被施加到壓電陶瓷,用于機械形變的電壓與頻率將會改變。另外,振動會使壓電陶瓷產生電荷。運用這個原理,由兩片壓電陶片或者一片壓電陶片和一片金屬片組成的振子稱作雙壓電晶片元件,當向其時間電信號時,它將彎曲振動產生超聲波。反向操作,即將超聲波振動施加到雙壓電晶片元件,就會產生電信號。

圖4 超聲波傳感器內部結構圖

圖5 聲壓在不同距離下的衰減特性

5

1.3主要研究內容和關鍵問題

因為超聲波檢測更加快捷、便利,并且運算簡便,更易完成實際控制。所以超聲波測距在移動機器人領域得到廣泛使用。在實際工業運用中,用超聲波測距可以使機器人在移動中自動避開障礙物。也因此要求系統必須能夠及時獲取障礙物的位置信息(距離和方向)。因為超聲波測距系統的這些特點,其在車輛倒車雷達的制造上也已被廣泛使用。

本設計主要研究通過單片機控制各模塊工作,是通過單片機來控制各模塊協同工作,控制超聲波發射器發射超聲波信號,使超聲波接收器捕捉辨識回波信號,利用發射回收波信號的時間差,再利用溫度補償函數從而換算測量距離。

生活中運用本設計時,測量距離可能會隨時改變,為了及時捕捉改變的距離值,即提高超聲波測距儀的靈敏度,通過設定采樣周期來實現實時測距。

主要有以下問題需要解決:

1.超聲波回波檢測

超聲波信號發送后,會在障礙物表面進行反射和衍射,有些反射波可能會經過多次反射,超聲波接收器會接收到多個回波信號,如何在眾多回波中正確辨別是一個難點。

因為本設計研究的是短距離測距,那么如果在發射波后,一段時間內沒有接收到回射波,我們就判定為超距,結束本次作業,返回清零,重新開始測距。

2.溫度的影響

超聲波在空氣中傳播時,它的速度是受外部溫度影響的,我仔細的查閱了不同溫度下對應超聲波速度值,發現溫度會嚴重影響測量精度。所以使用一種方法將外部溫度對超聲波測距精度的影響降到最低顯得十分迫切。

3.如何報警

當測量距離小于一定范圍時,屬于危險范圍,因為不論是機器人還是汽車,在與障礙物距離很近時,由于慣性原因難以避免與其相撞,所以與障礙物相距一定范圍內時,要求系統會自動報警。報警通過什么實現,用什么方式,如何判定,這便成為我研究的另一個問題。我們考慮的是設計的實用性,用何種方法簡便快捷的實現是研究重點。

6

第二章 方案總體設計

2.1 超聲波測距儀功能

為了實現測距,本設計由硬件和軟件兩部分組成。主要由MCU控制單元、溫度補償模塊、超聲波模塊、按鍵輸入模塊、顯示模塊、報警模塊等組成。在這個設計中的核心模塊是單片機。其中硬件有單片機、各功能模塊、輸入輸出設備和各組成電路,軟件是所有工作程序的統稱。單片機通過系統急性比較處理,從而控制蜂鳴器報警。系統總體的功能方框圖如圖5所示。

圖5系統功能方框圖

主控制模塊由AT89C52構成,就相當于人的大腦,主要起到控制協調各模塊作業的作用。通過超聲波發射接收的往返時間差,利用 L= vt/2精確測量出障礙物的距離,并顯示在液晶屏上,同時顯示當前溫度T及該報警設定值。

由AT89C52控制的定時器負責產生超聲波脈沖并計時,遇到障礙物后反射, 超聲波接收模塊對聲波進行捕捉,再次計時。然后根據超聲波往返的時間差、當前溫度下超聲波傳播的速度代入溫度補償后的算式L=vt/2算得障礙物距離。超聲波接收模塊以及超聲波發射模塊就相當于人的眼睛,是獲取外部信息最主要的通道。

按鍵輸入模塊有四個按鍵組成,主要作用是設置超聲波測距儀的最小報警距離。 測溫模塊由主要作用是測量實際溫度,把數據傳輸到主控模塊,從而提取出相應溫度下超聲波在空氣中傳播的速度

顯示模塊由LCD1602構成,主要作用是顯示測距結果、溫度、以及最小報警距離。

7

報警模塊由蜂鳴報警器組成,主要作用是在所測距離小于設置最小距離時發出蜂鳴、報警。應用如倒車雷達,當車尾離障礙物的實際距離小于一定值后,倒車雷達會報警提示。

信號通過單片機的各個模塊處理進行綜合分析,實現超聲波測距儀的功能。在此基礎上,完成系統方案的總體設計,并最后通過硬件和軟件實現各功能。并附有硬件電路圖、程序流程圖、功能框圖,特定系統配置、電路的原理與程序設計相伴。該系統的控制是很容易的、可靠的、測距精度高、可讀性和流程明了等優勢。實現后的作品可用于需要測量距離參數的各種應用場合。

2.2設計要求

考慮到設計的應用,本設計主要有以下設計要求:

1.主控模塊

本設計旨在設計實現微型超聲波測距儀,語言要求:C語言

低成本的51單片機是很好的選擇,要求使用者要熟悉51單片機集成開發環境,單片機的內部結構、資源以及硬件和軟件調試設備的基本方法和技能,而且可以使用C語言編寫項目文件。

2.測量距離范圍:4m

超聲波測距儀,由于超聲波方向性強、滲透力強、容易得到聲能等較集中的優勢,因為聲衰減問題,因此并不適用于長距離范圍。目前主要應用于倒車雷達,導航失明,視力矯正等。

盲人導航主要是判斷當前方向的障礙物距離,從而幫助盲人選擇正確的路線,此設計可以搭配GPS導航、語音播報等系統共同協助視力障礙者選擇正確的前進路線。

視力矯正主要適用于坐姿不正確,讀書、看電視、玩電腦離書本和屏幕太近的人群,首先根據實際需要設定報警距離,當使用者超過報警距離后自動報警。

以上都是短距測距,所以本設計4m的測量距離完全可以滿足測量需要。

3.誤差范圍:3mm

超聲波測距可能因為障礙物不規則、溫度影響等原因影響測量精度,本設計添加了

8

溫度補償模塊,大大提高了測量精度,知道老師要求精度優于1%,考慮到在實際中的應用,我查取了相關資料,覺得控制在3mm誤差范圍內是比較合適且可實現的。

4.溫度補償

自行構建基于單片機的最小系統,完成相關硬件電路的設計實現

5.顯示

利用數顯裝置顯示障礙物的距離值(以cm為單位,誤差不超過1cm);了解超聲波測距原理,溫度補償實現方法。

6.報警

當被測距離小于預定的距離時,向蜂鳴器發送信號報警。

2.3系統基本方案

2.3.1方案比較

1. 主控制器模塊

方案1:

系統的核心部件選擇一塊CPLD(復雜可編程邏輯器件,諸如EPM7128LC84-15),以實現功能的控制和處理。 CPLD具有速度快、易于編程、資源豐富、開發周期短等優點,可以用VHDL語言開發編寫。與單片機相比,CPLD在控制上有很大的不足。還有,CPLD的處理速度是異常迅速的,但是超聲波測距處理速度的要求不會太高,則對系統處理信息的要求也不會過高,在這一點上,MCU足以勝任了。使用該方案,在控制上會遇到很多困難。出于這個原因,我們不使用這種方案的,所以產生第二個方案。 方案2:

機為系統的核心,用其超聲數據處理,以實現其既定的性能指標。進行系統的全面分析,關鍵在于實現超聲波測距,但在這一點上,單片機展示了其優勢——控制簡單、方便、快捷。其結果是,該微控制器可以充分發揮其資源豐富,有更強大的控制功能和位尋址的操作功能,價格低廉等特點。所以,較為理想的是第二個方案。

綜上所述,我們選擇了方案2。

2. 超聲波模塊

9

方案1:

由一塊T40-16作為超聲波模塊。此模塊具有1-1000cm非接觸式的測距功能,但其造價高,很難有更廣泛的應用。故放棄此方案。

方案2:

使用HC-SR04來實現超聲波的收發,它可以進行2—400cm的非接觸式距離檢測,其測距誤差不超過3mm。該模塊包含反射超聲波的超聲波發射器、接收回波的接收器和控制電路。其物美價廉,測距精度高,故采用第2方案。

3. 電源模塊

出于本設計使用便捷性的考慮,選擇便攜電源供電,故提出以下兩種供電方案。 方案1:

采用12V蓄電池向系統供電。蓄電池擁有很強的電流驅動能力,和穩定的電壓輸出性能。但是蓄電池的體積太大,使用非常不方便。所以我們放棄了這個方案。

方案2:

采用3節1.5 V干電池共4.5做電源,經過實驗驗證系統工作時,單片機、傳感器的工作電壓穩定能夠滿足系統的要求,而且電池更換方便。

綜上所述采用第2套方案。

4. 顯示模塊

方案1:

數碼管顯示。由于數字顯示速度快、簡單易用、簡潔的顯示等特點使它得到廣泛應用。在這里我們需要顯示的是測得的距離值和溫度值以及報警距離的設置,不足以滿足使用需要,因此我們放棄了此方案。

方案2:

使用LCD1602液晶顯示屏。由于其清晰的液晶顯示屏、豐富的內容、清晰地顯示信息、便于使用、顯示速度快等優點已被廣泛使用。對于此系統我們要求不僅能顯示測量距離、溫度,還要顯示報警距離的設定,故用物美價廉的LCD1602顯示,充分發揮出LCD的顯示優勢。因此我們選擇了此方案。

10

5. 溫度補償模塊

方案1:

使用PT100溫度傳感器用于溫度補償電路。 PT100鉑電阻傳感器是利用其隨溫度變化的阻值、并顯現出一定的函數關系的特點來進行溫度補償的,具有抗震動性、穩定性、精度高、耐高壓等特點。但其操作較為復雜。

方案2:

溫度補償電路使用DS18B20作為溫度傳感器。通過“一線”總線(1-Wire是一種獨特的數字信號的總線協議,獨特的電源線和信號線的復合一起只使用一個口線;每個芯片獨有的編碼,支持網絡尋址和零功耗等待等,這條總線需要的硬件連線最少)。DS18B20數字溫度輸出這種獨特的方法允許多個DS18B20容易建立傳感器網絡,從而提供更多地可能性給整個測量系統的建立和組合。這已經比其他的溫度傳感器在轉換時間、測量精度、分辨率、傳輸距離等有了長足的進步,為用戶提供了更便捷的使用和更讓人滿意的結果。

相比之下,DS18B20數字溫度直接輸出,無需采取糾正措施,故選擇方案2。

6. 報警模塊

方案1:

使用語音芯片進行提示,優點可以自由設定要提示的聲音。缺點使用復雜,需要專門的編程軟件,成本高控制復雜,不便于普及。

方案2:

采用蜂鳴器提示,電路簡單實用,可靠性高。

綜上所述我們選擇方案2。

2.3.2方案匯總

我們最終確定了如下方案:

1、 主控芯片采用AT89C52單片機作為主控制器。

2、 使用HC—SR04超聲波模塊

11

3、用3節干電池供電。

4、用LCD1602顯示。

5、采用DS18B20做溫度補償。

6、使用蜂鳴報警器報警

12

第三章 系統硬件設計

3.1 單片機最小系統

對單片機的認識源于大一時電子愛好者協會的一次講座。當時大三的學長們在做智能車,精彩的演講和有趣的知識吸引了我,也讓我對單片機產生了興趣。他告訴我,單片機就相當于人的大腦,它不能像電腦那樣做出特別復雜的運算,但它足以完成很多操作任務。他當時用的也是51單片機,因為感覺性能比較穩定,運算速度快,而且物美價廉。后來通過大三對單片機課程的學習,進一步對AT89C52了解,因此本次設計選用AT89C52作為主控制器。主控制系統電路如圖6所示。

圖6 單片主控電路

單片機通過發送信號來控制主控制電路協調超聲波發射模塊,超聲波接收模塊,顯示模塊,溫度模塊,報警模塊。

超聲波測距儀中各模塊主要由單片機主控電路進行控制和協調,從而有條不紊的進行工作。

3.2 超聲波測距模塊

使用現成的超聲波模塊HC—SR04, 它的工作原理是:向IO口TRIG發送信號,加大于10us的高電平;該模塊能夠自動發送8個頻率40KHz 的方波,且處于工作狀態是檢測是否有回波信號;如有返回信號,會在IO口向ECHO傳輸一個高電平信號,此高電平延續的時間便是超聲波的往返時間。l(測試距離)=v(聲速)t(高電平時間)/2。實物如下圖7。其中VCC能夠提供4.5V電源,GND為接地,TRIG可以觸發輸入信號,

ECHO

13

則為含有回波信號的四條線。

圖7 超聲波模塊實物 圖8 超聲波接口

T/R-40-12型超聲波傳感器的震蕩頻率為40KHz,傳播10米超聲波信號強度便衰減到40個聲壓級,此時超聲波接收探頭就很難接收到回波信號。因此,從理論上分析,本設計超聲波測距部分的實際范圍是10cm—400cm,理想的避障范圍是10cm—100cm,所以實際壁障安全距離應設在50cm—80cm之間。

圖9 避障原理

圖9中,超聲波指向性地發送一段超聲波并計時,超聲波經過在空氣中傳播后,遇到障礙物反射回來被超聲波接收器捕捉到,同時停止計時。利用時間差計算法算出距離。

14

圖10 超聲波接口電路圖

3.3 顯示模塊

顯示模塊采用數LCD1602,連接圖如圖所示

圖11 LCD顯示電路

顯示模塊主要用來顯示測量的距離值、溫度傳感器測量的溫度值以及最小的報警距離。

3.4溫度補償電路

溫度補償電路采用DS18B20傳感器,P2.4接DS18B20數據總線,由單片機控制DS18B20溫度轉換和數據的傳輸,并且將10k的上拉電阻連接到數據總線。該系統采用外接電源

15

DS18B20的優點是I / O接口不需要強拉,總線控制器并不需要在溫度很高的情況下轉換。因此轉換在可以允許的范圍內,單線總線上附加數據的傳輸,如圖15所示的硬件結構。

圖12溫度補償電路DS18B20

3.5 蜂鳴報警電路

如圖13所示,蜂鳴報警電路由蜂鳴器、三極管、接到單片機上P13引腳上的電阻組成。

圖13 蜂鳴報警電路圖

16

第四章 系統軟件設計

4.1 AT89C52程序流程圖

如圖14所示為超聲波測距單片機AT89C52程序流程圖。

圖14 系統軟件的整體流程圖

17

流程圖具體細分如下:

1、系統初始化

單片機AT89C52、LCD1602、蜂鳴報警器、超聲波測距模塊通過上電復位并自行運行單片機清零程序。

2、發射超聲波

自動讀取超聲波測距程序,AT89C52控制HC—SR04指向性地發射超聲波并且記錄時間,待捕捉到回波時終止計時,算得回波時間。

3、判斷是否檢測到回波

超聲波接收電路出于運行狀態。如超聲波接收電路收到回波,則將信號發送到單片機并再次計時,通過溫度補償后的算式算得障礙物當前距離;如超聲波接收電路未在設定時間收到回波,則返回。

4、顯示

顯示距離、當前溫度、設置的報警距離。

5、是否小于超聲波報警距離

將測得距離與報警值進行比較,如小于報警值,則進行報警。

6、再次檢測等待下次報警

18

4.2 計算距離程序流程圖

圖15 計算距離程序流程圖

首先調用溫度函數進行溫度補償,得到當前溫度下的超聲波傳播速度v;然后調用時間函數t,即超聲波發射與超聲波回波的時間差;再將以上函數代入算式=vt/2算得當前溫度下障礙物的距離;最后返回。

4.3 報警電路程序流程圖

首先調用測量函數l,然后與報警設定值進行比較,如測量值l小于報警設定值0.5m,則向蜂鳴器發送報警信號,蜂鳴器進行報警;如測量值l大于報警距離0.5m,則不報警,返回調用測量函數。

19

圖16報警電路程序流程圖 圖17 超聲波回波接收程序流程圖

4.4 超聲波回波接收程序流程圖

如圖17所示,首先單片機控制超聲波發射器發射超聲波,同時計時開始,超聲波接收器處于工作狀態,如接收到回波,則再次計時,計算超聲波往返時間差t;如未收到超聲波回波,則返回超聲波放射,重新發射并計時。

20

第五章 系統的調試與測試

5.1 安裝

1.檢查元件

按電路圖購買好元件后,首先需要檢測元件是否完好。按照各種元件檢測的方法分別進行檢測,這項任務雖然重復繁瑣,但是我覺得這是必做的工作,因為只要有一個元件出了問題,設計就不能實現它的功能。同時需要細心對照原理圖,使其一一對應,多次檢查確保正確后才可以上件、焊件,以防因元件錯誤不便修正,導致功能無法實現。

2.放置、焊接各元件

出于對本設計便攜的要求,選用了正好可以容納所有器件的小塊洞洞板。然后依照原理圖對應放置各元件,此過程中先安放、焊接低層元件,最后焊高層的和要求較高的元件。特別要注意易損元件的焊接,我把它們放在最后,同時要注意集成芯片上焊接不能連續焊接超過10s,并且注意芯片的安裝方向。

5.2 系統的調試

打開電源開關,電源指示燈亮起,LCD1602正常顯示。距離0.90m,溫度28°C,設定報警距離0.5m。向障礙物進一步靠近。

21

當靠近后,距離顯示為0.44m,發出蜂鳴警報。

軟件調試正常,屏幕正常顯示,正常工作。

經過多次測試調試,與實際溫度對比、實際距離對比,該設計能夠在一定范圍內穩定的工作,并測出距離,并且誤差小于3毫米。設計成功。

22

第六章 總結

在臺老師的悉心指導下,自己從初拿題目的一頭霧水,到一步步地學習、設計、改正,再改正,到最后完成本設計,這個過程讓我收獲良多。

這是我16年的學生生涯中最后一次完成作業,一份特別的作業。學校的教育是有限的,更重要的是我在這個過程中培養的獨立思考、獨立完成任務的能力以及終生學習的信念。我覺得這才是一所高等學府應有的教育模式,人腦不是計算機,也不是儲存器,比起存儲,我相信現在的一臺普通電腦就比人一輩子記憶量還大。我認為大腦是一個特殊的信息加工處理器,較之電腦,它擁有更多地創造性以及無限可能。我想求學這么多年,可能學習、鍛煉的正是這種能力。在信息爆炸的年代,知識在飛速的更新,有可能我們現在學習的知識已經過時很多年,但為什么還要學習這些知識,這種行為并不是沒有意義的,它讓我們學會了學習方法,在掌握前人知識的基礎上,我們可以更好更快地創造。

這次經歷,對于我個人的成長來說意義深遠。這個過程不像我最初想的那么簡單,原以為可以一邊工作一邊完成設計的我,也辭掉了剛剛入門的工作,專心地投入其中。專注本身就是一種歷練,本身也是人的一種優秀的品質。

大一的時候,自己對于大學的一切都很新鮮,著迷,先后參加院學生會,創業大賽等組織及活動,豐富了自己的課余生活,也在實踐與學習中加深了對世界、人生、價值的思考。大二經歷了一年的頹廢,基本上課余時間都在寢室打游戲,掛了科,付出了代價。大三時迷戀上了市場營銷、心理學,先是看了三十二本世界各領域名人的傳記,從初中高中時的模仿到了總結分析,認識到成功的路雖不同,但是成功者的許多特質都是相同的,然后開始全心扎入市場營銷的學習中,拜讀了科特勒、泰勒、德魯克等名師大家的許多著作,同時自己的三觀有了新的提升,但這期間由于想法極端,耽誤了大學學業。由于大三的積累,到了大四就有些急于求成了,想盡快融入社會,實現自我價值。卻忘記了應該先把應該走的路走好,才能走自己想走的路。

這次寶貴的經歷,讓我明白,路是走出來的,不是想出來的。我會把我對夢想的渴望,拆分成一步步可以執行的計劃,按部就班地完成。

23

參考文獻

[1] 宋文緒. 傳感器與檢測技術[M]. 北京: 高等教育出版社, 2004.

[2] 余錫存. 單片機原理及接口技術[M]. 西安: 西安電子科技大學出版社, 2000.

[3] 李全利. 單片機原理及接口技術[M]. 北京: 北京航空航天大學出版社, 2004.

[4] 薛均義, 張彥斌. MCS-51系列單片微型計算機及其應用[M]. 西安: 西安交通大學出版社, 2005.

[5] 徐愛鈞, 彭秀華. 單片機高級語言C51應用程序設計[M]. 北京: 北京航空航天大學出版社, 2006.

[6] 康華光. 電子技術基礎(模擬部分)[M]. 北京: 高等教育出版社, 2004.

[7] 胡萍.超聲波測距儀的研制[J]. 計算機與現代化,2003,7(10):21~23.

[8] 時德剛,劉嘩. 超聲波測距的研究[J]. 計算機測量與控制,2002,9(10):31~33.

[9] [美]J.馬庫斯. 電子電路大全[M]:卷1,日用電路. 北京:計量出版社,1985.

[10] 蘇長贊. 紅外線與超聲波遙控[M]. 北京:人民郵電出版社,1993.7.

[11] 張謙琳. 超聲波檢測原理和方法[M]. 北京:中國科技大學出版社,1993.10.

[12] 九州. 放大電路實用設計手冊[M]. 沈陽:遼寧科學技術出版社,2002.5.

[13] 樊昌元,丁義元. 高精度測距雷達研究[J]. 電子測量與儀器學報,2000,9(8):3537.

[14] 蘇偉,鞏壁建. 超聲波測距誤差分析[J]. 傳感器技術,2004,3(4):17~20.

[15] 趙保全. 中國集成電路大全[M].北京:國防工業出版社,1985.

[16] 肖景和. 數字集成電路應用精粹[M]. 北京:人民郵電出版社,2003. [17] 陳曉文. 電子線路課程設計[M].北京:北京電子工業出版社.2004.

[17] 陳卿,侯薇. 家電控制與檢測用集成電路[M].北京:中國計量出版社,2005. [20] 何希才. 傳感器技術及應用[M]. 北京:北京航空航天大學出版社,2005.

[18] 余成波. 傳感器與自動檢測技術[M]. 北京:高等教育出版社,2004.

24

25

附錄

附錄1 整機電路原理圖

26

附錄2 超聲波溫度和速度的關系

27

28

附錄3 部分源程序

溫度補償程序 void init2() {

//T2CON=0x0c;

RCAP2H=(65536-5)/256; RCAP2L=(65536-5)%256; TH2=(65536-5)/256; TL2=(65536-5)%256; EA=1; ET2=1; TR2=1;

// PT2=1; //T2}

void main() {

init1(); //xianshi(); //init2(); //T2tx=0;

IT0=0; //init(); //while(1); }

void timer1() interrupt 3 {

tx=~tx; k++; if(k==3) { k=0; TR0=0;

設為高優先級 液晶初始化 溫度字母 初始化 外部中斷低電平觸發定時器初始化 29

TR0=1;

delaynus(6); //除共振 EX0=1;

//for(d=0;d

void int0() interrupt 0 {

IE0=0; //中斷觸發位 EX0=0; //關中斷 TR1=0; ET1=0; TR0=0; ET0=0;

date=TH0*256+TL0; date+=500; if(TZ>=0&&TZ

jl=(date*0.161); }

if(TZ>10&&TZ

jl=(date*0.169); }

if(TZ>20&&TZ

jl=(date*0.172); }

if(TZ>30&&TZ

jl=(date*0.174); }

30

if(TZ>40&&TZ

jl=(date*0.175); }

xianshic();

for(d=800;d>0;d--); TH0=0x00; TL0=0x00; ET1=1; TR1=1; O++; if(O==100) { O=0; TR1=0; ET1=0; TR2=1; ET2=1; }

}

void timer0() interrupt 1 //{ TR1=0; TR0=0; TH0=0X00; TL0=0X00; TR1=1; }

void timer2() interrupt 5 { TF2=0; EXF2=0; TR2=0;

31

計時

ET2=0;

xianshi(); //溫度字母 readyread(); TL=readonechar(); TH=readonechar(); TZ=TH*16+TL/16; xianshiwen(TZ); delay(10); TR1=1; }

#include //調用單片機頭文件

#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255 #define uint unsigned int #include #include

//數碼管段選定義 0 1 2 3 4 5 6

0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

7 8 9 //斷碼

uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //數碼管位選定義

uchar code smg_we[]={0xe0,0xd0,0xb0,0x70};

uchar dis_smg[8] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; uint code wendu_buchang1[46] = {

//溫度補償表格

// 0-9度 //10-19度 //20-29度 //30-39度

//40-45度

331,332,333,333,334,334,335,336,336,337, 337,338,339,339,340,341,341,342,342,343, 343,344,345,345,346,346,347,348,348,349, 349,350,351,351,352,352,353,354,354,355, 355,356,357,357,358,358 };

sbit smg_we1 = P3^4; sbit smg_we2 = P3^5; sbit smg_we3 = P3^6; sbit smg_we4 = P3^7;

32

ET1=1;

//無符號整型 宏定義 變量范圍0~65535

//數碼管位選定義

sbit dq = P2^4; //18b20 IO口的定義 uint temperature ; // sbit c_send = P3^2; sbit c_recive = P3^3;

//超聲波發射 //超聲波接收

sbit beep = P2^3; //蜂鳴器IO口定義 uchar smg_i = 3; //顯示數碼管的個位數 bit flag_300ms ;

long distance; //距離 uint set_d; //距離 uchar flag_csb_juli; //超聲波超出量程

uint flag_time0; //用來保存定時器0的時候的 uchar menu_1; //菜單設計的變量

/***********************小延時函數*****************************/ void delay_uint(uint q) { while(q--); }

/**********************1ms延時函數****************************/ void delay_1ms(uint q) { uint i,j; for(i=0;i

/**********************處理距離函數***************************/ void smg_display() {

dis_smg[0] = smg_du[distance % 10]; dis_smg[1] = smg_du[distance / 10 % 10]; dis_smg[2] = smg_du[distance / 100 % 10] & 0x7f; }

/***************把數據保存到單片機內部eeprom中****************/ void write_eeprom()

33

{

SectorErase(0x2000);

byte_write(0x2000, set_d % 256); byte_write(0x2001, set_d / 256); byte_write(0x2058, a_a); }

/******************把數據從單片機內部eeprom中讀出來*****************/ void read_eeprom() {

set_d = byte_read(0x2001); set_d

set_d |= byte_read(0x2000); a_a = byte_read(0x2058); }

/**************開機自檢eeprom初始化*****************/ void init_eeprom() {

read_eeprom(); if(a_a != 1) { set_d = 50; a_a = 1; write_eeprom(); } }

/********************獨立按鍵程序*****************/ uchar key_can; //按鍵值 void key() //獨立按鍵程序 {

static uchar key_new;

key_can = 20; //按鍵值還原 P2 |= 0x07;

if((P2 & 0x07) != 0x07)

//按鍵按下

34

//先讀

//新的單片機初始單片機內問eeprom

{

delay_1ms(1); //按鍵消抖動 if(((P2 & 0x07) != 0x07) && (key_new == 1)) {

//確認是按鍵按下

key_new = 0; switch(P2 & 0x07) {

case 0x06: key_can = 3; break; case 0x05: key_can = 2; break; case 0x03: key_can = 1; break; } } } else key_new = 1; }

/*******************數碼管的位選******************/ void smg_we_switch(uchar i) { switch(i) {

case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break; case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break; case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break; case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break; } }

/***********************數碼顯示函數***************************/ void display() {

static uchar i; i++; if(i >= smg_i)

35

//得到k2鍵值 //得到k3鍵值 //得到k4鍵值

i = 0;

smg_we_switch(i); P1 = dis_smg[i]; }

/***********************18b20初始化函數************************/ void init_18b20() { bit q; dq = 1; dq = 0; dq = 1; q = dq; dq = 1; }

/*******************寫18b20內的數據*********************/ void write_18b20(uchar dat) { uchar i; for(i=0;i

//寫數據是低位開始

dq = 0;

//把總線拿低寫時間隙開始

//把總線拿高 //給復位脈沖 //750us

//把總線拿高 等待 //110us

//讀取18b20初始化信號 //200us

//把總線拿高 釋放總線

delay_uint(1); //15us delay_uint(80); delay_uint(10); delay_uint(20);

//位選 //段選

dq = dat & 0x01; //向18b20總線寫數據了 delay_uint(5); // 60us dq = 1; dat >>= 1; } }

/*******************讀取18b20內的數據*********************/ uchar read_18b20()

36

//釋放總線

{

uchar i,value; for(i=0;i

//把總線拿低讀時間隙開始 //讀數據是低位開始 //釋放總線 //開始讀寫數據

value >>= 1; if(dq == 1) value |= 0x80;

delay_uint(5); //60us 讀一個時間隙最少要保持60us的時間 }

return value; }

/******************讀取溫度的值、讀出來的是小數***************/ uint read_temp() { uint value; uchar low; init_18b20();

//在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關 //初始化18b20

了,否則會影響到18b20的時序

write_18b20(0xcc); //跳過64位ROM write_18b20(0x44); //啟動一次溫度轉換命令 delay_uint(50); init_18b20();

//500us //初始化18b20

//返回數據

write_18b20(0xcc); //跳過64位ROM write_18b20(0xbe); //發出讀取暫存器命令 EA = 0;

low = read_18b20(); //讀溫度低字節 value = read_18b20(); //讀溫度高字節 EA = 1; value

//把溫度的高位左移8位

//把讀出的溫度低位放到value的低八位中 //轉換到溫度值

37

value *= 0.0625;

return value; }

//返回讀出的溫度

/*********************小延時函數********************/ void delay() {

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }

/*********************超聲波測距程序************************/ void send_wave() {

c_send = 1; delay(); c_send = 0; TH0 = 0; TL0 = 0; TR0 = 0; TR0=1; while(c_recive) {

flag_time0 = TH0 * 256 + TL0;

if((flag_time0 > 40000)) //當超聲波超過測量范圍時,顯示3個888 {

38 //執行一條_nop_()指令就是1us

//10us的高電平觸發

//給定時器0清零

//關定時器0定時 //當c_recive為零時等待

while(!c_recive);

//當c_recive為1計數并等待

TR0 = 0; flag_csb_juli = 2; distance = 888; break ; } else {

flag_csb_juli = 1; } }

if(flag_csb_juli == 1) { TR0=0; //

//關定時器0定時 //讀出定時器0的時間

distance =flag_time0; 0.017M 算出來是米

if(temperature

distance *= wendu_buchang1[temperature] / 2.0 * 0.0001; // 0.017 = 340M / 2 = 170M = 0.017M 算出來是米

else

distance *= 358 / 2.0 * 0.0001; // 0.017 = 340M / 2 = 170M = 0.017M 算出來是米

if((distance > 500)) {

distance = 888; } } }

/*********************定時器0、定時器1初始化******************/ void time_init() {

EA = 1;

//開總中斷

TMOD = 0X11; //定時器0、定時器1工作方式1

39

distance *= 340 / 2 * 0.0001; // 0.017 = 340M / 2 = 170M =

//距離 = 速度 * 時間

//如果大于3.8m就超出超聲波的量程

ET0 = 1; TR0 = 1; ET1 = 1; TR1 = 1; }

//開定時器0中斷 //允許定時器0定時 //開定時器1中斷 //允許定時器1定時 1

/****************按鍵處理數碼管顯示函數***************/ void key_with() {

if(key_can == 1) //設置鍵

{

menu_1 ++; if(menu_1 >= 3) {

menu_1 = 0; smg_i = 3; //只顯示3位數碼管 }

if(menu_1 == 1) {

smg_i = 4; //只顯示4位數碼管 } }

if(menu_1 == 1) //設置報警

{

if(key_can == 2) {

set_d ++ ; //加1

if(set_d > 400) set_d = 400; }

if(key_can == 3) { set_d -- ;

//減1

if(set_d

40

set_d = 1; }

dis_smg[0] = smg_du[set_d % 10];

//取小數顯示

dis_smg[1] = smg_du[set_d / 10 % 10] ; //取個位顯示 dis_smg[2] = smg_du[set_d / 100 % 10] & 0x7f ; //取十位顯示 dis_smg[3] = 0x88; //a write_eeprom(); } }

/****************報警函數***************/ void clock_h_l() {

static uchar value; if(distance

value ++; //消除實際距離在設定距離左右變化時的干擾 if(value >= 2) {

beep = ~beep; //蜂鳴器報警 } } else {

value = 0; beep = 1; } }

/****************主函數***************/ void main() { beep = 0;

//開機叫一聲

delay_1ms(150); P0 = P1 = P2 = P3 = 0xff;

41 //保存數據

//取消報警

send_wave(); //測距離函數

smg_display(); //處理距離顯示函數 time_init(); //定時器初始化程序 init_eeprom(); //開始初始化保存的數據 send_wave(); send_wave(); while(1) {

if(flag_300ms == 1) {

flag_300ms = 0;

temperature = read_temp(); //先讀出溫度的值 clock_h_l(); //報警函數 send_wave();

//測距離函數

if(menu_1 == 0)

smg_display(); //處理距離顯示函數 if(menu_1 == 2) {

dis_smg[0] = 0xff;

dis_smg[1] = smg_du[temperature % 10]; //取溫度的個位顯示 dis_smg[2] = smg_du[temperature / 10 % 10] ; //取溫度的十位顯示 dis_smg[3] = 0xff; } } key(); {

key_with(); } } }

/********************定時器1中斷服務程序********************/ void time1_int() interrupt 3

42 //測距離函數 //測距離函數

//顯示溫度

//按鍵函數

if(key_can

//按鍵處理函數

{

static uchar value;

//定時2ms中斷一次

TH1 = 0xf8;

TL1 = 0x30; //2ms display(); //數碼管顯示函數

value++; if(value >= 150) { value = 0; flag_300ms = 1; } }

43

畢業設計(論文)原創性聲明和使用授權說明

原創性聲明

本人鄭重承諾:所呈交的畢業設計(論文),是我個人在指導教師的指導下進行的研究工作及取得的成果。盡我所知,除文中特別加以標注和致謝的地方外,不包含其他人或組織已經發表或公布過的研究成果,也不包含我為獲得 及其它教育機構的學位或學歷而使用過的材料。對本研究提供過幫助和做出過貢獻的個人或集體,均已在文中作了明確的說明并表示了謝意。

作 者 簽 名: 日 期: 指導教師簽名: 日 期:

使用授權說明

本人完全了解 大學關于收集、保存、使用畢業設計(論文)的規定,即:按照學校要求提交畢業設計(論文)的印刷本和電子版本;學校有權保存畢業設計(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務;學校可以采用影印、縮印、數字化或其它復制手段保存論文;在不以贏利為目的前提下,學校可以公布論文的部分或全部內容。

作者簽名: 日 期:

44

學位論文原創性聲明

本人鄭重聲明:所呈交的論文是本人在導師的指導下獨立進行研究所取得的研究成果。除了文中特別加以標注引用的內容外,本論文不包含任何其他個人或集體已經發表或撰寫的成果作品。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明。本人完全意識到本聲明的法律后果由本人承擔。

作者簽名: 日期: 年 月 日

學位論文版權使用授權書

本學位論文作者完全了解學校有關保留、使用學位論文的規定,同意學校保留并向國家有關部門或機構送交論文的復印件和電子版,允許論文被查閱和借閱。本人授權 大學可以將本學位論文的全部或部分內容編入有關數據庫進行檢索,可以采用影印、縮印或掃描等復制手段保存和匯編本學位論文。

涉密論文按學校規定處理。

作者簽名: 日期: 年 月 日

45

導師簽名: 日期: 年 月 日

46

【基于單片機的超聲波測距儀的設計與實現畢業論文】相關文章:

基于單片機的交通燈控制系統設計與實現05-02

基于.NET的教學平臺的設計與實現04-29

基于超聲波的汽車防撞報警系統的設計04-26

基于PDA的管線測量系統的設計與實現04-27

基于WebGIS的稅務征管系統設計與實現04-28

基于ARCGIS的數字校園系統的設計與實現05-02

基于WebGIS的稅務征管系統設計與實現04-29

基于超聲波測距的自適應倒車雷達設計05-02

基于ArcIMS的校園WebGIS系統設計與實現04-29

基于COM+的WebGIS系統設計與實現04-30