【雕爺學編程】Arduino動手做(58)---SR04超聲波傳感器


37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不定的問題,希望能夠拋磚引玉。 

【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)

實驗五十八: HC-SR04超聲波測距傳感器模塊(5針寬電壓)

超聲波探頭
是在超聲波檢測過程中發射和接收超聲波的裝置。探頭的性能直接影響超聲波的特性,影響超聲波的檢測性能。在超聲檢測中使用的探頭,是利用材料的壓電效應實現電能、聲能轉換的換能器。探頭中的關鍵部件是晶片,晶片是一個具有壓電效應的單晶或者多晶體薄片,它的作用是將電能和聲能互相轉換。

菲律賓眼鏡猴會用超聲波進行交流
菲律賓眼鏡猴因為一雙又圓又大且水汪汪的茶色大眼睛而被人們所知,在人們的印象中它有着讓人難以置信的小型身材,在它們小小的臉龐上,長着兩只圓溜溜的特別大的眼睛,眼珠的直徑可以超過1厘米,和它的小身體很不相稱,好像戴着一副特大的舊式老花眼鏡。所以,人們給它起了一個十分形象的名字:眼鏡猴。它們大多時候都是“沉默寡言”的形象。但來自加利福尼亞洪堡加州州立大學的科學家近日研究發現,其實菲律賓眼鏡猴是不折不扣的“話匣子”,它們時刻都在發出一種超聲波,只不過捕食者無法聽到而已。據了解,研究人員發現這種眼鏡猴發出聲音的“最小頻率”可達到67千赫,比陸地上任何一種嚙齒動物和蝙蝠發出的音量都要高很多,甚至偶爾還能飆升到70千赫。眾所周知,任何聲音只要達到20千赫以上,就很難被人們所聽見,就連聽力一向很敏銳的狗,也只能聽到23千赫的聲音。而眼鏡猴甚至可以直接聽到90千赫的聲音。最為特別的是,在眼鏡猴的群體中彼此傳遞着一種秘密的語言,這種語言會提醒對方注意捕食者的危險。研究人員表示,超聲波的音頻對信號發出者和接受者都十分有用,因為這樣捕食者就很難從聲音的來源進行定位,這樣尋找起來就十分有難度了。甚至眼鏡猴還可以在獵物旁“竊竊私語”,它們所捕捉的典型獵物為蟋蟀、螳螂、以及蛾子等昆蟲,最為特別的是,眼鏡猴還能自動屏蔽使它們分散注意力的低周波叢林噪音。研究人員表示,在動物王國不僅眼鏡猴有這樣的超能力,鯨魚和貓也同樣能夠在超聲波范圍內彼此溝通交流。

超聲波
蝙蝠和某些海洋動物都能夠利用高頻率的聲音進行回聲定位或信息交流。它們能通過口腔或鼻腔把從喉部產生的超聲波發射出去,利用折回的聲波來定向,並判定附近物體的位置、大小以及是否在移動。超聲波是一種頻率高於20000赫茲的聲波,它的方向性好,穿透能力強,易於獲得較集中的聲能,在水中傳播距離遠,可用於測距、測速、清洗、焊接、碎石、殺菌消毒等。在醫學、軍事、工業、農業上有很多的應用。超聲波因其頻率下限大於人的聽覺上限而得名。科學家們將每秒鍾振動的次數稱為聲音的頻率,它的單位是赫茲(Hz)。我們人類耳朵能聽到的聲波頻率為20Hz-20000Hz。因此,我們把頻率高於20000赫茲的聲波稱為“超聲波”。通常用於醫學診斷的超聲波頻率為1兆赫茲-30兆赫茲。理論研究表明,在振幅相同的條件下,一個物體振動的能量與振動頻率成正比,超聲波在介質中傳播時,介質質點振動的頻率很高,因而能量很大.在中國北方干燥的冬季,如果把超聲波通入水罐中,劇烈的振動會使罐中的水破碎成許多小霧滴,再用小風扇把霧滴吹入室內,就可以增加室內空氣濕度,這就是超聲波加濕器的原理。如咽喉炎、氣管炎等疾病,很難利用血流使葯物到達患病的部位,利用加濕器的原理,把葯液霧化,讓病人吸入,能夠提高療效。利用超聲波巨大的能量還可以使人體內的結石做劇烈的受迫振動而破碎,從而減緩病痛,達到治愈的目的。超聲波在醫學方面應用非常廣泛,可以對物品進行殺菌消毒。

超聲效應

