###### tags: `Arduino`
超音波感測器 HC-SR04
===
### 運作原理
為了要讓感測器發出超音波
要先trig腳位設為高電位10微秒
之後trig的發射器便會發出超音波
等到發出去的超音波反彈回來
Echo接收到了超音波 便會輸出超音波往返的時間

國中老師有教過我們
攝氏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);
}
```
### 成品

