|
本帖最后由 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中,发现缩进全乱了,不知道是什么回事。如果你想试一下这个程序,粘贴后注意一下缩进吧!) |
|