1、超声波传感器
超声波传感器(Ultrasonic Sensor)是一种基于声学原理的电子传感器,通过发射超声波脉冲并接收反射信号来测量物体与传感器之间的距离,并用于检测物体的存在。它在现代科技和工业领域具有广泛的应用,以其高精度的测量能力和实时性成为不可或缺的工具。
超声波传感器的工作原理基于声波在空气中的传播特性。它通过发射超声波脉冲,将声波能量转化为机械波能量向目标物体传播。当声波遇到物体时,部分声波会被反射回来,再由传感器接收器接收到。通过测量从发射到接收的时间差,就可以计算出声波的传播时间,从而得到物体与传感器之间的距离。
超声波传感器具有许多优势。首先,它的测量范围较大,通常能够覆盖几厘米到数米的范围。其次,它具有高精度和高稳定性,能够提供准确的测量结果。另外,超声波传感器的响应速度很快,通常可以在毫秒级别内完成距离的测量。此外,超声波传感器对目标物体的特性没有太高的要求,可以适用于各种表面材质、颜色和透明度的物体。
超声波传感器在许多领域有着广泛的应用。在工业自动化中,超声波传感器常用于避障与导航系统,能够实时监测机器人或自动化设备周围的障碍物,从而避免碰撞或实现精确的定位。在环境监测方面,超声波传感器可以用于检测门窗的状态,人员进出等,实现安全、智能的管理系统。此外,在智能交通系统中,超声波传感器也被广泛应用于车辆停车辅助、智能灯光控制等方面,提高了交通安全性和效率。
除了工业和交通领域,超声波传感器在医疗、家电、消费电子等领域也有着重要的应用。例如,在医疗影像诊断中,超声波传感器可用于获取人体内部组织结构的图像,并帮助医生进行诊断和治疗。在家电领域,超声波传感器可用于洗衣机的水位控制、智能音箱的手势识别等。
2、HC-SR04
超声波传感器HC-SR04模块是一种常用的超声波测距模块,它基于超声波技术并结合了硬件和软件设计,可用于测量物体与传感器之间的距离。
HC-SR04模块主要由发射器(超声波发射器)、接收器(超声波接收器)和控制电路组成。通过发送超声波脉冲并接收其反射信号,模块可以计算出物体与传感器之间的距离。模块工作时,首先发送一个短时长的高频超声波脉冲,然后接收到反射回来的声波信号,并计算来回声波传播时间的差值。通过时间差和声波在空气中的传播速度,就可以得到物体与传感器之间的距离。
HC-SR04模块使用简便,通常只需提供5V电源供电,并通过控制IO口发送触发信号即可进行测量。在使用过程中,可以通过编程控制模块的触发引脚,从而实现测量距离的功能。模块输出的距离信息可以通过单片机或其他微控制器进行处理和利用。
HC-SR04模块具有较高的测距精度和稳定性,能够在2厘米到400厘米的范围内进行可靠的测量。它不受目标物体颜色、材质等因素的影响,并且具有快速响应的特点,可以在几十毫秒内完成一次测距操作。
由于其简单易用、成本低廉和可靠性高的特点,HC-SR04模块被广泛应用于机器人导航、避障控制、智能车辆、家电等各个领域。无论是学术研究还是实际应用,该模块都为用户提供了一种方便有效的超声波测距解决方案。
新版HC-SR04有4种工作模式选择,通过调整外部电阻来实现不同的工作模式,包括GPIO模式、UART模式、I2C模式和单总线模式。这些模式的切换主要通过在模块背面的R2和R3两个电阻位置安装不同阻值的电阻来实现。我们这里没有安装10K的电阻,所以默认是GPIO模式。
VCC:超声波模块电源脚,接5V电源即可
Trig:超声波发送脚,高电平时发送出40KHZ出超声波
Echo:超声波接收检测脚,当接收到返回的超声波时,输出高电平
GND:超声波模块GND
3、测距原理
树莓派向 Trig 脚发送一个 10us 的脉冲信号。
HC-SR04 接收到信号,开始发送超声波,并把 Echo置为高电平,然后准备接收返回的超声波。
HC-SR04 接收到返回的超声波,把 Echo 置为低电平。
Echo 高电平持续的时间就是超声波从发射到返回的时间间隔。
计算距离:
距离(单位:m) = (start - end) * 声波速度 / 2 ,声波速度取 343m/s 。然后再把测得的距离转换为 cm。
距离(单位:cm) = (start - end) * 声波速度 / 2 * 100
= (start - end) * 1
4、HC-SR04与树莓派连接(GPIO模式)
将HC-SR04模块连接到树莓派的GPIO引脚上。将HC-SR04的VCC引脚连接到树莓派的5V引脚,GND引脚连接到树莓派的地引脚,Trig引脚连接到树莓派的任意GPIO输出引脚(例如GPIO23),Echo引脚连接到树莓派的任意GPIO输入引脚(例如GPIO24)。
为了传感器的读数更加精确,需要使用680欧姆和1.5K欧姆的电阻将ECHO引脚上的电压转换为3.3V逻辑电压,并将其连接到树莓派的18号物理引脚上(GPIO24)
5、色环电阻标识
色环电阻是电子电路中最常用的电子元件,采用色环来代表颜色和误差,可以保证电阻无论按什么方向安装都可以方便、清楚地看见色环。色环电阻的基本单位是:欧姆(Ω)、千欧(KΩ)、兆欧(MΩ)。1000欧(Ω)=1千欧(KΩ),1000千欧(KΩ)=1兆欧(MΩ)。
色环电阻分三环、四环、五环和六环,通常用四环。
三环电阻第一色环是十位数,第二色环是个位数,第三色环代表倍率。用前三个色环来代表其阻值,如:39Ω,39KΩ,39MΩ。误差±20%
四环电阻的识别第一、二环分别代表两位有效数的阻值;第三环代表倍率;第四环代表误差。
五环电阻为精密电阻,前三环为数值,倒数第二环是乘数,最后一环还是误差色环,通常也是金、银和棕三种颜色,金的误差为5%,银的误差为10%,棕色的误差为1%,无色的误差为20%,另外偶尔还有以绿色代表误差的,绿色的误差为0.5%。精密电阻通常用于军事,航天等方面。
红黑黑棕棕色环电阻表示:红黑黑表示200,第四个棕色表示*10,最后一个棕色是误差1%。因此该电阻阻值为2K欧。还可以用万用表测量其阻值,打到20K欧姆档。我没有680欧姆和1.5K欧姆的电阻,就用1K和2K欧姆的电阻代替。
6、实验代码与现象
实验测量物体与传感器距离返回距离值(单位是CM),并且通过OLED显示。
import time
import RPi.GPIO as GPIO
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import luma.oled as oled
from luma.core.interface.serial import i2c
from luma.oled.device import ssd1306
from luma.core.render import canvas
WIDTH=128
HEIGHT=64
# 指定编号规则为BOARD
GPIO.setmode(GPIO.BOARD)
# 指定Trig和Echo的引脚编号
trig = 16
echo = 18
# 设置输出模式
GPIO.setup(trig, GPIO.OUT)
GPIO.setup(echo, GPIO.IN)
# 校准
GPIO.output(trig, False)
print("正在校准传感器")
time.sleep(2)
def get_distance():
"""返回到障碍物的距离"""
# 发射10微秒的信号
GPIO.output(trig, True)
time.sleep(0.00001)
# 结束发射
GPIO.output(trig, False)
# 检测回声信号
while GPIO.input(echo) == 0:
# 开始时间
start_time = time.time()
while GPIO.input(echo) == 1:
# 结束时间
end_time = time.time()
# 持续时间
duration = end_time - start_time
# 计算距离,单位为cm
distance = duration * 17150
return distance
def load_device():
# 创建I2C接口对象
serial = i2c(port=1, address=0x3C) # 地址可能因显示屏型号而异,由命令行“sudo i2cdetect -y 1”得到
# 创建OLED设备对象
device = ssd1306(serial, WIDTH, HEIGHT)
return device
if __name__ == '__main__':
device = load_device()
font = ImageFont.truetype('STKAITI.TTF',17)
try:
while True:
distance = get_distance()
print("距离是:", distance)
with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline=0, fill=0)
draw.text((0,0), "当前距离为:",font=font, fill='white')
draw.text((0,20), str(round(distance,2))+'厘米', font=font, fill="white")
time.sleep(2)
except KeyboardInterrupt:
print("程序结束!")
finally:
GPIO.cleanup()
如果不遮挡,最大的距离估计是200CM。