![]() |
Arduino + HC-SR04 超音波測距模組 |
這個範例使用 Motoduino(相容 ATmega328)主板,以及 HC-SR04 超音波測距模組,都是拍賣很容易找到的 Arduino 周邊零件。
HC-SR04 有 4 個 PIN 腳,測距範圍從 2 公分至 4 公尺,測量角度約 15 度。
Working Voltage: DC 5 V
Working Current: 15mA
Working Frequency: 40Hz
Max Range: 4m
Min Range: 2cm
MeasuringAngle: 15 degree
Trigger Input Signal: 10uS TTL pulse
Echo Output Signal: Input TTL lever signal and the range in proportion
Dimension: 45*20*15mm
![]() |
圖片來源:Let's Make Robot |
這段程式碼使用 HC-SR04 測距,將結果換算成公分單位,如果偵測到前方物體距離小於一公尺,就會讓 LED 燈閃爍,當距離愈近閃爍速度就會愈快。
範例程式碼:
實際測試影片:
延伸閱讀:
感謝!這真是篇值得參考的文章,小弟最近才開始玩arduino,感謝大大的分享。
回覆刪除也順便分享一下:
小弟在進行這個實做的時候,發現有時候板子會整個呆掉,不知道為什麼。
用了Serial.println把PulseIn回傳的信號印出來看才知道,這個模組有時傳回的信號是帶負號的,我的delay time又用了PulseIn回傳的信號作為參數,所以板子就傻了。
請問pulseIn這個函數的回傳值是什麼?
回覆刪除是兩個脈波之間的距離嗎?還是有其他的定義?
可以參考 http://arduino.cc/en/Reference/pulseIn
回覆刪除很實用的補充說明,謝謝分享!
回覆刪除感謝lyhcode大的快速回覆:-)
回覆刪除從網站的說明 ,pulseIn()函數傳回的是脈波的寬度,可是從lyhcode大的程式,傳回的好像是兩個脈波的時間差?請問哪個才是正確的,還是有其他的解釋?
針對 Ultrasonic 使用 pulseIn 可參考官方的說明 http://arduino.cc/en/Tutorial/Ping
回覆刪除這個範例的 58 是從 74*2/2.54=58.26 四捨五入取得
請問一下人體經過的話沒有反射回去是不是就不會偵測到?
回覆刪除我用平面的東西就可測 但是人來回走動卻感應不到
因為偵測時間有間隔,如果沒有停一段時間,就會沒感應到~可以將偵測的時間間隔調低
回覆刪除可是我站在前方大約40公分處很久都沒反應...大概要10公分左右才會有反應,我有把cm給印出來看,沒感應時是印出529,然後拿一個平面的東西測最遠大約40公分以後就會感應不到,也不知道是不是元件的問題?我在慢慢試試看吧
回覆刪除不知道大大有沒有用過紅外線測距的?
回覆刪除http://goods.ruten.com.tw/item/qa?21306089769359#detailhttp://goods.ruten.com.tw/item/qa?21306089769359#detail
大大請問一下 我用兩個超音波 可以控制兩組LED
回覆刪除再用三顆超音波 為何第三顆就不能正常動作了??
請問一下,為什麼我照您的方式做的LED亮度很暗 P.S我電源來自USB
回覆刪除請問換成8051 ic 用 c去寫一樣的動作要怎麼寫?感恩!
回覆刪除