由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。
一、超声波测距原理
超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波在空气中的传播速度为 340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s =340t/2。
特点
- 频率越高,精度也越高,但检测距离越近(空气衰减增大);
- 输出功率越高、灵敏度越高,检测距离也越远;
- 通常检测角度小的,测距范围略远;
二、HC-SR04 模块
HC-SR04 超声波测距模块可提供约 2cm ~ 400cm 的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
工作原理
- 采用 IO 触发测距,给至少 10us 的高电平信号;
- 模块自动发送 8 个 40KHz 的方波,自动检测是否有信号返回;
- 有信号返回,通过 IO 输出一高电平,高电平持续时间就是超声波从发射到返回的时间。
主要技术参数
- 使用电压:DC 5V
- 静态电流:小于 2mA
- 电平输出:高 5V
- 电平输出:低 0V
- 感应角度:不大于 15 度
- 探测距离:2cm ~ 400cm
- 高精度:可达 0.3cm
板上接线方式,VCC、trig(控制端)、echo(接收端)、 out(空脚)、 GND
三、HC-SR04 模块使用
接线如下
树莓派 | HC-SR04 模块 |
---|---|
5V | Vcc |
GPIO17 | Trig |
GPIO18 | Echo |
GND | Gnd |
程序代码
#! /usr/bin/python
# -*- coding:utf-8 -*-import RPi.GPIO as GPIO
import timedef getdistance():#发出触发信号GPIO.output(11,GPIO.HIGH)#保持10us以上time.sleep(0.000015)GPIO.output(11,GPIO.LOW)while not GPIO.input(12):pass#发现高电平时开时计时t1 = time.time()while GPIO.input(12):pass#高电平结束停止计时t2 = time.time()#返回距离,单位为米return (t2-t1) * 340 / 2def loop():while True:print("Distance:" + str(getdistance()) + "m")time.sleep(0.5)if __name__ == "__main__":try:GPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)#第11号针,GPIO17GPIO.setup(11,GPIO.OUT,initial=GPIO.LOW)#第12号针,GPIO18GPIO.setup(12,GPIO.IN)time.sleep(1)loop()except KeyboardInterrupt:GPIO.cleanup()