Компоненты · 3 мин чтения

Датчик расстояния HC-SR04: ультразвуковое измерение расстояния с Arduino

Как работает ультразвуковой датчик расстояния HC-SR04 и как подключить его к Arduino? Пины TRIG и ECHO, формула расстояния, подключение к ESP32 и Pico и советы для более точных измерений.

HC-SR04 — недорогой и очень распространённый датчик, который измеряет расстояние до предмета перед ним с помощью звука. Он работает так же, как летучие мыши ориентируются в пространстве: излучает высокочастотный звук, который не слышит человеческое ухо, и измеряет, сколько времени нужно эху, чтобы вернуться. На нём строят парктроники, роботов, объезжающих препятствия, датчики уровня в баках и ростомеры.

HC-SR04
HC-SR04: два ультразвуковых излучателя, передатчик и приёмник, и 4 пина (VCC, TRIG, ECHO, GND).

Как работает HC-SR04?

  1. Arduino отправляет на пин TRIG импульс длительностью 10 микросекунд.
  2. Датчик излучает 8 звуковых импульсов частотой 40 kHz.
  3. Звук отражается от предмета и возвращается; всё это время пин ECHO остаётся в состоянии HIGH.
  4. Arduino измеряет, сколько времени ECHO держится в состоянии HIGH, и вычисляет расстояние.

Звук распространяется в воздухе со скоростью около 343 м/с, то есть сантиметр он проходит примерно за 29 микросекунд. Измеренное время включает путь туда и обратно, поэтому его делят пополам: расстояние (см) = время (µs) × 0.0343 / 2, или просто время / 58.

Технические характеристики

ПараметрЗначение
Питание5 V, около 15 mA
Диапазон2–400 см
РазрешениеОколо 3 мм
Угол обзораОколо 15°
ПиныVCC, TRIG, ECHO, GND

Измерение расстояния с Arduino

Подключи VCC к 5V, GND к GND, TRIG к пину 9, а ECHO к пину 10. Код ниже выводит расстояние в монитор порта и отдельно сообщает, если предмета нет или он слишком далеко.

C++ (Arduino IDE)
1const int TRIG_PIN = 9;    // tetik / trigger
2const int ECHO_PIN = 10;   // yankı / echo
3
4void setup() {
5  pinMode(TRIG_PIN, OUTPUT);
6  pinMode(ECHO_PIN, INPUT);
7  Serial.begin(9600);
8}
9
10void loop() {
11  digitalWrite(TRIG_PIN, LOW);
12  delayMicroseconds(2);
13  digitalWrite(TRIG_PIN, HIGH);      // 10 µs darbe / 10 µs pulse
14  delayMicroseconds(10);
15  digitalWrite(TRIG_PIN, LOW);
16
17  long duration = pulseIn(ECHO_PIN, HIGH, 30000); // en fazla 30 ms bekle / wait max 30 ms
18  if (duration == 0) {
19    Serial.println("Menzil dışı / out of range");
20  } else {
21    float cm = duration * 0.0343 / 2;   // gidiş-dönüş / round trip
22    Serial.print(cm);
23    Serial.println(" cm");
24  }
25  delay(100);                          // ölçümler arası / between readings
26}
Тайм-аут 30 000 µs, переданный в pulseIn, соответствует примерно 5 метрам. Без тайм-аута код при отсутствии предмета может ждать до 1 секунды.

Работа с ESP32 и Raspberry Pi Pico

Пин ECHO датчика HC-SR04 выдаёт 5 V, а пины ESP32 и Pico рассчитаны на 3,3 V. Не подключай ECHO напрямую: собери делитель напряжения из резисторов 1 kΩ и 2 kΩ или используй версию HC-SR04P, которая работает от 3,3 V.

Советы для точных измерений

  • Мягкие и наклонные поверхности: ткань, поролон и поверхности под углом плохо отражают звук, поэтому измерения могут пропадать.
  • Усредняй: медиана из 3–5 измерений убирает резкие скачки.
  • Влияние температуры: скорость звука меняется примерно на 0,6 м/с на каждый 1 °C; для точных задач делай поправку с помощью датчика температуры.
  • Несколько датчиков: датчики, запущенные одновременно, слышат эхо друг друга; запускай их по очереди.
  • Интервал измерений: оставляй между измерениями не меньше 60 мс, чтобы предыдущее эхо успело затухнуть.

Чтобы объединить датчик с зуммером и сделать парктроник, загляни в статью Что такое зуммер?, а чтобы познакомиться с другими датчиками, прочитай руководство по датчикам для Arduino.

Частые вопросы

На какое расстояние может измерять HC-SR04?

