超聲波測距的原理很簡單,高中物理題不是做過很多次了么 :D
可以看到,知道時間間隔就能得到距離 L迫皱。
那么 HC-SR04 是怎么測距的呢?又怎么使用樹莓派控制它辖众??
HC-SR04 介紹
HC-SR04 模塊可以測量 3cm - 4m 的距離卓起,精確度可以達(dá)到 3mm。這個模塊包括 超聲波發(fā)射器凹炸、超聲波接收器和控制電路三部分戏阅。有 4 個引腳。
接線方式
4 個引腳由 2 個電源引腳(Vcc 啤它、GND)和 2 個控制引腳(Trig奕筐、Echo)組成。
Vcc 和 Gnd 接 5v DC 電源变骡,但不推薦用獨(dú)立電源給它供電离赫,應(yīng)使用樹莓派或單片機(jī)的 GPIO 口輸出 5v 和 Gnd 給它供電。不然會影響這個模塊的運(yùn)行塌碌。
Trig 引腳用來接收來自樹莓派的控制信號渊胸。接任意 GPIO 口。
Echo 引腳用來發(fā)送測距結(jié)果給樹莓派台妆。接任意 GPIO 口蹬刷。
(注意 Echo 返回的是 5v信號瓢捉,而樹莓派的 GPIO 接收超過 3.3v 的信號可能會被燒毀频丘,因此需要加一個分壓電路)
HC-SR04 的測距過程
1. 樹莓派向 Trig 腳發(fā)送一個持續(xù) 10us 的脈沖信號办成。
2. HC-SR04 接收到樹莓派發(fā)送的脈沖信號,開始發(fā)送超聲波 (start sending ultrasoun)搂漠,并把 Echo置為高電平迂卢。 ? ?然后準(zhǔn)備接收返回的超聲波。
3. 當(dāng) HC-SR04 接收到返回的超聲波 (receive returned ultrasound) 時桐汤,把 Echo 置為低電平而克。
從上述過程可以看出, Echo 高電平持續(xù)的時間就是超聲波從發(fā)射到返回所經(jīng)過的時間間隔 ~
請對照下圖怔毛,
電路圖與 python 程序
接線跟前文所說的一樣员萍。 GPIO 2 腳接 Trig , GPIO 3 腳接 Echo 拣度。樹莓派的 +5v 和 Gnd 與 HC-SR04 的 Vcc 和 Gnd 相連碎绎。還有一個分壓電路,一端接 Echo 抗果,另一端接 Gnd筋帖。
?1k 和 2k 電阻組成了一個分壓電路,使 GPIO 3 腳的電壓降到了 3.3v 左右冤馏。
python 程序
初始化相關(guān)引腳:
2 腳連 Trig 日麸,設(shè)為輸出模式; 3 腳連 Echo逮光,設(shè)為輸入模式代箭。
然后向 Trig 引腳輸入 10us 的脈沖:
time.sleep() ?接收的參數(shù)單位為 s ,于是把10 us 轉(zhuǎn)換為 0.00001 s 涕刚。
接收到這個脈沖后嗡综,HC-SR04 發(fā)射出超聲波,同時把 Echo 置為高電平副女。在發(fā)射之前蛤高,Echo 一直為低電平。
據(jù)此編寫程序碑幅,記錄超聲波發(fā)射時的時間戴陡。
然后記錄超聲波返回時的時間。
這樣就獲得了我們需要的數(shù)據(jù) pulse_start 和 pulse_end 沟涨,可以算出距離了~
測得距離(單位:m) ?= ?(pulse_end - pulse_start) * 聲波速度 / 2?
聲波速度取 343m/s 恤批。
然后再把測得的距離轉(zhuǎn)換為 cm。
測得距離(單位:cm) = (pulse_end - pulse_start) * 聲波速度 / 2 * 100?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?= ?(pulse_end - pulse_start) * 17150?
上面的代碼片段都是截圖裹赴,完整的文本程序地址 :?github.com/mozjiang/my_raspi/blob/master/ultrasonic_test.py