wjzc2006 发表于 2014-7-26 01:32:58

SR04超声波测距模块简略教程

本帖最后由 wjzc2006 于 2014-7-26 01:52 编辑

今天试了一下SR04超声波测距模块,一次性成功,非常简便易用。下面是使用这款超声波测距模块的简略教程:

首先上图:



如图所示,此模块共有4只引出脚,从左往右,第一脚为VCC,由于该模块工作电压为5V,因此需接在树莓派GPIO的2号针上;第二只脚为TRIG,输入触发信号,我接在树莓派GPIO的第15号针上;第三只脚为ECHO,输出回响信号,我接在树莓派GPIO的第16号针上;第四只脚为接地脚,接在树莓派GPIO的第6号针上。

该模块的工作原理为,先向TRIG脚输入至少10us的触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则ECHO输出高电平回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: 距离=高电平时间*声速(340M/S)/2。

下面是我写的测试代码:#! /usr/bin/python
# -*- coding:utf-8 -*-

import RPi.GPIO as GPIO
import time

def checkdist():
    #发出触发信号
    GPIO.output(22,GPIO.HIGH)
    #保持10us以上(我选择15us)
    time.sleep(0.000015)
    GPIO.output(22,GPIO.LOW)
    while not GPIO.input(23):
      pass
    #发现高电平时开时计时
    t1 = time.time()
    while GPIO.input(23):
      pass
    #高电平结束停止计时
    t2 = time.time()
    #返回距离,单位为米
    return (t2-t1)*340/2

GPIO.setmode(GPIO.BCM)
#第15号针,GPIO22
GPIO.setup(22,GPIO.OUT,initial=GPIO.LOW)
#第16号针,GPIO23
GPIO.setup(23,GPIO.IN)

time.sleep(2)

try:
    while True:
            print 'Distance: %0.2f m' %checkdist()
            time.sleep(3)
except KeyboardInterrupt:
    GPIO.cleanup()该程序每3秒测试一次距离,用ctrl+c停止。

经测试,该模块测试较为准确,特别是测试物体表面平整时效果更好。

(不好意思,第一次发贴,还不太会用代码框,试了几次复制代码然后再粘贴到vi中,发现缩进全乱了,不知道是什么回事。如果你想试一下这个程序,粘贴后注意一下缩进吧!)

qwert112 发表于 2014-7-26 02:12:24

已使用,谢谢分享

falltony 发表于 2014-7-27 16:28:30

不错的,可以运行

Hypercube 发表于 2014-8-15 19:44:20

运行不了
页: [1]
查看完整版本: SR04超声波测距模块简略教程