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

Как работает HC-SR04?
- Arduino отправляет на пин TRIG импульс длительностью 10 микросекунд.
- Датчик излучает 8 звуковых импульсов частотой 40 kHz.
- Звук отражается от предмета и возвращается; всё это время пин ECHO остаётся в состоянии HIGH.
- 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. Код ниже выводит расстояние в монитор порта и отдельно сообщает, если предмета нет или он слишком далеко.
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}Работа с ESP32 и Raspberry Pi Pico
Советы для точных измерений
- Мягкие и наклонные поверхности: ткань, поролон и поверхности под углом плохо отражают звук, поэтому измерения могут пропадать.
- Усредняй: медиана из 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 (вывод в порт)
Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

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

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

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

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

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

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

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

