Глиф Учебники

Как подключить датчик расстояния HC-SR04

Справочник · Arduino · 2 минуты чтения

Подключение: VCC → 5V, GND → GND, Trig → вывод 9, Echo → вывод 10. Библиотека не нужна.

Arduino
const int TRIG = 9;
const int ECHO = 10;

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);            // импульс 10 мкс — начать измерение
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  unsigned long duration = pulseIn(ECHO, HIGH, 30000);   // мкс, ждать не дольше 30 мс
  if (duration == 0) {
    Serial.println("Нет эха");
  } else {
    float cm = duration * 0.0343 / 2;
    Serial.print(cm);
    Serial.println(" см");
  }
  delay(100);
}

Как это работает

По импульсу на Trig датчик посылает ультразвук и держит на Echo уровень HIGH, пока не вернётся эхо. pulseIn измеряет длину этого импульса в микросекундах — это время полёта звука туда и обратно.

Скорость звука при 20 °C — 343 м/с, то есть 0,0343 см за микросекунду. Расстояние:

см = время × 0,0343 / 2

Пример: эхо 1166 мкс → 1166 × 0,0343 / 2 ≈ 20,0 см. Эхо 5831 мкс → 5831 × 0,0343 / 2 ≈ 100,0 см.

Третий аргумент pulseIn — сколько ждать: 30 000 мкс хватает на 30 000 × 0,0343 / 2 ≈ 515 см, больше, чем дальность датчика. Без него pulseIn ждёт до секунды, и скетч подолгу стоит, если эхо не пришло.

Что умеет датчик

Показывает 0, «Нет эха» или скачет

На платах 3,3 В

Классический HC-SR04 питается от 5 В, и вывод Echo выдаёт 5 В. Для плат на 3,3 В (ESP32, Nano 33) так подключать нельзя: поставьте делитель напряжения на Echo (например, 1 кОм от Echo к выводу платы и 2 кОм от вывода платы к GND — получится 5 × 2 / (1 + 2) ≈ 3,3 В) или возьмите версию датчика, рассчитанную на 3,3 В.

Подробнее о датчиках и библиотеках — в уроке Датчики и библиотеки.