當超聲波在介質中傳播時,由於超聲波與介質的相互作用,使介質發生物理的和化學的變化,從而產生一系列力學的、熱學的、電磁學的和化學的超聲效應,包括以下4種效應:

①機械效應。超聲波的機械作用可促成液體的乳化、凝膠的液化和固體的分散。當超聲波流體介質中形成駐波時,懸浮在流體中的微小顆粒因受機械力的作用而凝聚在波節處,在空間形成周期性的堆積。超聲波在壓電材料和磁致伸縮材料中傳播時,由於超聲波的機械作用而引起的感生電極化和感生磁化(見電介質物理學和磁致伸縮)。

②空化作用。超聲波作用於液體時可產生大量小氣泡。一個原因是液體內局部出現拉應力而形成負壓,壓強的降低使原來溶於液體的氣體過飽和,而從液體逸出,成為小氣泡。另一原因是強大的拉應力把液體“撕開”成一空洞,稱為空化。空洞內為液體蒸氣或溶於液體的另一種氣體,甚至可能是真空。因空化作用形成的小氣泡會隨周圍介質的振動而不斷運動、長大或突然破滅。破滅時周圍液體突然沖入氣泡而產生高溫、高壓,同時產生激波。與空化作用相伴隨的內摩擦可形成電荷,並在氣泡內因放電而產生發光現象。在液體中進行超聲處理的技術大多與空化作用有關。

③熱效應。由於超聲波頻率高,能量大,被介質吸收時能產生顯著的熱效應。

④化學效應。超聲波的作用可促使發生或加速某些化學反應。例如純的蒸餾水經超聲處理后產生過氧化氫;溶有氮氣的水經超聲處理后產生亞硝酸;染料的水溶液經超聲處理后會變色或退色。這些現象的發生總與空化作用相伴隨。超聲波還可加速許多化學物質的水解、分解和聚合過程。超聲波對光化學和電化學過程也有明顯影響。各種氨基酸和其他有機物質的水溶液經超聲處理后,特征吸收光譜帶消失而呈均勻的一般吸收,這表明空化作用使分子結構發生了改變。

超聲探頭
是利用超聲波的特性而研制的傳感器,超聲波傳感器的典型結構如圖所示。它是把成正方形的兩個壓電晶片(亦稱雙晶振子)按照相反的極性粘貼在一起,再引出兩個電極。壓電晶片上面有金屬震動板和圓錐形振子。圓錐形振子具有很強的方向性,便於發送和接收超聲波。超聲波傳感器采用金屬或塑料外殼,其頂部有屏蔽柵。

超聲探頭性能指標
探頭的核心是其塑料外套或者金屬外套中的一塊壓電晶片。構成晶片的材料可以有許多種。晶片的大小,如直徑和厚度也各不相同,因此每個探頭的性能是不同的,我們使用前必須預先了解它的性能。超聲波傳感器的主要性能指標包括:
1、工作頻率
工作頻率就是壓電晶片的共振頻率。當加到它兩端的交流電壓的頻率和晶片的共振頻率相等時,輸出的能量最大,靈敏度也最高。
2、工作溫度
由於壓電材料的居里點一般比較高,特別是診斷用超聲波探頭使用功率較小,所以工作溫度比較低,可以長時間地工作而不失效。醫療用的超聲探頭的溫度比較高,需要單獨的制冷設備。
3、靈敏度
主要取決於制造晶片本身。機電耦合系數大,靈敏度高;反之,靈敏度低。
4、指向性
超聲波傳感器探測的范圍。

測距原理
超聲波具有頻率較高,沿直線傳播、方向性好、繞射小、穿透力強、傳播速度慢(約340m/s,與聲速相同)等特點。超聲波對固體和液體的穿透能力強,尤其對於在陽光下不透明的固體,可以穿透幾十m的深度。超聲波遇到雜質或分界面時會產生反射波,利用這一特性可構成超聲波探傷儀或測距儀。超聲波遇到移動物體時會產生多普勒效應(DopplerEffect),使接收到的頻率發生變化,由此可制成多普勒測距系統。超聲波測距原理是超聲波發射探頭發出的超聲波脈沖,經媒質(空氣)傳到物體表面,反射后通過媒質(空氣)傳到接收探頭,測出超聲脈沖從發射到接收所需的時間,根據媒質中的聲速,求得從探頭到物體表面之間的距離。設探頭到物體表面的距離為L,超聲在空氣中的傳播速為v,從發射到接收所需的傳播時間為t,則有:L=vt/2。由此可見,被測距離L與傳播時間之間具有確定的函數關系,只要能測出時間t,即可求出距離L,通過軟件實現直接在顯示器上顯示L的值。

