` 如题,最近试了试这个HC-SR04超声波测距模块,非常简便易用,下面就把我使用HC-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()
[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]
`
11
|
|
|
|
按照楼主的把程序输进了树莓派但是提示了这个错误,已经安装了GPIO库并且更新到最新,找了半天也找不到解决的办法
|
|
|
|
|
浴血狼 发表于 2016-1-23 20:07
#include
#include //包含_nop_()的头文件
/***********************************************/ //定义数码管显示
【猜测,仅供参考】
TMOD=0x01,
8位不重装,
在【while(1)】循环内你没有将【TH0】与【TL0】重新赋值为【0】与【0】,
在执行时,当第一次测得数据,
马上继续执行,
而此时【TH0】与【TL0】不为【0】,
所以在中断内部获取高低位时,数值不对,
所以测量结果不对!
【猜测,仅供参考】
|
|
|
|
|
楼主辛苦了!
|
|
|
|
|
你好 你有超声波labvlew的程序吗 有的可以给我看下吗
|
|
|
|
|