树莓派连 HC-SR04 这个模块进行超声波测距,连线,py 代码应该都没问题,可是距离一直都在 5.6m 左右不变的,这啥情况?大哥们帮臭弟弟看看吧。我感觉是这个模块有问题? py 代码
import RPi.GPIO as GPIO
import time
Trig_Pin = 23
Echo_Pin = 24
def init():
GPIO.setmode(GPIO.BCM)
GPIO.setup(Trig_Pin, GPIO.OUT, initial=False)
GPIO.setup(Echo_Pin, GPIO.IN)
time.sleep(2)
def distance():
GPIO.output(Trig_Pin, True)
time.sleep(0.00001)
GPIO.output(Trig_Pin, False)
while not GPIO.input(Echo_Pin):
pass
t1 = time.time()
while GPIO.input(Echo_Pin):
pass
t2 = time.time()
return (t2 - t1) * 340 * 100 / 2
if __name__ == '__main__':
init()
try:
while True:
print('Distance : {:.2f} cm'.format(distance()))
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
输出情况,不管怎么给前面放障碍物距离都是 5.6m 左右
Distance : 560.90 cm
Distance : 560.91 cm
Distance : 560.90 cm
Distance : 560.92 cm
Distance : 560.90 cm
Distance : 560.93 cm
Distance : 560.90 cm
1
CEBBCAT 2020-05-27 00:40:26 +08:00 via Android
你这测量的不就是 echo 口高电平的时间吗?高电平的时间就是你拉高 trig 的时间啊,所以是你没有理解超声波测距原理的问题。
另外要跟你再次确认一个知识点,树莓派这种东西不如传统的 Soc 来得实时,你代码拉高 1e-5s 其实可能拉高了 1e-3s 。io 除了电平敏感度之外还有时间敏感度这种东西,必要时也是要考虑的。 没怎么操作过树莓派的 GPIO,但你这个死循环我觉得不妥,可以查查有没有更好的解决办法,事件触发式那种,可以拿中断事件去搜。 另外树莓派供电应该一般,要做好元件供电 |
2
CEBBCAT 2020-05-27 00:41:37 +08:00 via Android
@CEBBCAT 可以学一下 Arduino 先,那本《爱上 Arduino 》会教电路去抖之类的东西
|
3
kokutou 2020-05-27 07:46:53 +08:00 via Android
抄的例程?
总感觉不太对啊。。。 先写一个触发一次然后无脑打印 echo 输出+时间戳的程序,看看这个模块返回的是啥样的呗。 |