位差測距
超聲波傳感器與單片機系統進行接口構成距離檢測的硬件系統,在系統軟件的控制下,單片機向位差超聲波傳感器發送的一個觸發脈沖,位差超聲波傳感器被此脈沖觸發后會產生一道短40 kHz的脈沖電信號,此40 kHz的脈沖電信號通過激勵換能器處理以后,將轉換成機械振動的能量,其振動頻率約在20 kHz以上,由此形成了超聲波,該信號經錐形"輻射口"處將超聲波信號在空氣中以每秒約1 130英尺的速度向外發射出去。當發射出去的超聲波信號遇到障礙物以后,立即被反射回來。接收器接收到反射回來的超聲波信號后,通過其內部轉換,將超聲波變成微弱的電振盪,並將信號進行放大,就可得到所需的脈沖信號,此脈沖信號再返回給單片機,表示回波被探測,這個脈沖寬度就是對應於爆裂回聲返回到傳感器所需時間,其時序如圖所示。

HC-SR04超聲波測距傳感器模塊(5針寬電壓)

主要技術參數

1:使用電壓:DC---5V  

2:靜態電流:小於2mA     

3:電平輸出:高5V    

4:電平輸出:底0V      

5:感應角度:不大於15度   

6:探測距離:2cm-450cm 

7:  高精度 可達0.2cm   

8:  接線方式:VCC、trig(控制端)、 echo(接收端)、 GND

 

 

模塊電原理圖

模塊特征
HC-SR04超聲波測距模塊具有測距距離精確,能和SRF05,SRF02等超聲波測距相媲美,測量距離 ** 2cm~450cm (小編實測:10cm~300cm)。工作原理——1)采用IO觸發測距,給至少10us的高電平信號。2)模塊自動發送8個40KHz的方波,自動檢測是否有信號返回。3)有信號返回,通過IO輸出一高電平,高電平持續時間就是超聲波從發射到返回的時間。只需要提供一個10uS以上脈沖觸發信號,該模塊內部將發出8個40kHz周期電平並檢測回波。一旦檢測到有回波信號則輸出回響信號。回響信號的脈沖寬度與所測的距離成正比。由此通過發射信號到收到的回響信號時間間隔可以計算得到距離。公式: uS/58=厘米或者uS/148=英寸;或是:距離=高電平時間*聲速(340M/S) /2;建議測量周期為60ms以上,以防止發射信號對回響信號的影響。
注:
1、此模塊不宜帶電連接,若要帶電連接,則先讓模塊的GND端先連接,否則會影響模塊的正常工作。
2、測距時,被測物體的面積不少於05平方米且平面盡量要求平整,否則影響測量的結果。

 

 

 

使用高電平觸發

超聲波測距模塊接腳:

VCC -> 5V

GND -> GND

Trig (控制端)-> 2

Echo (接收端)-> 3

注: TRIP引腳是內部上拉10K的電阻,用單片機的IO口拉低TRIP引腳,然后給一個10us以上的脈沖信號。模塊應先插好在電路板上再通電,避免產生高電平的誤動作,如果產生了,重新通電方可解決。

 

/*

【Arduino】168種傳感器模塊系列實驗(58)

實驗五十八: HC-SR04超聲波測距傳感器模塊(通用款)

Echo接Digital 3口,接收距離信號

Trig接Arduino板的Digital 2口,觸發測距

上電后預熱穩定大約需要60秒鍾

*/

 

float      distance;

const int  echo=3;                          //echO接D3腳

const int  trig=2;                          //echO接D2腳

void setup()

{

  Serial.begin(9600);                       //波特率9600

  pinMode(echo,INPUT);                       //設置echo為輸入腳

  pinMode(trig,OUTPUT);                      //設置trig為輸出腳

  Serial.println("HC-SR04-2019.7.14測距開始:");

}

void loop()

{

 digitalWrite(trig,LOW);

 delayMicroseconds(20); 

 digitalWrite(trig,HIGH);

 delayMicroseconds(20);

 digitalWrite(trig,LOW);                     //發一個20US的高脈沖去觸發Trig

 

 distance  = pulseIn(echo,HIGH);             //計數接收高電平時間

 distance  = distance*340/2/10000;           //計算距離 1:聲速:340M/S  2:實際距離1/2聲速距離 3:計數時鍾為1US

 Serial.print("距離: ");

 Serial.print(distance);

 Serial.println("cm");

 delay(20);                                   //單次測離完成后加20mS的延時再進行下次測量。防止近距離測量時,測量到上次余波,導致測量不准確。

 delay(500);                                  //500mS測量一次

} 

  

