Я пытаюсь создать анемометр с ультразвуком на моем Raspberry Pi 4. Я действительно новичок в Python, так что это моя первая попытка. Я действительно расстроен и застрял с моей настройкой. Я не уверен, почему мой код просто не работает.
print("Sending pulse 1")
GPIO.output(Trig1, True)
time.sleep(0.00001)
GPIO.output(Trig1, False)
while GPIO.input(Echo1)==0:
start_timeX = time.time()
while GPIO.input(Echo1)==1:
end_timeX = time.time()
Проблема, которую я получаю с этим кодом, заключается в том, что когда я print((end_timeX - start_timeX)*1000)
(преобразовываю разницу в секунды), я обычно получаю около 0,3 секунды, что является высоким, но разумным (расстояние между Trig1 и Trig2 составляет около10 см. Код всегда работает намного быстрее, чем эти 0,3 секунды, но иногда это генерирует случайное число (обычно около 22 с или какое-то чрезвычайно большое число в миллиардах). Поскольку эти числа настолько случайны, я думаю, код простосломался, а не моя проводка.
Я выложу весь файл python внизу этого поста, потому что это может быть что-то еще, просто странное.
import RPi.GPIO as GPIO
import time
import math
GPIO.setmode(GPIO.BCM)
Trig1 = 23
Trig2 = 24
Echo1 = 14
Echo2 = 15
print("Testing towers")
GPIO.setup(Trig1, GPIO.OUT)
GPIO.setup(Trig2, GPIO.OUT)
GPIO.setup(Echo1, GPIO.IN)
GPIO.setup(Echo2, GPIO.IN)
sound_time = 0.0095 / 343
def removeSound(speed):
return speed - sound_time
GPIO.output(Trig1, False)
GPIO.output(Trig2, False)
print("Wainting for sensor")
time.sleep(2)
print("Sending pulse 1")
GPIO.output(Trig1, True)
time.sleep(0.00001)
GPIO.output(Trig1, False)
while GPIO.input(Echo1)==0:
start_timeX = time.time()
while GPIO.input(Echo1)==1:
end_timeX = time.time()
timeX = removeSound(end_timeX - start_timeX)
print("Waiting for sensor 2")
time.sleep(2)
print("Sending pulse 2")
GPIO.output(Trig2, True)
time.sleep(0.00001)
GPIO.output(Trig2, False)
while GPIO.input(Echo2)==0:
start_timeY = time.time()
while GPIO.input(Echo1)==1:
end_timeY = time.time()
timeY = removeSound(end_timeY - start_timeY)
#timeY = removeSound(0.00037872352600098)
distanceX = timeX * timeX
distanceY = timeY * timeY
print(timeX * 1255, "KM/H")
print(timeY * 1255, "KM/H")
distance = math.sqrt(distanceX + distanceY)
print(distance * 1255, "KM/H")
GPIO.cleanup()