一、介绍
超声波传感器使用超声波来准确检测物体并测量距离。他发出超声波并将它们转换成电信号,主要应用于汽车的倒车雷达、机器人自动避障行走、建筑施工工地以及一些工业现场。
二、组件
★Raspberry Pi 3主板*1
★树莓派电源*1
★40P软排线*1
★超声波传感器模块*1
★面包板*1
★跳线若干
三、实验原理
该传感器有4个引脚:
VCC,超声波模块电源脚,接5V电源即可
Trig,超声波发送脚,高电平时发送出40KHZ出超声波
Echo,超声波接收检测脚,当接收到返回的超声波时,输出高电平5V
GND,超声波模块GND
注意:Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此需要加一个分压电路,这里由于返回的脉冲时间非常短,我没有加,能正常运行,但还是冒险了!
超声波是指频率大于20 kHz的在弹性介质中产生的机械震荡波,其具有指向性强、能量消耗缓慢、传播距离相对较远等特点,因此常被用于非接触测距。声音是由振动产生的,能够产生超声波的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。超声波探头主要由压电晶片组成,既可以发射超声波,也可以接收超声波。
常用的是压电式超声波发生器,是利用压电晶体的谐振来工作的。超声波传感器探头内部有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。 超声波传感器就是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换成超声波发射出去;而在接收时,则将超声振动转换成电信号。
超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。由于超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,因此超声波测距对环境有较好的适应能力,此外超声波测量在实时、精度、价格也能得到很好的折衷。
本实验中,HC-SR04超声波传感器通过发送声波,并计算声波返回超声传感器所需的时间来工作。通过往返时间检测法,它可以告诉我们物体相对于超声波传感器有多远。
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能, 测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。基本工作原理:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
(4)测试距离=(高电平时间*声速(340M/S))/2;
初始化时将trig和echo端口都置低,给Trig一个10US以上的高电平,模块开始工作,模块内自动发送八个40khz方波,并自主检测是否有电波返回。这时我们需要检测Echo处的电平,当为高电平的时候记一个时间;当Echo出为低电平的时候在记一个时间,这两个时间的差就是高电平持续的时间,然后用测距公式进行计算。
四、实验步骤
第1步:连接电路。
树莓派 | T型转接板 | 超声波测距模块 |
---|---|---|
GPIO0 | G17 | Trig |
GPIO1 | G18 | Echo |
5V | 5V | VCC |
GND | GND | GND |
第2步:编写控制程序。将手放在超声波测距模块上,观察屏幕上打印的距离数值。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
TRIG = 11 #send-pin
ECHO = 12 #receive-pin
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(TRIG, GPIO.OUT, initial = GPIO.LOW)
GPIO.setup(ECHO, GPIO.IN)
def distance():
GPIO.output(TRIG, 1) #给Trig一个10US以上的高电平
time.sleep(0.00001)
GPIO.output(TRIG, 0)
#等待低电平结束,然后记录时间
while GPIO.input(ECHO) == 0: #捕捉 echo 端输出上升沿
pass
time1 = time.time()
#等待高电平结束,然后记录时间
while GPIO.input(ECHO) == 1: #捕捉 echo 端输出下降沿
pass
time2 = time.time()
during = time2 - time1
#ECHO高电平时刻时间减去低电平时刻时间,所得时间为超声波传播时间
return during * 340 / 2 * 100
#超声波传播速度为340m/s,最后单位米换算为厘米,所以乘以100
def loop():
while True:
dis = distance()
print dis, 'cm'
print ''
time.sleep(0.3)
def destroy():
GPIO.cleanup()
if __name__ == "__main__":
setup()
try:
loop()
except KeyboardInterrupt:
destroy()