我正在为我的项目使用4个SRF05超声波传感器,它们按顺序运行。我使用Raspberry Pi,所以我使用的代码如下:
def SONAR(TRIG,ECHO):
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, False)
time.sleep(0.05)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO)==0:
pulse_start = time.time()
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration*17150
distance = round(distance, 2)
该项目还增加了2个红外传感器和2个电机。代码工作得很好,但有很多次超声波传感器因为我猜错误而停止工作,这就像代码因为错误而崩溃。一切都停止工作,他们仍然按照他们被告知的最后方向运行的电机。这就像程序冻结,只有电机旋转,我需要重新启动代码来解决它。但是,屏幕上没有错误,程序也没有停止,否则电机也会停止。这个问题只是因为超声波引起的。我已经单独尝试了它们而没有任何其他运行,有时会发生相同的事情任何想法为什么会发生这种情况以及如何解决它?谢谢。
答案 0 :(得分:0)
我正在尝试做类似的事情。我发现超声波传感器虽然有一些问题,但并不是唯一的问题。
您的while循环必须有一个超时,否则它会被卡住。像这样
start = time.time()
count=time.time()
GPIO.setup(sonar,GPIO.IN)
while GPIO.input(sonar)==0 and time.time()-count<0.1:
start = time.time()
count=time.time()
stop=count
while GPIO.input(sonar)==1 and time.time()-count<0.1:
stop = time.time()
# Calculate pulse length
elapsed = stop-start
我知道这不会解决问题,因为当传感器卡住或没有给出读数时,将会给出错误的读数。即ECHO引脚无法正确计时。
看看Pigpio库https://github.com/the-raspberry-pi-guy/robot/blob/master/pi2go/pi2go.py
我也很喜欢Audrino(或任何其他微控制器)更适合于连续监控传感器的工作。 Raspberry Pi正在运行Linux,并且可以启动基于系统的进程。
还要在程序中添加一些延迟。这不是模拟,所以一切都无法按计划进行。