В данном уроке мы подключим ультразвуковой датчик HC-SR04.
В уроке №10 по микроконтроллерам Atmega , мы уже подключали данный датчик. По сути мы повторим данный алгоритм, только на языке microPython.
Настраиваем ножки на отправку импульса и прием ответа:
trig=Pin(5, Pin.OUT) echo=Pin(4, Pin.IN)
Далее формируем импульс старта в течении 10 микросекунд:
trig.off() utime.sleep_us(2) trig.on() utime.sleep_us(10) trig.off()
Далее ждем когда сигнал echo установится в единицу (перейдет с логического нуля в логическую единицу):
while echo.value() == 0: pass
После чего фиксируем значение внутреннего таймера (по аналогии с микроконтроллерами запустили таймер):
t1 = utime.ticks_us()
Далее ждем, когда появится логический ноль на выходе echo (с логической единицы перейдем в логический ноль):
while echo.value() == 1: pass
Еще раз фиксируем время внутреннего таймера (по аналогии остановки таймера в микроконтроллерах)
t2 = utime.ticks_us()
Теперь мы знаем значение времени во время старта отклика и во время окончания. Если отнять от t2 — t1, мы получим время длительности импульса, которое пропорционально времени отправки-получения импульса.
Зная, что звук проходит 1 сантиметр за 58,8 микросекунд — мы можем вычислить пройденное расстояние, от датчика и обратно:
temp = (t2 - t1) / 58.8
Далее, учитывая не большие колебания в измерениях, я сделал не большое усреднение результатов :
temp = (t2 - t1) / 58.8 cm += temp utime.sleep_us(10)
Далее выводим наши измерения на экран:
print(cm/10)
Полный программный код:
from machine import Pin
import utime
trig=Pin(5, Pin.OUT)
echo=Pin(4, Pin.IN)
while True:
temp = 0
cm = 0
for n in range(10):
trig.off()
utime.sleep_us(2)
trig.on()
utime.sleep_us(10)
trig.off()
while echo.value() == 0:
pass
t1 = utime.ticks_us()
while echo.value() == 1:
pass
t2 = utime.ticks_us()
temp = (t2 - t1) / 58.8
cm += temp
utime.sleep_us(10)
print(cm/10)
utime.sleep(2)