/*

【Arduino】168種傳感器模塊系列實驗(58)

實驗五十八: HC-SR04超聲波測距傳感器模塊(通用款)

程序之二,闕值50厘米控制板載LED

Echo接Digital 3口,接收距離信號

Trig接Arduino板的Digital 2口,觸發測距

上電后預熱穩定大約需要60秒鍾

HC-SR04為簡單通用款,沒有溫度補償,實測200CM段誤差約3CM

*/

intinputPin=3;// 定義超聲波信號接收接口

intoutputPin=2;// 定義超聲波信號發出接口

intledpin=13;

void setup()

{

Serial.begin(9600);

pinMode(ledpin,OUTPUT);

pinMode(inputPin, INPUT);

pinMode(outputPin, OUTPUT);

}

void loop()

{

digitalWrite(outputPin, LOW);// 使發出發出超聲波信號接口低電平2μs

delayMicroseconds(2);

digitalWrite(outputPin, HIGH);// 使發出發出超聲波信號接口高電平10μs,這里是至少10μs

delayMicroseconds(10);

digitalWrite(outputPin, LOW);// 保持發出超聲波信號接口低電平

intdistance = pulseIn(inputPin, HIGH);// 讀出脈沖時間

distance= distance/58;// 將脈沖時間轉化為距離(單位:厘米)

Serial.println(distance);//輸出距離值

delay(50);

if(distance >=50)

{//如果距離大於50厘米小燈亮起

digitalWrite(ledpin,LOW);

}//如果距離小於50厘米小燈熄滅

else

digitalWrite(ledpin,HIGH);

}

/*

【Arduino】168種傳感器模塊系列實驗(58)

實驗五十八: HC-SR04超聲波測距傳感器模塊(通用款)

程序之三,串口輸出等待時間的原始數據

Echo接Digital 3口,接收距離信號

Trig接Arduino板的Digital 2口,觸發測距

上電后預熱穩定大約需要60秒鍾

HC-SR04為簡單通用款,沒有溫度補償,實測200CM段誤差約3CM

*/

#define Trig 2

#define Echo 3

floatcm;//距離變量

floattemp;

void setup() {

Serial.begin(9600);

  pinMode(Trig, OUTPUT);

  pinMode(Echo, INPUT);

}

void loop() {

//給Trig發送一個低高低的短時間脈沖,觸發測距

digitalWrite(Trig, LOW);//給Trig發送一個低電平

delayMicroseconds(2);//等待 2微妙

digitalWrite(Trig,HIGH);//給Trig發送一個高電平

delayMicroseconds(10);//等待 10微妙

digitalWrite(Trig, LOW);//給Trig發送一個低電平



temp =float(pulseIn(Echo, HIGH));//存儲回波等待時間,

//pulseIn函數會等待引腳變為HIGH,開始計算時間,再等待變為LOW並停止計時

//返回脈沖的長度



//聲速是:340m/1s 換算成 34000cm / 1000000μs => 34 / 1000

//因為發送到接收,實際是相同距離走了2回,所以要除以2

//距離(厘米)  =  (回波時間 * (34 / 1000)) / 2

//簡化后的計算公式為 (回波時間 * 17)/ 1000



cm = (temp *17)/1000;//把回波時間換算成cm

Serial.print("Echo =");

Serial.print(temp);//串口輸出等待時間的原始數據

Serial.print(" | | Distance = ");

Serial.print(cm);//串口輸出距離換算成cm的結果

Serial.println("cm");

delay(500);

}

  

實驗圖形編程(Mind+,編玩邊學)

 

 

實驗仿真編程(linkboy3.6)

網上搜索了一下,超聲波模塊的型號還不少,比如還有HY-SRF05(五針高精度);US-025和US-026(蘇州順憬志聯CS100芯片,距離6米穩定性好些);US-100(同時具有GPIO,串口等多種通信方式,內帶看門狗,工作穩定可靠);RCWL-1601(寬電壓,對棉質及不規則物體探測精度高於SR-04);RCWL-1603(含有UART,PWM,GPIO及UART AUTO OUT等多種接口模式,專業MCP9700溫度補償);US-015(目前市場上分辨率最高,重復測量一致性最好的超聲波測距模塊)等,以后待手頭有實物了再做后續實驗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM