18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 基礎入門 >> Arduino開發學習 >> 正文

Arduino示例教程超聲波測距實驗含程序代碼

作者:佚名    文章來源:網絡整理    點擊數:    更新時間:2024/11/2

超聲波傳(chuan) 感器

超聲波是一種超出人類聽覺極限的聲波即其振動頻率高於(yu) 20 kHz的機械波。超聲波傳(chuan) 感器在工作的時候就是將電壓和超聲波之間的互相轉換,當超聲波傳(chuan) 感器發射超聲波時,發射超聲波的探頭將電壓轉化的超聲波發射出去,當接收超聲波時,超聲波接收探頭將超聲波轉化的電壓回送到單片機控製芯片。超聲波具有振動頻率高、波長短、繞射現象小而且方向性好還能夠為(wei) 反射線定向傳(chuan) 播等優(you) 點,而且超聲波傳(chuan) 感器的能量消耗緩慢有利於(yu) 測距。在中、長距離測量時,超聲波傳(chuan) 感器的精度和方向性.都要大大優(you) 於(yu) 紅外線傳(chuan) 感器,但價(jia) 格也稍貴。

超聲波發射器向某一方向發射超聲波,在發射的同時開始計時,超聲波在空氣中傳(chuan) 播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。聲波在空氣中的傳(chuan) 播速度為(wei) 340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離s,即:s=340m/s× t / 2 。這就是所謂的時間差測距法。本實驗利用超聲波測得的距離從(cong) 串口中顯示。

HC-SR04超聲波測距模塊的接口定義(yi)

HC-SR04超聲波測距模塊的數據接口如上圖,與(yu) Arduino uno的接口連接方法:VCC接+5V,GND接地,Trig接數字I/O接口5(也可以是其它),Echo接數字I/O接口4(也可以是其它)。

 

知識要點:

pulseIn() :用於檢測引腳輸出的高低電平的脈衝寬度。
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Pin--- 需要讀取脈衝的引腳
Value ---需要讀取的脈衝類型, HIGH 或 LOW
Timeout ---超時時間,單位微秒,數據類型為無符號長整型。
使用方法及時序圖:
1 、使用 Arduino 采用數字引腳給 SR04 的 Trig 引腳至少 10 μ s 的高電平信號,觸發 SR04 模塊測距功能;
2 、觸發後,模塊會自動發送 8 個 40KHz 的超聲波脈衝,並自動檢測是否有信號返回。這步會由模塊內部自動完成。
3 、如有信號返回, Echo 引腳會輸出高電平,高電平持續的時間就是超聲波從發射到返回的時間。此時,我們能使用 pulseIn() 函數獲取到測距的結果,並計算出距被測物的實際距離。
/*
  日期:2014.10.24
  功能:利用SR04超聲波傳感器進行測距,並用串口顯示測出的距離值
  方式:1、使用Arduino采用數字引腳給SR04的Trig引腳至少10μs的高電平信號,觸發SR04模塊測距功能;
        2、觸發後,模塊會自動發送8個40KHz的超聲波脈衝,並自動檢測是否有信號返回。
        這步會由模塊內部自動完成。
        3、如有信號返回,Echo引腳會輸出高電平,高電平持續的時間就是超聲波從發射到返回的時間。
        此時,我們能使用pulseIn()函數獲取到測距的結果,並計算出距被測物的實際距離。
*/
// 設定SR04連接的Arduino引腳
const int TrigPin = 2; 
const int EchoPin = 3;
const int LedPin = 17;
float distance; 
void setup()                 // 初始化串口通信及連接SR04的引腳
{       
     Serial.begin(9600); 
      pinMode(TrigPin, OUTPUT);
     pinMode(TrigPin, OUTPUT);  
     pinMode(EchoPin, INPUT);  // 要檢測引腳上輸入的脈衝寬度,需要先設置為輸入狀態
    Serial.println("Ultrasonic sensor:");
} 
void loop() 
{ 
    // 產生一個10us的高脈衝去觸發TrigPin 
    digitalWrite(LedPin,HIGH); 
    delayMicroseconds(2); 
    digitalWrite(TrigPin,HIGH); 
    delayMicroseconds(10);
    digitalWrite(TrigPin,LOW); 
    // 檢測脈衝寬度,並計算出距離
    distance = pulseIn(EchoPin,HIGH);
    Serial.print(distance);
    Serial.print("ms");
    distance = distance/58; 
    distance = (int(distance*100.0))/100.0; //保留兩位小數 
    Serial.print(".....distance is:");
    Serial.print(distance); 
    Serial.print("cm"); 
    Serial.println(); 
    delay(1000);  
}
Tags:超聲波測距,Arduino,超聲波  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