Это исчерпывающее руководство — ваш универсальный ресурс, в котором вы найдете всю необходимую информацию о HC-SR04. Мы начнем с азов, разберемся с основными принципами его работы, что является ключом к раскрытию его потенциала. Затем перейдем к важным аспектам, таким как основные технические характеристики, подключение к популярным микроконтроллерам, и даже углубимся в сложные сценарии использования. К концу этого руководства вы будете хорошо подготовлены, чтобы использовать весь потенциал HC-SR04 в своих собственных проектах.
Что такое ультразвуковой датчик HC-SR04?
Ультразвуковой датчик HC-SR04 — это замечательное и универсальное устройство, которое заняло свою нишу в обширной сфере электронных проектов. Его главная особенность — экономичность, благодаря которой он доступен широкому кругу пользователей, от экономных любителей до профессионалов, ищущих недорогое решение для своих проектов.

Технические характеристики
Понимание технических характеристик ультразвукового датчика HC-SR04 имеет решающее значение для реализации любого проекта. Ниже приведена таблица технических характеристик:
Пояснение:
- Диапазон: HC — SR04 имеет рабочий диапазон от 2 см до 400 см (0,8 дюйма до 157 дюймов). Этот относительно широкий диапазон делает его пригодным для различных применений. Например, в небольшом проекте по робототехнике, где робот должен перемещаться по комнате, диапазон 2 — 400 см позволяет эффективно обнаруживать близлежащую мебель или стены. В более крупных промышленных приложениях он может использоваться для измерения расстояния между компонентами оборудования в пределах этого диапазона. Однако важно отметить, что точность может немного варьироваться на крайних пределах этого диапазона.
- Разрешение: с разрешением 0,3 см HC-SR04 может обеспечить достаточно точные измерения расстояния. Такой уровень точности достаточен для большинства любительских и многих промышленных применений. В проекте, связанном с 3D-печатью, где датчик используется для определения расстояния до печатной платформы для автоматического выравнивания, разрешение 0,3 см может гарантировать, что печатающая головка находится на правильной высоте над платформой, что обеспечивает высокое качество печати.
- Источник питания: Работает от источника питания 5 В постоянного тока. Во время работы потребляет рабочий ток 15 мА, что является относительно низким энергопотреблением. В режиме ожидания потребление тока еще меньше, менее 2 мА. Это делает его энергоэффективным выбором для проектов с питанием от батарей. Например, в узле датчика IoT с питанием от батареи, который использует HC-SR04 для измерения расстояния, низкое энергопотребление гарантирует, что батарея прослужит в течение длительного периода времени.
- Рабочий угол: Рабочий угол HC-SR04 составляет менее 15°. Это означает, что датчик имеет относительно узкое поле зрения. Он наиболее эффективен при обнаружении препятствий, которые находятся непосредственно перед ним. В системе безопасности умного дома, где датчик используется для обнаружения злоумышленников, приближающихся к двери, узкий рабочий угол позволяет сфокусироваться на обнаружении объектов, движущихся прямо к датчику, что снижает количество ложных срабатываний от объектов, находящихся в периферийной зоне.
- Интерфейс: Модуль имеет 4-контактный интерфейс, который включает контакты VCC, GND, Trig и Echo. Простая конструкция интерфейса упрощает подключение к различным микроконтроллерам и другим электронным компонентам.
Объяснение распиновки
Raspberry Pi: 5V (общая земля с модулем)
▶ Импульс HIGH длительностью 10 мкс для начала измерения
▶ Низкий уровень для сброса
Raspberry Pi: любой GPIO (например, GPIO17)
▶ Длительность HIGH = время прохождения ультразвука туда и обратно
▶ Макс. время HIGH: 38 мс (тайм-аут при отсутствии препятствия)
Raspberry Pi: GPIO через делитель напряжения (5 В→3,3 В)
Raspberry Pi/GND
Пояснение:
Вывод Echo — ключ к получению информации о расстоянии. После того как ультразвуковые волны отправлены, на выводе Echo устанавливается высокий уровень. Он сохраняется до тех пор, пока отражённые волны не будут приняты ультразвуковым приёмником. Длительность высокого уровня на выводе Echo прямо пропорциональна времени, за которое ультразвуковые волны проходят до препятствия и обратно. Измерив эту длительность, можно вычислить расстояние до препятствия по формуле . В проекте Arduino на C++ для измерения длительности импульса высокого уровня на выводе Echo можно использовать функцию pulseIn().
Основные компоненты и принцип работы
Ключевые компоненты
- Ультразвуковой передатчик: это компонент, отвечающий за начальный этап процесса измерения расстояния. Он излучает ультразвуковые волны с частотой 40 кГц. Эти высокочастотные волны неслышимы для человеческого уха, но являются ключом к работе датчика. При срабатывании передатчик посылает эти волны в окружающую среду. Представьте себе мощный динамик, излучающий звуковые волны с частотой, намного превышающей ту, которую мы можем слышать. Например, в робототехнике ультразвуковой передатчик на роботе посылает эти волны частотой 40 кГц в направлении движения робота, готовясь обнаружить любые препятствия на его пути.
- Ультразвуковой приемник: Как следует из названия, задача ультразвукового приемника состоит в улавливании ультразвуковых волн, отраженных от любых препятствий в радиусе действия датчика. После того, как передатчик посылает волны, они распространяются по воздуху, пока не столкнутся с объектом. Затем волны отражаются, и задача приемника состоит в улавливании этих отраженных волн. Это похоже на высокочувствительный микрофон, который может улавливать самые слабые эхо-сигналы ультразвуковых волн. В системе домашней автоматизации, где HC-SR04 используется для обнаружения присутствия человека в комнате, приемник улавливает волны, отраженные от тела человека.
- Управляющая схема: это «мозг» всей операции. Управляющая схема управляет всей последовательностью обработки сигнала. Она координирует действия передатчика и приемника. При получении триггерного сигнала она дает команду передатчику излучать ультразвуковые волны. Затем она внимательно следит за приемником на предмет поступающих отраженных волн. После приема волн схема управления вычисляет время, за которое волны дошли до препятствия и вернулись обратно. На основе этого времени и известной скорости звука в воздухе она вычисляет расстояние до препятствия. В промышленных условиях схема управления в HC-SR04, используемая для автоматизированного оборудования, точно управляет этими операциями, чтобы обеспечить точное измерение расстояния для правильного функционирования оборудования.
Как это работает
Теперь, когда мы знаем об основных компонентах, давайте пошагово рассмотрим, как HC-SR04 фактически измеряет расстояние.
Сигнал срабатывания:
Процесс начинается с триггерного сигнала. Когда на вывод Trig (Trigger) модуля HC-SR04 подается высокий импульс длительностью 10 мкс, это равносильно подаче датчику команды «старт». Этот короткий, но значимый электрический импульс запускает всю последовательность измерения расстояния. Например, в проекте на базе Arduino вы бы использовали простую строку кода, чтобы отправить этот высокий импульс длительностью 10 мкс на вывод Trig модуля HC-SR04, давая ему команду начать процесс измерения.
Распространение волн:
После срабатывания ультразвуковой передатчик приступает к действию. Модуль посылает серию из 8 ультразвуковых импульсов с частотой 40 кГц. Эти импульсы похожи на серию невидимых «звуковых пуль», которые выстреливаются в окружающую среду. После отправки этих импульсов модуль переходит в состояние ожидания, терпеливо ожидая, пока волны не столкнутся с препятствием и не отскочат обратно. В реальной ситуации, если вы используете HC-SR04 для измерения расстояния до стены в комнате, 8 импульсов будут распространяться в направлении стены, расходясь в форме конуса с относительно узким углом около 15 градусов.
Обнаружение эха:
Контакт Echo является ключом к обнаружению отраженных волн. Как только ультразвуковые волны посылаются, контакт Echo переходит в высокое состояние. Таким образом датчик сигнализирует о начале процесса измерения. Затем он ожидает возвращения отраженных волн. Когда ультразвуковой приемник улавливает отраженные волны, контакт Echo переходит в низкое состояние. Время, в течение которого контакт Echo остается в высоком состоянии, равно времени прохождения ультразвуковых волн в обе стороны. В проекте Raspberry Pi вы будете использовать функцию для измерения времени, в течение которого контакт Echo находится в высоком состоянии, что является важным шагом в расчете расстояния.
Расчет расстояния:
Расчёт расстояния: заключительный шаг — вычисление расстояния до препятствия. Формула для расчёта расстояния в сантиметрах: . Коэффициент 0,0343 получается из скорости звука в воздухе, которая составляет примерно 343 м/с. Поскольку волны проходят путь до препятствия и обратно (туда и обратно), общее пройденное расстояние делится на 2, чтобы получить расстояние до препятствия в одну сторону. Например, если измеренное время высокого уровня на выводе Echo равно 2000 мкс, то расстояние рассчитывается так: см. Этот расчёт одинаков независимо от того, используете ли вы HC-SR04 в простом любительском проекте или в сложном промышленном приложении.
Взаимодействие с популярными микроконтроллерами
Руководство по настройке Arduino
Схема подключения
- VCC: Подключите вывод VCC HC-SR04 к выводу 5V Arduino. Это обеспечит необходимую питание для модуля датчика. Стабильное питание 5V от Arduino гарантирует оптимальную работу датчика.
- GND: Контакт GND (заземление) HC — SR04 должен быть подключен к контакту GND Arduino. Это создает общий эталон заземления для датчика и Arduino, что имеет решающее значение для правильной электрической связи.
- Trig: Подключите контакт Trig (Trigger) HC — SR04 к цифровому контакту 2 Arduino. Это контакт, по которому Arduino будет посылать импульс высокого уровня 10 мкс для запуска процесса измерения расстояния в HC — SR04.
- Echo: Контакт Echo HC-SR04 подключается к цифровому контакту 3 Arduino. Arduino считывает импульс высокой длительности на этом контакте для расчета расстояния до препятствия.
HC - SR04 Arduino
VCC ------------ 5V
GND ------------ GND
Trig ------------ Digital Pin 2
Echo ------------ Digital Pin 3
Пример кода
const int trigPin = 2;
const int echoPin = 3;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
В функции setup мы сначала инициализируем последовательную связь на скорости 9600 бод, что позволяет просматривать показания расстояния в мониторе порта Arduino (Serial Monitor). Затем мы настраиваем trigPin как выход, а echoPin как вход.
В функции loop мы сначала устанавливаем на trigPin низкий уровень (LOW) на 2 микросекунды, чтобы обеспечить чистый старт. Затем устанавливаем высокий уровень (HIGH) на 10 микросекунд, чтобы запустить ультразвуковой передатчик в HC-SR04. После этого снова устанавливаем на trigPin низкий уровень (LOW).
Затем функция pulseIn() используется для измерения длительности импульса высокого уровня на echoPin. Эта длительность представляет собой время, за которое ультразвуковые волны дошли до препятствия и вернулись обратно. После этого мы вычисляем расстояние по формуле distance = duration * 0.0343 / 2, где 0,0343 — скорость звука в см/мкс, а деление на 2 нужно потому, что волны проходят путь до препятствия и обратно.
Наконец, мы выводим рассчитанное расстояние в монитор порта и добавляем задержку в 500 миллисекунд перед следующим измерением.
Советы
- Точное измерение длительности:
При использовании функции pulseIn() важно помнить, что она измеряет длительность импульса. В случае с HC-SR04 это время, в течение которого на выводе Echo удерживается высокий уровень. Чтобы обеспечить точные измерения, убедитесь, что отсутствуют другие электрические помехи, которые могут повлиять на длительность импульса. Также учтите, что если препятствие находится слишком далеко, импульс может завершиться по тайм-ауту. Чтобы корректно обрабатывать такие случаи, в функции pulseIn() можно задать значение тайм-аута. Например, long duration = pulseIn(echoPin, HIGH, 20000);, где 20000 — значение тайм-аута в микросекундах.
- Избегание источников шума:
На ультразвуковые волны могут влиять источники громкого шума. При размещении HC-SR04 в вашем проекте избегайте мест с высокой интенсивностью звука, таких как близость к динамикам или очень шумная промышленная среда. Шум может создавать помехи ультразвуковым волнам, излучаемым датчиком, что приводит к неточным измерениям расстояния. Если вам необходимо использовать датчик в шумной зоне, рассмотрите возможность использования звукопоглощающих материалов или кожухов для защиты датчика от шума.
Интеграция Raspberry Pi
Предупреждение о напряжении
Для решения этой проблемы можно использовать схему делителя напряжения. Простой делитель напряжения на резисторах 1 кОм и 2 кОм позволяет преобразовать 5-вольтовый выходной сигнал с вывода Echo датчика HC-SR04 в сигнал, совместимый с 3,3 В, для Raspberry Pi. Формула для расчёта выходного напряжения делителя напряжения имеет вид , где — входное напряжение (в данном случае 5 В), — первый резистор (1 кОм), а — второй резистор (2 кОм). Подставив значения, получаем , что находится в безопасном диапазоне для вывода GPIO Raspberry Pi.
Проводка
- VCC: Подключите вывод VCC датчика HC-SR04 к выводу 5V на Raspberry Pi. Это обеспечит питание модуля датчика HC-SR04.
- GND: Контакт GND HC-SR04 должен быть подключен к контакту GND на Raspberry Pi для установления общего заземления.
- Trig: Подключите контакт Trig HC-SR04 к GPIO 17 на Raspberry Pi. Raspberry Pi будет использовать этот контакт для отправки импульса высокого уровня 10 мкс на HC-SR04.
- Echo: Контакт Echo датчика HC-SR04, после прохождения через схему делителя напряжения (резисторы 1 кОм и 2 кОм), подключается к GPIO 27 на Raspberry Pi. Raspberry Pi будет считывать импульс высокой длительности на этом контакте для расчета расстояния.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Код Python
import RPi.GPIO as GPIO
import time
# Set the GPIO mode
GPIO.setmode(GPIO.BCM)
# Define the pins
TRIG = 17
ECHO = 27
# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
def measure_distance():
# Send a 10μs high - level pulse to trigger the sensor
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
# Wait for the echo to start
while GPIO.input(ECHO)==0:
pulse_start = time.time()
# Wait for the echo to end
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150 # Speed of sound in cm/s divided by 2
distance = round(distance, 2)
return distance
try:
while True:
dist = measure_distance()
print(f"Distance: {dist} cm")
time.sleep(1)
except KeyboardInterrupt:
print("Measurement stopped by User")
GPIO.cleanup()
В этом коде мы сначала импортируем необходимые библиотеки: RPi.GPIO для управления выводами GPIO на Raspberry Pi и time для добавления задержек. Затем мы устанавливаем режим нумерации GPIO BCM (нумерация по каналам SoC Broadcom). Мы определяем выводы TRIG и ECHO, настраиваем вывод TRIG как выход, а вывод ECHO как вход.
Функция measure_distance — это то место, где происходит вся «магия». Она отправляет на вывод TRIG импульс высокого уровня длительностью 10 мкс, чтобы запустить HC-SR04. Затем она ожидает, пока на выводе ECHO появится высокий уровень (что означает начало эха), и запоминает время начала. После этого она ожидает, пока на выводе ECHO установится низкий уровень (что означает конец эха), и запоминает время окончания. Разница между временем начала и временем окончания используется для расчёта расстояния. Расстояние вычисляется умножением длительности импульса на скорость звука в см/с (34300 см/с) и делением на 2 (так как звук проходит путь до препятствия и обратно).
В блоке try мы непрерывно измеряем расстояние и выводим его в консоль каждую секунду. Если пользователь нажимает Ctrl + C (KeyboardInterrupt), программа очищает состояние выводов GPIO и корректно завершает работу.
ESP32 Конфигурация
Распределение контактов
Код Arduino IDE
const int trigPin = 14;
const int echoPin = 15;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
В функции setup мы инициализируем последовательную связь на скорости 115200 бод. Затем мы настраиваем trigPin как выход, а echoPin как вход.
В функции loop процесс запуска HC-SR04 и измерения расстояния такой же, как в коде для Arduino. Мы отправляем на trigPin импульс высокого уровня длительностью 10 мкс, чтобы запустить датчик, измеряем длительность импульса высокого уровня на echoPin с помощью pulseIn и вычисляем расстояние.
Креативные идеи проектов с использованием HC-SR04
Робот, обходящий препятствия
Датчики настроены на обнаружение препятствий с разных сторон. Например, набор датчиков размещен в передней части робота для обнаружения любых препятствий, находящихся непосредственно на его пути. Кроме того, датчики размещены по бокам робота для обнаружения препятствий, которые могут приближаться сбоку. При обнаружении препятствия система управления роботом, которая часто основана на микроконтроллере, таком как Arduino, рассчитывает расстояние до препятствия, используя данные с датчиков HC-SR04.
На основе этой информации о расстоянии система управления затем определяет соответствующие действия, которые необходимо предпринять, чтобы избежать препятствия. Обычно это включает в себя управление двигателями таким образом, чтобы изменить направление движения робота. Например, если препятствие обнаружено с левой стороны робота, система управления может дать команду левому двигателю замедлиться или перейти в режим заднего хода, в то время как правый двигатель продолжает работать с нормальной скоростью. Это заставляет робота повернуть вправо, в сторону от препятствия.
Для реализации этого проекта вам понадобится несколько ключевых компонентов. Arduino служит «мозгом» операции. Он обрабатывает данные, полученные от датчиков HC-SR04, и отправляет команды двигателям. Двигатели необходимы для привода колес робота, что позволяет ему двигаться. Для управления двигателями необходим драйвер двигателя, такой как L298N. L298N может обрабатывать относительно высокие требования двигателей к току и позволяет Arduino эффективно контролировать скорость и направление двигателей. И, конечно же, для обнаружения спереди и сбоку необходимы несколько датчиков HC-SR04. Комбинируя эти компоненты и написав соответствующий код для их управления, вы можете создать полнофункционального робота, обходящего препятствия.
Умная мусорная корзина
Датчик HC-SR04 установлен на мусорном ведре таким образом, что он может определять расстояние до любых объектов, находящихся перед ним. Когда кто-то приближается к мусорному ведру, датчик измеряет расстояние между мусорным ведром и человеком. Если измеренное расстояние становится меньше заданного порогового значения (например, 20 см), это означает, что человек находится достаточно близко к мусорному ведру, чтобы воспользоваться им. В этот момент датчик посылает сигнал сервомотору.
Сервомотор подключен к крышке мусорного бака и отвечает за его открытие и закрытие. При получении сигнала от датчика HC-SR04 сервомотор вращается, открывая крышку. Такая бесконтактная работа не только удобна для пользователя, но и помогает сохранить мусорный бак в чистоте и гигиеничности, поскольку нет необходимости прикасаться к крышке напрямую.
При написании кода для этого проекта установка порогового значения расстояния является важным шагом. Вам необходимо тщательно откалибровать это значение в соответствии с конкретными требованиями вашего умного мусорного ведра. Если порог установлен слишком высоко, крышка может открываться без необходимости, когда кто-то еще находится на некотором расстоянии от мусорного ведра. С другой стороны, если порог установлен слишком низко, крышка может не открыться вовремя, когда пользователь приблизится. Хорошо откалиброванный порог расстояния обеспечивает оптимальную работу умного мусорного ведра.
Монитор уровня воды
Датчик HC-SR04 устанавливается над резервуаром с водой. Он излучает ультразвуковые волны вниз, в направлении поверхности воды. Эти волны распространяются по воздуху и отражаются, когда достигают поверхности воды. Затем датчик измеряет время, за которое волны доходят до поверхности воды и возвращаются обратно. Используя известную скорость звука в воздухе, можно рассчитать расстояние от датчика до поверхности воды.
Во многих случаях датчик уровня воды интегрирован с системой IoT (Интернет вещей). Например, он может быть подключен к приложению Blynk. Рассчитанные данные об уровне воды отправляются в приложение, что позволяет пользователям удаленно контролировать уровень воды. Это особенно полезно для промышленных применений, где мониторинг уровня воды в режиме реального времени имеет решающее значение для правильного функционирования процессов.
Одним из важных аспектов, который необходимо учитывать при настройке датчика уровня воды, является калибровка. Поскольку датчик устанавливается на определенной высоте над дном резервуара, эта высота должна учитываться при расчете расстояния. Например, если датчик установлен на высоте 50 см над дном резервуара, а рассчитанное расстояние от датчика до поверхности воды составляет 30 см, то фактический уровень воды в резервуаре составляет 20 см. Точно откалибровав высоту датчика и выполнив необходимые расчеты, вы можете обеспечить точность и надежность показаний датчика уровня воды.
Устранение распространенных неполадок
Несогласованные показания
Причина: многолучевое отражение или нестабильное питание
Еще одной причиной является нестабильное питание. Если питание HC-SR04 нестабильно, это может привести к неисправности датчика. Колебания напряжения могут повлиять на правильную работу ультразвукового передатчика и приемника, что приведет к нестабильным измерениям расстояния. Например, если вы используете батарею с низким зарядом или адаптер питания с плохой регулировкой напряжения, датчик может не получать стабильное питание 5 В, что может повлиять на его работу.
Исправление: добавьте защитный кожух для датчика и используйте стабилизированный источник питания 5 В.
Использование стабилизированного источника питания 5 В имеет решающее значение для стабильной работы. Блок питания со встроенной стабилизацией напряжения, такой как высококачественный настенный адаптер или модуль питания с регулировкой напряжения, обеспечивает стабильное напряжение 5 В для HC-SR04. Это помогает устранить любые проблемы, вызванные колебаниями напряжения, и повышает общую точность и стабильность показаний датчика.
Нет выходного сигнала
Если вы используете HC-SR04 с Raspberry Pi, не забудьте проверить схему делителя напряжения. Как упоминалось ранее, контакты GPIO Raspberry Pi могут работать только с напряжением 3,3 В, и делитель напряжения часто используется для преобразования выходного напряжения 5 В с контакта Echo HC-SR04 в сигнал, совместимый с 3,3 В. Если компоненты делителя напряжения (обычно резисторы) повреждены или неправильно подключены, это может привести к тому, что Raspberry Pi не будет получать выходной сигнал.
Логика кода для синхронизации триггера/эха также является важной областью, которую необходимо проверить. Убедитесь, что код посылает правильный триггерный сигнал (импульс высокого уровня 10 мкс) на контакт Trig и что он правильно измеряет длительность импульса высокого уровня на контакте Echo. Неправильный код может помешать срабатыванию датчика или привести к неправильной интерпретации эхо-сигнала микроконтроллером, что приведет к отсутствию выхода или неправильным расчетам расстояния. Например, если задержки в коде установлены неправильно, это может нарушить правильную последовательность срабатывания датчика и считывания эха.
Ошибки выхода за пределы диапазона
Также важно правильно обрабатывать значения 0 или ∞ (бесконечность) в коде. Значение расстояния 0 может означать, что датчик находится слишком близко к объекту, ближе, чем его минимальный диапазон обнаружения. В таких случаях вы можете установить минимальный порог расстояния в своем коде и соответствующим образом скорректировать значение расстояния. Аналогично, если код вычисляет чрезвычайно большое значение расстояния (приближающееся к бесконечности), это, вероятно, указывает на ошибку, например, на проблему с обнаружением эха или неверные вычисления. Ваш код должен уметь корректно обрабатывать такие случаи, например, регистрируя сообщение об ошибке или пытаясь повторно измерить расстояние.
HC-SR04 по сравнению с другими датчиками расстояния
vs. Инфракрасные датчики
HC-SR04
Диапазон: 2–400 см (Abstract 1, 6)
Точность: ±3 мм (в идеальных условиях, Abstract 1)
Напряжение: 5 В (фиксированное, Abstract 1)
Преимущества: нет влияния освещения, большая дальность (Abstract 5)
Недостатки: сниженная точность на малых расстояниях, чувствительность к ультразвуковым помехам (Abstract 1)
Инфракрасный
Диапазон: обычно <100 см (Abstract 1, 5)
Точность: ±5 мм – 1 см (зависит от цвета/материала, Abstract 5)
Напряжение: 3,3–5 В (гибкое, Abstract 5)
Преимущества: малый размер, низкая стоимость (Abstract 1)
Недостатки: влияние внешнего освещения и цвета поверхности (Abstract 5)
В таблице 1 показан компромисс между надежным датчиком HC-SR04 с большим радиусом действия (2–400 см) и компактными размерами/низкой стоимостью инфракрасных датчиков, с учетом устойчивости HC-SR04 к световым помехам по сравнению с уязвимостью инфракрасных датчиков к окружающему освещению и цвету материалов.
по сравнению с лазерными датчиками
HC-SR04
Диапазон: 2–400 см (Abstract 1, 4)
Точность: ±3 мм (Abstract 4)
Частота обновления: 60 мс (Abstract 4)
Стоимость: ~$2–3 (Abstract 1)
Недостаток: конус обнаружения 15°, чувствительность к внешним помехам (Abstract 1)
Лазерный датчик/ToF (VL53L0X)
Диапазон: 5–200 см (Abstract 1, 3)
Точность: ±1–3 мм (Abstract 3)
Частота обновления: 20 мс (быстрее, Abstract 4)
Стоимость: ~$10–15 (Abstract 1)
Преимущество: узкий луч 5°, устойчивость к помехам (Abstract 3)
В таблице 2 сравниваются экономичность (2–3 доллара) и широкий диапазон (400 см) датчика HC-SR04 с превосходной точностью (±1 мм) и скоростью (частота обновления 20 мс) лазерных/ToF-датчиков, которые идеально подходят для применений, требующих высокой точности в контролируемых средах.
против США — 100 модулей
HC-SR04
Диапазон: 2–400 см (Abstract 2, 6)
Точность: ±3 мм (номинальная, Abstract 2)
Напряжение: только 5 В (Abstract 6)
Особенность: только GPIO, без температурной компенсации (Abstract 3)
Проблема: случайные значения за пределами 400 см (Abstract 6)
US-100
Диапазон: 2–450 см (Abstract 2, 3)
Точность: ±2 мм (лучше в тестах, Abstract 3)
Напряжение: 3,3–5 В (Abstract 3)
Особенность: температурная компенсация (режим UART), коды ошибок (Abstract 6)
Недостаток: более высокая стоимость ($5–8), требуется настройка UART (Abstract 3)
В таблице 3 показаны улучшенный диапазон (450 см), повышенная точность (±2 мм) и совместимость с 3,3 В/5 В датчика US-100 по сравнению с простотой датчика HC-SR04 (только GPIO), а также подчеркнута функция температурной компенсации датчика US-100 для промышленного использования при более высокой стоимости (5–8 долларов).
Передовые технологии и оптимизация
Калибровка нескольких датчиков
Однако при использовании нескольких датчиков значительной проблемой может стать перекрестная интерференция. Перекрестная интерференция возникает, когда ультразвуковые волны, излучаемые одним датчиком, мешают работе другого датчика. Это может привести к неточным показаниям, поскольку датчики могут неправильно интерпретировать мешающие волны как эхо от реальных препятствий.
Для уменьшения перекрестных помех можно использовать несколько методов. Один из подходов заключается в временном мультиплексировании датчиков. Это предполагает активацию датчиков по одному, с достаточным интервалом времени между каждой активацией. Например, если у вас есть четыре датчика HC-SR04 на роботе, вы можете активировать датчик 1, дождаться завершения его цикла измерения, затем активировать датчик 2 и так далее. Таким образом, вы гарантируете, что ультразвуковые волны от одного датчика не пересекаются с волнами другого датчика, что снижает вероятность перекрестных помех.
Другой метод — использование экранирующих материалов. Установка физического барьера, такого как тонкий металлический лист или звукопоглощающий материал, между датчиками может помочь блокировать ультразвуковые волны от одного датчика, чтобы они не достигали другого. Это может быть особенно полезно в ситуациях, когда датчики расположены в непосредственной близости друг от друга.
Калибровка также имеет решающее значение при использовании нескольких датчиков. Каждый датчик может иметь немного разные характеристики, такие как чувствительность или угол луча. Калибруя датчики, вы можете учесть эти различия и обеспечить согласованность данных со всех датчиков. Это может включать измерение расстояния до известного объекта с помощью каждого датчика и корректировку показаний на основе различий.
Фильтрация шума
Одним из широко используемых методов является фильтр скользящего среднего. Фильтр скользящего среднего рассчитывает среднее значение из серии последовательных показаний расстояния. Например, вместо использования одного показания расстояния можно взять последние 5 показаний и рассчитать их среднее значение. Это сглаживает нестабильные показания, поскольку небольшие колебания, как правило, компенсируют друг друга при усреднении. В Python реализация простого фильтра скользящего среднего для показаний расстояния HC-SR04 может выглядеть следующим образом:
distance_readings = []
num_readings = 5
def moving_average_filter(new_distance):
distance_readings.append(new_distance)
if len(distance_readings) > num_readings:
distance_readings.pop(0)
return sum(distance_readings) / len(distance_readings)
Еще одним эффективным методом фильтрации является медианный фильтр. Медианный фильтр заменяет каждое значение расстояния медианным значением набора последовательных значений. Медиана менее чувствительна к экстремальным значениям или выбросам по сравнению со средним значением. Например, если у вас есть набор из 5 показаний расстояния [20, 22, 18, 50, 21], медиана равна 21. При использовании медианного фильтра выброс 50 не окажет существенного влияния на результат фильтрации. В Arduino реализация медианного фильтра может выглядеть следующим образом:
const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;
void addReading(int newReading) {
total = total - readings[readIndex];
readings[readIndex] = newReading;
total = total + readings[readIndex];
readIndex = readIndex + 1;
if (readIndex >= numReadings) {
readIndex = 0;
}
}
int getMedian() {
int sortedReadings[numReadings];
for (int i = 0; i < numReadings; i++) {
sortedReadings[i] = readings[i];
}
for (int i = 0; i < numReadings - 1; i++) {
for (int j = i + 1; j < numReadings; j++) {
if (sortedReadings[i] > sortedReadings[j]) {
int temp = sortedReadings[i];
sortedReadings[i] = sortedReadings[j];
sortedReadings[j] = temp;
}
}
}
return sortedReadings[numReadings / 2];
}
Пользовательские режимы работы
Однако в некоторых версиях HC-SR04 также доступны режимы UART (универсальный асинхронный приемник/передатчик) и I2C (меж-интегральная схема). В режиме UART модуль может связываться с микроконтроллером с помощью последовательной связи. Это может быть полезно в приложениях, где предпочтительнее использовать более стандартизированный протокол последовательной связи, например, в некоторых промышленных системах управления или при интеграции с устройствами, имеющими встроенные интерфейсы UART.
Режим I2C, с другой стороны, позволяет осуществлять связь по шине I2C. Это выгодно в конфигурациях с несколькими устройствами, где несколько датчиков или компонентов должны связываться с одним микроконтроллером. Шина I2C позволяет более эффективно использовать выводы микроконтроллера, поскольку несколько устройств могут совместно использовать одну и ту же двухпроводную шину (SDA — последовательная линия данных и SCL — последовательная линия тактовой частоты).
Чтобы настроить модуль для этих пользовательских режимов, необходимо обратиться к документации модуля, чтобы определить соответствующие значения резисторов. Например, для включения режима UART может потребоваться подключить специальный резистор между двумя контактами на модуле. После правильной настройки резисторов модуль можно запрограммировать на связь в желаемом режиме. Это может потребовать написания другого кода в микроконтроллере для обработки протоколов связи UART или I2C. Например, в проекте Raspberry Pi с использованием I2C — настроенного HC — SR04, вы будете использовать библиотеку smbus в Python для связи с датчиком по шине I2C.
HC-SR04: временные параметры, уровни и источники погрешности
HC-SR04 оценивает расстояние по времени двойного прохождения ультразвукового импульса: расстояние = время эха × скорость звука / 2. Варианты модуля различаются, поэтому проверьте питание и уровень Echo; выход 5 В перед входом только 3,3 В требует согласования.
- Сформируйте запуск: подайте импульс нужной конкретному модулю длительности и измеряйте Echo.
- Задайте тайм-аут: прекращайте ожидание без эха, чтобы программа не зависала.
- Учитывайте скорость звука: температура меняет пересчёт, а движение воздуха добавляет ошибку.
- Соблюдайте геометрию: мягкие, наклонные, узкие и близкие поверхности поглощают или отклоняют сигнал.
- Исключайте взаимные помехи: запускайте датчики по очереди и фильтруйте невозможные скачки.




