Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino
Обзор HC-SR04
HC-SR04 — дешёвый и популярный ультразвуковой датчик дальности (2 см – 4 м). Состоит из излучателя и приёмника на 40 кГц. Работает как сонар: излучает пакет волн, засекает время отражения.

Характеристики
| Напряжение | 5V DC |
| Ток | 15 мА |
| Частота | 40 кГц |
| Диапазон | 2 см – 400 см |
| Точность | 3 мм |
| Угол измерения | <15° |
| Размеры | 45×20×15 мм |
Распиновка

- VCC → 5V Arduino;
- GND → GND;
- Trig → любой цифровой пин (выход, запуск измерения);
- Echo → любой цифровой пин (вход, длина импульса = время полёта).
Принцип работы
- На Trig подаём HIGH 10 мкс — излучается 8 циклов ультразвука.
- Echo сразу становится HIGH и ждёт отражённый сигнал.
- При получении отражения Echo переходит в LOW.
- Длительность HIGH на Echo = время туда-обратно.
- Если объекта нет — таймаут 38 мс, Echo становится LOW.

Формула расстояния
Расстояние = (Скорость_звука × Время) / 2
Скорость звука ≈ 340 м/с = 0.034 см/мкс. Делим на 2, так как волна проходит путь туда и обратно.
Пример: Echo HIGH 2000 мкс → (0.034 × 2000) / 2 = 34 см.
Подключение к Arduino

- VCC → 5V, GND → GND;
- Trig → D9, Echo → D10 (любые цифровые).
Базовый код (без библиотек)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // мкс
distance = duration * 0.034 / 2; // см
Serial.print("Distance: ");
Serial.println(distance);
}
Разбор кода
pulseIn(echoPin, HIGH)— возвращает длительность импульса в мкс;- Формула:
distance = duration * 0.034 / 2; - Вывод в Serial Monitor.
Вывод на LCD дисплей

#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
const int trigPin = 9, echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
lcd.begin(16, 2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * 0.034 / 2;
distanceInch = duration * 0.0133 / 2;
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distanceCm); lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Distance: ");
lcd.print(distanceInch); lcd.print(" inch");
delay(10);
}
Использование библиотеки NewPing (проще и точнее)
#include <NewPing.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
int distance = sonar.ping_cm(); // см
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
}
Методы: ping_cm(), ping_in(), ping_median(iterations) — медиана из нескольких замеров для точности.
Компенсация температуры (DHT22) для высокой точности
Скорость звука зависит от температуры и влажности:
V = 331.4 + 0.6×T + 0.0124×H (м/с)
Пример с DHT22 и NewPing:
#include <NewPing.h>
#include "dht.h"
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
#define DHT22_PIN 5
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT;
void setup() { Serial.begin(9600); }
void loop() {
delay(100);
DHT.read22(DHT22_PIN);
float temp = DHT.temperature;
float hum = DHT.humidity;
float vSound = 331.4 + 0.6*temp + 0.0124*hum; // м/с
unsigned int duration = sonar.ping_median(10); // мкс
float dist = (vSound * (duration/1000000.0)) / 2 * 100; // см
Serial.print("Distance: "); Serial.print(dist); Serial.println("cm");
}

Габариты и 3D-модель

3D-модель доступна на Thangs. Размеры могут незначительно варьироваться у разных производителей.
Заключение
HC-SR04 — отличный датчик для бесконтактного измерения расстояния, обнаружения препятствий, уровня жидкости и т.д. Базовый код прост, NewPing упрощает жизнь, а добавление DHT22 даёт лабораторную точность. Примеры проектов: радар, уровень, робот-искатель препятствий, бесконтактное ведро и др.
Производственный процесс
- Ультразвуковой датчик HC-SR04: принцип работы и ключевые применения
- Arduino-датчики: типы, применения и реальные проекты
- Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
- Подключение ультразвукового датчика HC-SR04 к Raspberry Pi — практическое руководство
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Компактный радар на Arduino Nano с HC-SR04 и дисплеем 1.8"
- Создание ультразвукового дальномера на Arduino UNO и датчике SR04
- Монитор уровня и температуры воды на Arduino: ультразвук, LCD и тревога