超声波传感器探测距离实验

超声波传感器探测距离实验

#实验目的:通过控制超声波传感器(HC-SR04)不断发送超声波,然后利用超声波遇物体检反射的特性,检测接收超声波的反馈时间,从而计算出前方物体的实时距离。
#接线效果如图:
接线示例
注:
1、发送超声波需要至少10微妙的高电平;
2、Trig发送声波时,会同时把Echo置为高电平;但是两者之间有微小的时间差;此时记录开始时间,当声波遇到物体回传被Echo接收到后,Echo会被置为低电平;因此检测Echo的由高电平到低电平的时间即可计算传输时间;
3、将得到的时间/2,即可得到单次距离所用的时间;然后乘以声音的速度(340m/s),即可得到距离。
#实验代码
实验代码

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.shumeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库

triggerPin = 18  ##trigger英文含义触发 用来发送声波
echoPin    = 19  ##echo 英文含义回声、回响 用来接收声波

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(triggerPin, GPIO.OUT)  ##设置trigger为输出状态
GPIO.setup(echoPin, GPIO.IN)      ##设置echo为接收状态
GPIO.output(triggerPin, GPIO.LOW) ##初始化trigger

##封装单次声波发送-回收函数
def getDistance():
    GPIO.output(triggerPin, GPIO.HIGH)  ##高电平发送声波
    time.sleep(0.000010)                ##声波保持10微妙
    GPIO.output(triggerPin, GPIO.LOW)   ##停止发送声波

    while GPIO.input(echoPin) == GPIO.LOW:  ##等待echoPin生成高电平
        pass

    startTime = time.time()             ##echoPin高电平状态 说明检测开始
    while GPIO.input(echoPin) == GPIO.HIGH:  ##等待echoPin接收到信号并拉低电平
        pass

    stopTime = time.time()              ##记录拉低电平的时间 也就是收到声波的时间
    print '检测到距离'

    useTime = stopTime-startTime        ##单位秒
    return (useTime*340)/2              ##声音传播速度340m/s 暂不考虑温度和气压影响

try:
    while True:
        distance = getDistance()  ##执行测距
        print '距离是:%0.4f米' %distance
        time.sleep(0.5)           ##0.5秒检测一次 可调整

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验过程
1、准备一把尺子作为校验物;
2、通过移动障碍物,会看到屏幕显示距离的动态变化;
检测结果
#视频效果如下:
jiujiang

评论已关闭。