當(dāng)前位置: 首頁 > 傳感測量產(chǎn)品 > 工業(yè)傳感器 > 超聲波傳感器
發(fā)布日期:2022-10-09 點(diǎn)擊率:70
?
1.組件外觀:
?
HC-SR04 模塊可以測量 3cm - 4m 的距離,精確度可以達(dá)到 3mm。它包含了超聲波發(fā)射器、接收器和控制電路三部分。
?
2.接線方式
一共兩個(gè)電源引腳和兩個(gè)控制引腳。
Vcc 和 Gnd 接 5v DC 電源,但不推薦用獨(dú)立電源給它供電,應(yīng)使用樹莓派或單片機(jī)的 GPIO 口輸出 5v 和 Gnd 給它供電。不然會(huì)影響這個(gè)模塊的運(yùn)行。
Trig 引腳用來接收樹莓派的控制信號。接任意 GPIO 口。
Echo 引腳用來向樹莓派返回測距信息。接任意 GPIO 口。
(注意 Echo 返回的是 5v信號,而樹莓派的 GPIO 接收超過 3.3v 的信號可能會(huì)被燒毀,因此需要加一個(gè)分壓電路,博主沒有加,直接用杜邦線連的)。
?
3.工作原理
(1)樹莓派向 Trig 腳發(fā)送一個(gè) 10us 的脈沖信號。
(2) HC-SR04 接收到信號,開始發(fā)送超聲波,并把 Echo置為高電平,然后準(zhǔn)備接收返回的超聲波。
(3) HC-SR04 接收到返回的超聲波,把 Echo 置為低電平。
(4)Echo 高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間間隔。
(5)計(jì)算距離:
? ? 距離(單位:m) ?= ?(start - end) * 聲波速度 / 2?
? ? 聲波速度取 343m/s 。
? ? 然后再把測得的距離轉(zhuǎn)換為 cm。
? ? 距離(單位:cm) = (start - end) * 聲波速度 / 2 * 100?
? ? ? ? ? ? ? ? ? ? ? ? ? ? = (start - end) *
4、代碼
?
14、新手入手樹莓派教程--DHT11傳感器的使用
5、運(yùn)行結(jié)果
?
?
致謝:
1、樹莓派-超聲波測距(HC-SR04)的使用(Python)
2、樹莓派控制超聲波傳感器(C++)
3、基于樹莓派平臺(tái)的超聲波測距編程實(shí)現(xiàn)(C實(shí)現(xiàn))
4、樹莓派3 + HC-SR04超聲波測距模塊(好)
? ?超聲波測距應(yīng)用廣泛,本次實(shí)戰(zhàn)通過樹莓派B+連接HC-SR04超聲波測距傳感器,用python GPIO控制傳感器完成距離測定,并將距離顯示在屏幕上。
硬件部分:
1,HC-SR04超聲波測距傳感器
? ? ? ?1.1 HC-SR04超聲波測距傳感器硬件如下圖
? ?
該傳感器有4個(gè)引腳:
VCC,超聲波模塊電源腳,接5V電源即可
Trig,超聲波發(fā)送腳,高電平時(shí)發(fā)送出40KHZ出超聲波
Echo,超聲波接收檢測腳,當(dāng)接收到返回的超聲波時(shí),輸出高電平
GND,超聲波模塊GND
?
?
1.2 HC-SR04超聲波模塊工作原理:
1)采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號;
2)模塊自動(dòng)發(fā)送8個(gè)40khz的方波,自動(dòng)檢測是否有信號返回;
3)有信號返回,通過IO口ECHO輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。測試距離=(高電平時(shí)間*聲速(340M/S))/2;
?
?
?
1.3?HC-SR04超聲波模塊使用方法
?
初始化時(shí)將trig和echo端口都置低,首先向給 trig 發(fā)送至少10 us的高電平脈沖(模塊自動(dòng)向外發(fā)送8個(gè)40K的方波),然后等待,捕捉 echo 端輸出上升沿,捕捉到上升沿的同時(shí),打開定時(shí)器開始計(jì)時(shí),再次等待捕捉echo的下降沿,當(dāng)捕捉到下降沿,讀出計(jì)時(shí)器的時(shí)間,這就是超聲波在空氣中運(yùn)行的時(shí)間,按照 測試距離=(高電平時(shí)間*聲速(340M/S))/2 就可以算出超聲波到障礙物的距離。
?
?
2、樹莓派B+ 引腳
?
3. ?樹莓派與超聲波模塊連線圖
?
?
? ? ?HC-SR04 ? ? ? ? ? ? ? ? ?
? ? Raspberry Pi B+ Physical ? ? ? ? ? ? ?
? ? ?說明 ? ? ? ? ? ?
VCC
2
+5V
Trig
38
GPIO.20
Echo
40
GPIO.21
GND
39
GND
?
?
?
軟件部分:
1、確認(rèn)python,python GPIO庫是否正確安裝
?在Raspbian中已經(jīng)預(yù)裝了Python2.7.9,直接在命令行輸入python即可看到如下信息
pi@raspberrypi:~ $ python
Python 2.7.9 (default, Mar ?8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
?
使用Python控制GPIO時(shí),常用的是raspberry-gpio-python模塊,在2016-05-27-raspbian-jessie版本的系統(tǒng)鏡像中,預(yù)裝了最新的版本v0.6.2,可以在Python中輸入下列命令查看:
>>> import RPi.GPIO as GPIO
>>> GPIO.VERSION
'0.6.2'
>>>
?
2、創(chuàng)建一個(gè)目錄hcsr04
pi@raspberrypi:~ $ cd /home/pi
pi@raspberrypi:~ $ mkdir hcsr04
?
pi@raspberrypi:~ $ cd hcsr04
3、創(chuàng)建python程序
在hcsr04目錄下創(chuàng)建一個(gè)名為hcsr04.py 的程序文件:
?
import RPi.GPIO as GPIO
import time
Trig_Pin = 20
Echo_Pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(Trig_Pin, GPIO.OUT, initial = GPIO.LOW)
GPIO.setup(Echo_Pin, GPIO.IN)
time.sleep(2)
def checkdist():
? ? GPIO.output(Trig_Pin, GPIO.HIGH)
? ? time.sleep(0.)
? ? GPIO.output(Trig_Pin, GPIO.LOW)
? ? while not GPIO.input(Echo_Pin):
? ? ? ? pass
? ? t1 = time.time()
? ? while GPIO.input(Echo_Pin):
? ? ? ? pass
? ? t2 = time.time()
? ? return (t2-t1)*340*100/2
try:
? ? while True:
? ? ? ? print 'Distance:%0.2f cm' % checkdist()
? ? ? ? time.sleep(1)
except KeyboardInterrupt:
? ? GPIO.cleanup()
?
然后執(zhí)行該程序
pi@raspberrypi:~ $ ?python hcsr04.py
?
驗(yàn)證測試
如圖在超聲波測距儀前放在障礙物,前后移動(dòng)超聲波測距儀,電腦屏幕上會(huì)顯示測得的距離,與直尺量的距離對比,可發(fā)現(xiàn)誤差不大。完全可以勝任小車壁障等用途。
?
?
?
因?yàn)樽鳂I(yè)要求使用c語言代碼,這里先附上一段摘自網(wǎng)上的代碼
感謝KalaerSun的c語言代碼,摘自
1 #include
既然我們已經(jīng)讀懂了代碼,接下來我們就是硬件方面的鏈接:
我們先來了解一下各個(gè)硬件分別開來的屬性。
1.樹莓派:
樹莓派的歷史我們在此不做過多的講解,其他硬件也暫且不講,我們先來看一下樹莓派上的引腳。
拿起樹莓派,將USB接口向下,面向你那起來,你會(huì)發(fā)現(xiàn)樹莓派右邊有兩列一共40個(gè)引腳,下邊這部分告訴了我們這些引腳各自的功能。
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5V | | |
| 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT5 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT5 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | OUT | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | ALT0 | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | ALT0 | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | OUT | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
我們重點(diǎn)來介紹這次試驗(yàn)用到的兩種引腳:
①.電源引腳:分為3.3V / 5V / 0V三種,其中0V代表接地
②.GPIO輸入輸出接口:這是非常重要的一類引腳,上圖中標(biāo)明了GPIO的就是這類接口,樹莓派GPIO接口只能輸入輸出數(shù)字信號(0&1等)
2.超聲波模塊
超聲波模塊的種類有很多,我們此處選擇的模塊型號為HC-SR04,本模塊的優(yōu)點(diǎn)為性能穩(wěn)定,測度距離精確,模塊高精度,盲區(qū)小。探測距離為2cm-450cm。
我們可以看到它一共有四個(gè)引腳:
Vcc:接5V電源(接1號引腳)
Trig:輸出端口(接16號引腳)
Echo:輸入端口(接18號端口)
Gnd:接地端(接6號端口)
3.杜邦線
杜邦線有三種類型,分別為公對母,母對母,公對公。我們這里需要的是四條母對母的杜邦線。
接下來我們就用杜邦線將超聲波模塊與樹莓派連接,連接時(shí)一定要注意引腳之間的對應(yīng)關(guān)系。連接成功后如下
連接成功后我們就開始測試程序了,先將程序編譯成可執(zhí)行的二進(jìn)制文件
之后輸入ls 查看,我們發(fā)現(xiàn)有編譯成功后的disMeasure文件
之后我們輸入sudo 開始執(zhí)行程序,程序運(yùn)行效果如下。
到此,我們的超聲波模塊測距部分就算完美收工了。
以上就是超聲波模塊測距的c的代碼和解析的部分了,希望能對大家的樹莓派學(xué)習(xí)有幫助。
作為最常見的傳感器,本篇實(shí)現(xiàn)超聲波測距傳感的交互:
1. 首先把樹莓派GPIO結(jié)構(gòu)圖放上來:
圖一 樹莓派GPIO結(jié)構(gòu)圖
2. 接線
VCC,超聲波模塊電源腳,接5V電源即可
Trig,超聲波發(fā)送腳,高電平時(shí)發(fā)送出40KHZ出超聲波,接GPIO
Echo,超聲波接收檢測腳,當(dāng)接收到返回的超聲波時(shí),輸出高電平,接GPIO
GND,超聲波模塊GND
圖二 樹莓派和超聲測距傳感器的接線圖
網(wǎng)上教程指出5V的GPIO可能會(huì)燒掉板子,建議加電阻,這里沒有加也能運(yùn)行,自己有材料最好接上電阻。
3. 程序
#!?/usr/bin/python
#?-*-?coding:utf-8?-*-
import?RPi.GPIO as GPIO
import?time
def?checkdist():
GPIO.setmode(GPIO.BCM)
#發(fā)出觸發(fā)信號
GPIO.output(2,GPIO.HIGH)
#保持10us以上(我選擇15us)
time.sleep(0.)
GPIO.output(2,GPIO.LOW)
while?not?GPIO.input(3):
pass
#發(fā)現(xiàn)高電平時(shí)開時(shí)計(jì)時(shí)
t1?=?time.time()
while?GPIO.input(3):
pass
#高電平結(jié)束停止計(jì)時(shí)
t2?=?time.time()
#返回距離,單位為米
return?(t2-t1)*340/2
#第3號針,GPIO2
GPIO.setup(2,GPIO.OUT,initial=GPIO.LOW)
#第5號針,GPIO3
GPIO.setup(3,GPIO.IN)
time.sleep(2)
try:
while?True:
print?'Distance: %0.2f m'?%checkdist()
time.sleep(0.5)
except?KeyboardInterrupt:
GPIO.cleanup()
值得學(xué)習(xí)的模塊,而且很實(shí)用,測量精度也高,便宜好用。
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線路圖控制原