超聲波傳感器
超聲波是一種超出人類聽覺極限的聲波即其振動頻率高於20 kHz的機械波。超聲波傳感器在工作的時候就是將電壓和超聲波之間的互相轉換,當超聲波傳感器發射超聲波時,發射超聲波的探頭將電壓轉化的超聲波發射出去,當接收超聲波時,超聲波接收探頭將超聲波轉化的電壓回送到單片機控制芯片。超聲波具有振動頻率高、波長短、繞射現象小而且方向性好還能夠為反射線定向傳播等優點,而且超聲波傳感器的能量消耗緩慢有利於測距。在中、長距離測量時,超聲波傳感器的精度和方向性.都要大大優於紅外線傳感器,但價格也稍貴。
超聲波發射器向某一方向發射超聲波,在發射的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離s,即:s=340m/s× t / 2 。這就是所謂的時間差測距法。本實驗利用超聲波測得的距離從串口中顯示。
知識要點:
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); }