###### tags: `Arduino` 超音波感測器 HC-SR04 === ### 運作原理 為了要讓感測器發出超音波 要先trig腳位設為高電位10微秒 之後trig的發射器便會發出超音波 等到發出去的超音波反彈回來 Echo接收到了超音波 便會輸出超音波往返的時間 ![](https://i.imgur.com/CxD3VMm.png) 國中老師有教過我們 攝氏0度時海平面音速音速約為331.5公尺/秒 另外每升高1°C,音速就增加0.607公尺/秒 我們這邊假設溫度25度 根據公式 $V_{音速}=331.5(m/s)+0.607 \cdot t(℃)$ 最終可得 $V_{音速}=346.675(m/s)$ 1秒=1,000,000微秒 1公尺=100公分 再將音速換算成 公分/微秒 $V_{音速}=346.675(m/s) \cdot \dfrac{100cm}{1000000μs}=0.0346675(cm/μs)$ $X_{距離}=V_{速度} \times T_{時間}$ 由於我們得到的是音波來回的時間 所以要除以2 可得$X_{距離}(cm)=V_{速度}(cm/μs) \times \dfrac{T_{時間}(μs)}{2}$ 接著就可以寫程式了 ### 程式碼 這邊搭配個led 靠近就會亮 ```cpp=n #define trigPin 13 #define echoPin 12 #define led 8 void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(led, OUTPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); //初始化trig腳位 delayMicroseconds(2); digitalWrite(trigPin, HIGH); //發送超音波 delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration*0.0346675)/2; //LED控制 if (distance < 4) { digitalWrite(led,HIGH); }else { digitalWrite(led,LOW); } //輸出距離 if (distance >= 200 || distance <= 0){ Serial.println("Out of range"); } else { Serial.print(distance); Serial.println(" cm"); } delay(500); } ``` ### 成品 ![](https://i.imgur.com/DuHmAnF.jpg) ![](https://i.imgur.com/kC1YSlQ.jpg)