电子常识
HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
如右图接线,VCC 供 5V
电源, GND 为地线,
TRIG 触发控制信号输入,ECHO 回响信号输出等四个接口端。
以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者 uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。
注:1、此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于 0.5 平方米且平面尽量要求平整,否则影响测量的结果
#! /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()
[color=rgb(51, 102, 153) !important]复制代码
该程序每3秒测试一次距离,用ctrl+c停止。
经测试,该模块测试较为准确,特别是测试物体表面平整时效果更好。
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
[color=rgb(51, 102, 153) !important]
全部0条评论
快来发表一下你的评论吧 !