###### 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); } ``` ### 成品  
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.