「外設1」超聲波傳感器的驅動

一、簡介

本文介紹如何用51STC單片機驅動超聲波傳感器來實現測距等功能。

二、實驗平臺

單片機型號:STC12C5A60S2

外設模塊型號:HC-SR04

編譯軟件:KEIL

硬件平臺:達芬奇51開發版

三、版權聲明

博主:老蔡玩科技(caibinguitar)

聲明:喝水不忘挖井人,轉載請註明出處。

抖音:laocaiwankeji

四、講解

  超聲波傳感器對於51單片機外設來講是很常見的,它的工作原理也很簡單,所以看到此篇博客的同學按照我的步驟往下看完,一定會學明白的,如果有不明白的就暫停一下,自己想一想或者百度一下,再或者在下面留言,我會及時回覆的。

4.1 超聲波傳感器原理

  由於超聲波指向性強,能量消耗緩慢,在介質中傳播的距離較遠,因而超聲波經常用於距離的測量,如測距儀和物位測量儀等都可以通過超聲波來實現。超聲波發射器向某一方向發射超聲波,在發射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離(s),即:s=340t/2 。這就是所謂的時間差測距法。  超聲波測距的原理是利用超聲波在空氣中的傳播速度為已知,測量聲波在發射後遇到障礙物反射回來的時間,根據發射和接收的時間差計算出發射點到障礙物的實際距離。由此可見,超聲波測距原理與雷達原理是一樣的。

      測距的公式表示為:L=C×T

  式中L為測量的距離長度;C為超聲波在空氣中的傳播速度;T為測量距離傳播的時間差(T為發射到接收時間數值的一半)。  HC-SR04超聲波模塊可提供2cm~400cm的距離感測功能,測量精度可以達到3mm。模塊包括超聲波發射器,接收器與控制電路。

基本工作原理

  1. 採用Trig引腳觸發,給至少10us的高電平脈衝信號
  2. 模塊自動發送8個40kHz的方波,自動檢測是否有信號返回
  3. 有信號返回,通過Echo引腳輸出一個高電平脈衝,高電平脈衝持續的時間就是超聲波從發射到反射返回的時間。距離=(高電平脈衝時間*340)/2
「外設1」超聲波傳感器的驅動

超聲波模塊資料

4.2 程序邏輯

「外設1」超聲波傳感器的驅動

image.png


4.2 用代碼來實現它

<code> 

void

main

(

void

)

{ TMOD=

0x01

; SCON=

0x10

; UartInit(); TH0=

0

; TL0=

0

; TR0=

1

; ET0=

1

; TI=

1

; EA=

1

;

while

(

1

) { LED1 = ~LED1; StartModule();

while

(!RX); TR0=

1

;

while

(RX); TR0=

0

; Conut(); delayms(

100

); } } /<code>

StartModule()

<code>

void

StartModule

()

{

unsigned

char

i, j, k; i =

68

; j =

61

; k =

50

; TX=

1

;

do

{

do

{

while

(--k); }

while

(--j); }

while

(--i); TX=

0

; } /<code>

void Conut(void)

<code>

void

Conut

(

void

)

{ time=TH0*

256

+TL0; TH0=

0

; TL0=

0

; S=(time*

1.87

)/

100

/

2

-

0.7

;

if

(flag==

1

) { flag=

0

;

printf

(

"-----\n"

); }

printf

(

"S=%f\n"

,S); } /<code>

休息一下 等會把代碼上傳到git上


分享到:


相關文章: