Подключение ультразвукового датчика HC-SR04 к микроконтроллеру ESP8266 с помощью языка microPython.

В данном уроке мы подключим ультразвуковой датчик 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)