Теоретически до 4 метров. На практике надёжные результаты получаются до 2–3 метров на ровной твёрдой поверхности.

Почему HC-SR04 всё время показывает 0 или огромное значение?

Возможно, перепутаны TRIG и ECHO, предмет вне диапазона или датчик направлен на поверхность, которая не отражает звук. Проверь подключение и используй тайм-аут в pulseIn.

Может ли HC-SR04 измерять уровень воды?

Да, его закрепляют на крышке бака направленным вниз и измеряют расстояние до поверхности воды. Во влажной среде датчик нужно защищать; лучше подойдёт водонепроницаемый JSN-SR04T.

Какие ещё датчики расстояния есть для Arduino?

Для коротких расстояний и распознавания линии используют инфракрасный TCRT5000, а для миллиметровой точности — лазерный VL53L0X. HC-SR04 самый распространённый благодаря балансу цены и дальности.

Все проекты
Измерение расстояния HC-SR04 (вывод в порт)
#27Новичок

Измерение расстояния HC-SR04 (вывод в порт)

Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

4.6(46)
71
Парктроник на HC-SR04
#28Средний
Premium

Парктроник на HC-SR04

Мини-версия автомобильного парктроника: чем ближе предмет, тем чаще сигнал. Датчик расстояния измеряет предмет перед собой; если он дальше 20 сантиметров, горит зелёный светодиод, а если ближе — мигае

4.8(64)
85
Измерение расстояния с выводом на LCD
#31Продвинутый
Premium

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

Инструмент, который измеряет расстояние без линейки: двигай рукой перед датчиком туда-сюда и смотри, как меняется число. HC-SR04 посылает звуковую волну и слушает эхо, а Arduino вычисляет расстояние в

4.6(45)
59
Измерение роста
#33Средний
Premium

Измерение роста

Ростомер, который вешается на дверную раму и сообщает в сантиметрах рост человека, стоящего под ним. Сначала, пока под ним никого нет, ты нажимаешь первую кнопку, и датчик расстояния измеряет расстоян

4.5(25)
34
Робот, объезжающий препятствия
#81Продвинутый
Premium

Робот, объезжающий препятствия

Как насчёт того, чтобы собрать умную машину, которая сама находит дорогу? Робот, объезжающий препятствия, постоянно осматривает всё вокруг благодаря ультразвуковому датчику спереди. Встретив препятств

5.0(38)
49
Ультразвуковой датчик расстояния HC-SR04 на ESP32
#116Средний

Ультразвуковой датчик расстояния HC-SR04 на ESP32

Ультразвуковой датчик HC-SR04 вычисляет расстояние по времени, за которое испущенная им звуковая волна отражается от предмета и возвращается (Time of Flight). В этом проекте ESP32 подаёт импульс 10 микросекунд на пин TRIG датчика, а длительность эха читает с пина ECHO через pulseIn(). Вычисленное расстояние в сантиметрах выводится на I2C LCD 16x2. HC-SR04 работает от 5V, поэтому на пине ECHO нужен делитель напряжения.

4.9(28)
45
Счётчик ракаатов намаза на ESP32 (HC-SR04 + SSD1306 OLED + 2 кнопки)
#136Продвинутый
Premium

Счётчик ракаатов намаза на ESP32 (HC-SR04 + SSD1306 OLED + 2 кнопки)

Бывает, что во время намаза забываешь, сколько ракаатов уже совершено? Этот проект — счётчик ракаатов, который ставится рядом с молитвенным ковриком и считает земные поклоны, когда к нему приближается рука. Ультразвуковой датчик HC-SR04 замечает приближение руки, OLED-дисплей SSD1306 показывает число ракаатов, а двумя кнопками можно выбрать 2, 3 или 4 ракаата и сбросить счёт. В нём умный конечный автомат с паузой 2,5 секунды и проверкой «рука убрана».

4.8(11)
14
Парктроник на ESP32 (HC-SR04 + шкала из 5 светодиодов + зуммер + OLED)
#142Продвинутый
Premium

Парктроник на ESP32 (HC-SR04 + шкала из 5 светодиодов + зуммер + OLED)

ESP32-версия автомобильного парктроника! Ультразвуковой датчик HC-SR04 измеряет расстояние до предмета перед ним. По мере уменьшения расстояния шкала из 5 светодиодов заполняется (зелёный → жёлтый → красный), а интервал сигналов зуммера сокращается. Когда предмет совсем близко (меньше 10 см), звучит непрерывная тревога и горят все светодиоды. OLED SSD1306 показывает расстояние в см крупным шрифтом и сообщение состояния (STOP / CAUTION / CLOSE / STOP! / DANGER).

0.0(0)
14