
HCSR04 (ультразвуковой датчик расстояния HC-SR04)
На заказ
4 000 тг
3 600 тг
Дата публикации
Проверяем точность ультразвукового датчика HC-SR04 с Arduino Nano на расстояниях 20, 30 и 50 см. Подключение датчика, принцип измерения, результаты теста и реальные сценарии применения.
HC-SR04 – это недорогой ультразвуковой датчик, который используют для измерения расстояния до предмета. Его ставят в простые роботы, системы парковки, автоматические крышки, сигнализации и проекты, где нужно заметить препятствие перед устройством.
В этом тесте проверяем не паспортную дальность датчика, а более понятный вопрос: насколько его показания совпадают с реальным расстоянием на обычной сборке с Arduino Nano. Для проверки предмет ставят на расстоянии 20, 30 и 50 см, а результат смотрят в мониторе порта.
Для сборки использовались Arduino Nano, датчик HC-SR04, монтажная плата и соединительные провода. Это минимальная схема, которую можно собрать без дополнительной электроники. Датчик получает питание от Arduino, отправляет ультразвуковой импульс и ждёт отражение от предмета.
HC-SR04 часто используют как ультразвуковой датчик расстояния для Arduino.
У HC-SR04 четыре контакта: VCC, GND, Trig и Echo. Питание подключают к 5 В и GND Arduino Nano. Контакт Trig соединяют с цифровым выходом Arduino, а Echo – с цифровым входом, который измеряет длительность отражённого импульса.
| Контакт HC-SR04 | Подключение | Назначение |
|---|---|---|
| VCC | 5V Arduino Nano | Питание датчика |
| GND | GND Arduino Nano | Общий провод |
| Trig | Цифровой пин Arduino | Запуск измерения |
| Echo | Цифровой пин Arduino | Приём отражённого импульса |
В скетче номера пинов Trig и Echo должны совпадать с реальным подключением. Если провода переставить, а код оставить прежним, датчик не начнёт измерять расстояние правильно. Перед тестом также стоит проверить, что контакты плотно вставлены в макетную плату и общий провод действительно соединён с Arduino.
HC-SR04 работает с логическим уровнем 5 В, поэтому его удобно подключать именно к Arduino Nano. Для плат с логикой 3,3 В сигнал Echo обычно требует отдельного согласования уровня, но в этой сборке оно не нужно.
После загрузки скетча остаётся открыть монитор порта. В нём Arduino выводит рассчитанное расстояние, и показания можно сравнить с рулеткой или линейкой.
В этом тесте связка HC-SR04 Arduino Nano измеряет расстояние до предмета по времени возврата ультразвукового импульса.
Измерение начинается с короткого сигнала на контакте Trig. После этого HC-SR04 отправляет ультразвуковой импульс вперёд. Когда волна отражается от предмета и возвращается к датчику, на контакте Echo появляется импульс. Его длительность показывает, сколько времени звук был в пути.
Arduino измеряет эту длительность в микросекундах и переводит её в расстояние. Звук проходит путь до предмета и обратно, поэтому полученное расстояние делят на два.
const byte TRIG_PIN = 5;
const byte ECHO_PIN = 6;
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
const unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000UL);
if (duration == 0) {
return -1.0;
}
return duration * 0.0343f / 2.0f;
}
float readMedianDistanceCm() {
const byte count = 7;
float values[count];
for (byte i = 0; i < count; i++) {
values[i] = readDistanceCm();
delay(30);
}
for (byte i = 0; i < count - 1; i++) {
for (byte j = i + 1; j < count; j++) {
if (values[j] < values[i]) {
const float temp = values[i];
values[i] = values[j];
values[j] = temp;
}
}
}
return values[count / 2];
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
const float distanceCm = readMedianDistanceCm();
if (distanceCm < 0) {
Serial.println("Объект не найден");
} else {
Serial.print("Расстояние: ");
Serial.print(distanceCm, 1);
Serial.println(" см");
}
delay(100);
}
Здесь 0.0343 – это приблизительная скорость звука в сантиметрах за микросекунду. Формула подходит для обычных комнатных условий, но не делает измерение абсолютно точным. На результат влияют температура воздуха, поверхность предмета, его угол относительно датчика и качество самого модуля.
Если предмет расположен прямо перед датчиком и хорошо отражает звук, HC-SR04 обычно показывает стабильный результат. Если поверхность мягкая, наклонная или слишком узкая, часть сигнала может уйти в сторону. Тогда показания становятся менее устойчивыми или датчик вовсе не получает отражение.
В тесте предмет последовательно ставили на расстоянии 20, 30 и 50 см. На всех трёх точках показания в мониторе порта были близки к реальному расстоянию. Небольшие изменения значений были заметны, но не выходили примерно за пределы одного сантиметра.
| Реальное расстояние | Результат HC-SR04 | Наблюдение |
|---|---|---|
| 20 см | Около 20 см | Показания практически совпадают |
| 30 см | Около 30 см | Результат близок к реальному расстоянию |
| 50 см | Около 50 см | Есть небольшие колебания, но датчик остаётся пригодным для задачи |
Такой результат нормален для недорогого ультразвукового датчика. HC-SR04 не предназначен для измерений, где нужна точность рулетки, штангенциркуля или промышленного датчика. Зато для определения, есть ли перед устройством препятствие и находится ли оно ближе заданного расстояния, его точности обычно достаточно.
Главная причина неточных показаний – не только сам датчик, но и условия измерения. HC-SR04 отправляет звук вперёд и ожидает отражение. Если отражение слабое, уходит в сторону или возвращается с задержкой, Arduino получает менее точный результат.
Лучше всего датчик работает с достаточно крупным твёрдым предметом, расположенным прямо перед ним. Плоская коробка, стена или лист материала обычно дают понятное отражение. Наклонная гладкая поверхность может отправить ультразвук в сторону, а мягкая ткань, поролон или рыхлый материал частично поглощают звук.
На показания также влияют:
Если в проекте важна стабильность, полезно делать несколько измерений подряд и использовать среднее значение. Это помогает убрать отдельные случайные скачки, но не исправит проблему, если датчик физически плохо видит объект.
HC-SR04 хорошо подходит для проектов, где не нужно знать расстояние с высокой точностью, а важно понять положение препятствия. Например, робот может остановиться, если перед ним стена ближе 20 см. Парктроник может предупредить, что предмет находится слишком близко. Автоматическая крышка может открыться, когда человек подошёл к ней на заданное расстояние.
Датчик также используют в простых системах контроля уровня. Например, его можно установить над контейнером и приблизительно оценивать расстояние до содержимого. Но для жидкости, сыпучих материалов и объектов со сложной поверхностью результат нужно отдельно проверять: отражение ультразвука будет отличаться.
Для обычной Arduino-сборки HC-SR04 остаётся удобным первым датчиком расстояния. Он дешёвый, подключается четырьмя проводами и позволяет сразу увидеть результат в мониторе порта. Тест на 20, 30 и 50 см показывает, что при нормальной установке модуль может давать достаточно близкие показания для роботов, парктроников и обнаружения препятствий.
Комментарии (2)
Почему после подключения HC-SR04 в мониторе порта Arduino IDE отображаются иероглифы?
Сам датчик HC-SR04 здесь ни при чем. Иероглифы появляются, когда скорость порта в программе не совпадает со скоростью, выбранной в мониторе порта Arduino IDE. Например, если в коде указано Serial.begin(9600); то в мониторе порта тоже нужно выбрать 9600 бод. Если там установлено 115200 или другое значение, вместо нормального текста будут отображаться непонятные символы. После выбора одинаковой скорости вывод снова станет читаемым.