С помощью микроконтроллера ESP8266 и датчика HC-SR04 измеряем расстояние до препятствия. Используем последовательный порт (UART). Применяем функции delayMicroseconds(), pulseIn().

Ультразвуковой дальномер HC-SR04 - датчик использующий принцип эхолокации. В живой природе эхолокацию используют летучие мыши для ориентации в темноте и поиска пищи (насекомых). Если вы слышали эхо, вам проще будет понять эхолокацию. Если крикнуть в горах или в пустом большом зале, звук вернётся к вам через некоторое время. Ультразвуковая эхолокация использует одно из свойств звуковых волн - это постоянство скорости распространения в воздухе:

V=340,29 м/сек

Ультразвуковой дальномер имеет в своём составе излучатель (transmitter) и приёмник (receiver) ультразвуковых волн см. рис. 1.

Рис. 1. Ультразвуковой дальномер HC-SR04, вид со стороны излучателя (T) и приёмника (R).

Рис. 2. Ультразвуковой дальномер HC-SR04, вид со стороны микросхем.

Излучатель посылает ультразвуковую волну в нужном направлении. Звук доходит до препятствия, отражается от него и возвращается обратно. Время, необходимое для преодоления звуком расстояния от излучателя до препятствия и обратно к приёмнику равно:

T = 2 * S / V

Ультразвуковой датчик расстояния может сообщить нам это время. Датчик возвращает импульс длительностью пропорциональной пройденному ультразвуком расстоянию. А микроконтроллер измеряет длительность этого импульса и по формуле может вычислить из полученного времени расстояние до препятствия:

2*S = T * V = T * 340,29

Так как функция pulseIn(), принимающая от датчика импульс, возвращает нам время в мксек, то нам нужно это время преобразовать в сек., то есть поделить на 1000000, а метры перевести в миллиметры (умножить на 1000) в результате получаем:

S = t * 0,17 = t / 5,88 (мм)

где t, длительность импульса в мксек

Временная диаграмма, поясняющая работу датчика HC-SR04, представлена на рис. 3.

Рис. 3. Временная диаграмма работы датчика HC-SR04

Запуск датчика на измерение дистанции до препятствия осуществляют подачей на его  вход Trigger TTL импульса длительностью 10 мкс. По отрицательному фронту запускающего импульса, излучатель датчика (Transmitter) генерирует 8 звуковых импульсов на частоте 40 кГц (в ультразвуковом диапазоне частот). Через время T, звук, отразившись от препятствия, возвращается. Отражённый звук принимает приёмник (Receiver, микрофон) датчика. Получив отражённый сигнал, датчик генерирует на выходе Echo единичный импульс длительностью T (от 150 мкс до 25 мс).

Измерив длительность импульса на выходе датчика с помощью микроконтроллера, легко вычислить расстояние до препятствия.

Си библиотека Ардуино содержит все средства для работы с ультразвуковым дальномером. Функция

delayMicroseconds(10)

поможет сформировать запускающий импульс длительностью 10 мкс.

Функция

pulseIn(echo, HIGH)

возвращает длительность положительного импульса на входе echo в мкс.

Измерение расстояния до препятствия

Рис. 4. Принципиальная электрическая схема подключения ДАТЧИКА HC-SR04 к Arduino NANO (UNO). 

int trig = 14, echo = 16 ;

void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  int duration = pulseIn(echo, HIGH)/5.8;
  Serial.print("Расстояние = ");
  Serial.print(duration);
  Serial.println(" мм");
  delay(100);
}

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

Расстояние = 1739 мм
Расстояние = 1743 мм
Расстояние = 1743 мм
Расстояние = 53 мм
Расстояние = 65 мм
Расстояние = 75 мм
Расстояние = 85 мм
Расстояние = 113 мм
Расстояние = 144 мм
Расстояние = 209 мм
Расстояние = 256 мм
Расстояние = 269 мм
Расстояние = 262 мм

Лист. 1. Отображение измеряемого дальномером расстояния чаез монитор последовательного порта Arduino IDE.