2012年10月10日

Arduino 動手玩(1)HC-SR04 超音波模組簡易範例

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 燈閃爍,當距離愈近閃爍速度就會愈快。

範例程式碼:

實際測試影片:


延伸閱讀:
  1. Ultrasonic Ranging Module - HC-SRO4 + Arduino
  2. HC-SR04 超音波感測器介紹

13 則留言:

  1. 感謝!這真是篇值得參考的文章,小弟最近才開始玩arduino,感謝大大的分享。

    也順便分享一下:

    小弟在進行這個實做的時候,發現有時候板子會整個呆掉,不知道為什麼。

    用了Serial.println把PulseIn回傳的信號印出來看才知道,這個模組有時傳回的信號是帶負號的,我的delay time又用了PulseIn回傳的信號作為參數,所以板子就傻了。

    回覆刪除
  2. 請問pulseIn這個函數的回傳值是什麼?
    是兩個脈波之間的距離嗎?還是有其他的定義?

    回覆刪除
  3. 可以參考 http://arduino.cc/en/Reference/pulseIn

    回覆刪除
  4. 很實用的補充說明,謝謝分享!

    回覆刪除
  5. 感謝lyhcode大的快速回覆:-)
    從網站的說明 ,pulseIn()函數傳回的是脈波的寬度,可是從lyhcode大的程式,傳回的好像是兩個脈波的時間差?請問哪個才是正確的,還是有其他的解釋?

    回覆刪除
  6. 針對 Ultrasonic 使用 pulseIn 可參考官方的說明 http://arduino.cc/en/Tutorial/Ping

    這個範例的 58 是從 74*2/2.54=58.26 四捨五入取得

    回覆刪除
  7. 請問一下人體經過的話沒有反射回去是不是就不會偵測到?
    我用平面的東西就可測 但是人來回走動卻感應不到

    回覆刪除
  8. 因為偵測時間有間隔,如果沒有停一段時間,就會沒感應到~可以將偵測的時間間隔調低

    回覆刪除
  9. 可是我站在前方大約40公分處很久都沒反應...大概要10公分左右才會有反應,我有把cm給印出來看,沒感應時是印出529,然後拿一個平面的東西測最遠大約40公分以後就會感應不到,也不知道是不是元件的問題?我在慢慢試試看吧

    回覆刪除
  10. 不知道大大有沒有用過紅外線測距的?
    http://goods.ruten.com.tw/item/qa?21306089769359#detailhttp://goods.ruten.com.tw/item/qa?21306089769359#detail

    回覆刪除
  11. 大大請問一下 我用兩個超音波 可以控制兩組LED
    再用三顆超音波 為何第三顆就不能正常動作了??

    回覆刪除
  12. 請問一下,為什麼我照您的方式做的LED亮度很暗 P.S我電源來自USB

    回覆刪除
  13. 請問換成8051 ic 用 c去寫一樣的動作要怎麼寫?感恩!

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!