Ультразвуковые датчики HC-SR04

Содержание

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

Что такое ультразвуковой датчик HC-SR04?

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

Front and back view of HC SR04 Ultrasonic Sensor Module
Front and back view of HC - SR04 Ultrasonic Sensor Module

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

Понимание технических характеристик ультразвукового датчика HC-SR04 имеет решающее значение для реализации любого проекта. Ниже приведена таблица технических характеристик:

Рабочее напряжение
+5 В постоянного тока (от 4,5 В до 5,5 В)
Рабочий ток
~15 мА (в режиме ожидания: ~2 мА)
Диапазон измерения
от 2 см до 400 см (от 0,8" до 13 футов)
Точность
±3 мм (в лучшем случае, зависит от окружающей среды)
Разрешение
0,3 см (теоретически возможно 1 мм при калибровке)
Угол обнаружения
Конус с углом ~15°
Входной сигнал запуска (Trigger)
Импульс HIGH длительностью 10 мкс для начала измерения
Выходной сигнал эха (Echo)
Ширина импульса пропорциональна расстоянию: 1 мкс = 0,017 см (при скорости звука 340 м/с)
Рабочая частота
40 кГц ультразвуковая частота
Цикл измерения
≥60 мс (чтобы избежать взаимных помех между измерениями)
Рабочая температура
от -15°C до +60°C (от 5°F до 140°F)
Габариты
45 мм × 20 мм × 15 мм (модуль датчика)
Вес
~5 г (только модуль)

Пояснение:

  1. Диапазон: HC — SR04 имеет рабочий диапазон от 2 см до 400 см (0,8 дюйма до 157 дюймов). Этот относительно широкий диапазон делает его пригодным для различных применений. Например, в небольшом проекте по робототехнике, где робот должен перемещаться по комнате, диапазон 2 — 400 см позволяет эффективно обнаруживать близлежащую мебель или стены. В более крупных промышленных приложениях он может использоваться для измерения расстояния между компонентами оборудования в пределах этого диапазона. Однако важно отметить, что точность может немного варьироваться на крайних пределах этого диапазона.
  1. Разрешение: с разрешением 0,3 см HC-SR04 может обеспечить достаточно точные измерения расстояния. Такой уровень точности достаточен для большинства любительских и многих промышленных применений. В проекте, связанном с 3D-печатью, где датчик используется для определения расстояния до печатной платформы для автоматического выравнивания, разрешение 0,3 см может гарантировать, что печатающая головка находится на правильной высоте над платформой, что обеспечивает высокое качество печати.
  1. Источник питания: Работает от источника питания 5 В постоянного тока. Во время работы потребляет рабочий ток 15 мА, что является относительно низким энергопотреблением. В режиме ожидания потребление тока еще меньше, менее 2 мА. Это делает его энергоэффективным выбором для проектов с питанием от батарей. Например, в узле датчика IoT с питанием от батареи, который использует HC-SR04 для измерения расстояния, низкое энергопотребление гарантирует, что батарея прослужит в течение длительного периода времени.
  1. Рабочий угол: Рабочий угол HC-SR04 составляет менее 15°. Это означает, что датчик имеет относительно узкое поле зрения. Он наиболее эффективен при обнаружении препятствий, которые находятся непосредственно перед ним. В системе безопасности умного дома, где датчик используется для обнаружения злоумышленников, приближающихся к двери, узкий рабочий угол позволяет сфокусироваться на обнаружении объектов, движущихся прямо к датчику, что снижает количество ложных срабатываний от объектов, находящихся в периферийной зоне.
  1. Интерфейс: Модуль имеет 4-контактный интерфейс, который включает контакты VCC, GND, Trig и Echo. Простая конструкция интерфейса упрощает подключение к различным микроконтроллерам и другим электронным компонентам.

Объяснение распиновки

Вывод 1
Обозначение
VCC
Назначение
Питание (плюс)
Напряжение
5 В постоянного тока
Подключение
Arduino: 5V
Raspberry Pi: 5V (общая земля с модулем)
Вывод 2
Обозначение
Trig (запуск)
Назначение
Вход запуска
▶ Импульс HIGH длительностью 10 мкс для начала измерения
▶ Низкий уровень для сброса
Подключение
Arduino: любой цифровой вывод (например, D2)
Raspberry Pi: любой GPIO (например, GPIO17)
Вывод 3
Обозначение
Echo (эхо)
Назначение
Выход эха
▶ Длительность HIGH = время прохождения ультразвука туда и обратно
▶ Макс. время HIGH: 38 мс (тайм-аут при отсутствии препятствия)
Подключение
Arduino: любой цифровой вывод (например, D3)
Raspberry Pi: GPIO через делитель напряжения (5 В→3,3 В)
⚠️ Прямое подключение 5-вольтового Echo к Raspberry Pi может повредить GPIO! Используйте делитель напряжения 1 кОм + 2 кОм.
Вывод 4
Обозначение
GND
Назначение
Земля питания (общий провод)
Подключение
Arduino/GND
Raspberry Pi/GND

Пояснение:

Контакт VCC отвечает за питание модуля. Подключение его к стабильному источнику питания 5 В, предпочтительно от выхода 5 В микроконтроллера, обеспечивает правильную работу модуля. Стабильное питание имеет решающее значение для точности показаний. Нестабильное питание может привести к неточным измерениям расстояния. Например, если в питании HC-SR04 происходят скачки или падения напряжения, датчик может излучать неверные ультразвуковые импульсы или неверно интерпретировать полученные эхо-сигналы, что приведет к неточным расчетам расстояния.
Контакт GND обеспечивает необходимое заземление. Он замыкает электрическую цепь и помогает поддерживать стабильное опорное напряжение для модуля. Без надлежащего заземления модуль может не работать вообще или давать нестабильные результаты. В проектах на базе Arduino контакт GND модуля HC-SR04 обычно подключается к контакту GND платы Arduino для обеспечения общего заземления.
Все начинается с контакта Trig. Когда на этот контакт поступает импульс высокого уровня продолжительностью 10 мкс, он запускает ультразвуковой передатчик, который посылает серию из 8 импульсов ультразвуковых волн частотой 40 кГц. В проекте Raspberry Pi на базе Python вы можете использовать библиотеку GPIO (General Purpose Input/Output) для генерации этого импульса высокого уровня длительностью 10 мкс. Этот простой механизм цифрового ввода позволяет легко контролировать процесс измерения расстояния.

Вывод Echo — ключ к получению информации о расстоянии. После того как ультразвуковые волны отправлены, на выводе Echo устанавливается высокий уровень. Он сохраняется до тех пор, пока отражённые волны не будут приняты ультразвуковым приёмником. Длительность высокого уровня на выводе Echo прямо пропорциональна времени, за которое ультразвуковые волны проходят до препятствия и обратно. Измерив эту длительность, можно вычислить расстояние до препятствия по формуле Расстояние ( см ) = Время ( мкс ) × 0,0343 2 . В проекте Arduino на C++ для измерения длительности импульса высокого уровня на выводе Echo можно использовать функцию pulseIn().

Основные компоненты и принцип работы

Ключевые компоненты

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

  1. Ультразвуковой передатчик: это компонент, отвечающий за начальный этап процесса измерения расстояния. Он излучает ультразвуковые волны с частотой 40 кГц. Эти высокочастотные волны неслышимы для человеческого уха, но являются ключом к работе датчика. При срабатывании передатчик посылает эти волны в окружающую среду. Представьте себе мощный динамик, излучающий звуковые волны с частотой, намного превышающей ту, которую мы можем слышать. Например, в робототехнике ультразвуковой передатчик на роботе посылает эти волны частотой 40 кГц в направлении движения робота, готовясь обнаружить любые препятствия на его пути.
  1. Ультразвуковой приемник: Как следует из названия, задача ультразвукового приемника состоит в улавливании ультразвуковых волн, отраженных от любых препятствий в радиусе действия датчика. После того, как передатчик посылает волны, они распространяются по воздуху, пока не столкнутся с объектом. Затем волны отражаются, и задача приемника состоит в улавливании этих отраженных волн. Это похоже на высокочувствительный микрофон, который может улавливать самые слабые эхо-сигналы ультразвуковых волн. В системе домашней автоматизации, где HC-SR04 используется для обнаружения присутствия человека в комнате, приемник улавливает волны, отраженные от тела человека.
  1. Управляющая схема: это «мозг» всей операции. Управляющая схема управляет всей последовательностью обработки сигнала. Она координирует действия передатчика и приемника. При получении триггерного сигнала она дает команду передатчику излучать ультразвуковые волны. Затем она внимательно следит за приемником на предмет поступающих отраженных волн. После приема волн схема управления вычисляет время, за которое волны дошли до препятствия и вернулись обратно. На основе этого времени и известной скорости звука в воздухе она вычисляет расстояние до препятствия. В промышленных условиях схема управления в 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 2 . Коэффициент 0,0343 получается из скорости звука в воздухе, которая составляет примерно 343 м/с. Поскольку волны проходят путь до препятствия и обратно (туда и обратно), общее пройденное расстояние делится на 2, чтобы получить расстояние до препятствия в одну сторону. Например, если измеренное время высокого уровня на выводе Echo равно 2000 мкс, то расстояние рассчитывается так: 2000 × 0,0343 2 = 34,3 см. Этот расчёт одинаков независимо от того, используете ли вы HC-SR04 в простом любительском проекте или в сложном промышленном приложении.

Взаимодействие с популярными микроконтроллерами

Руководство по настройке Arduino

Схема подключения

Подключение ультразвукового датчика 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
				
			

Пример кода

Вот базовый пример кода Arduino, который поможет вам начать измерять расстояние с помощью HC-SR04:
				
					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);
}
				
			
В функции настройки мы сначала инициализируем последовательную связь со скоростью передачи данных 9600 бод, что позволяет нам просматривать показания расстояния в последовательном мониторе Arduino. Затем мы устанавливаем trigPin в качестве вывода и echoPin в качестве входа.
В функции loop мы начинаем с установки trigPin в LOW на 2 микросекунды, чтобы обеспечить чистый старт. Затем мы устанавливаем его в HIGH на 10 микросекунд, чтобы запустить ультразвуковой передатчик в HC-SR04. После этого мы снова устанавливаем trigPin в LOW.
Затем функция pulseIn используется для измерения длительности импульса высокого уровня на echoPin. Эта длительность представляет время, которое потребовалось ультразвуковым волнам, чтобы дойти до препятствия и вернуться обратно. Затем мы вычисляем расстояние по формуле расстояние = длительность * 0,0343 / 2, где 0,0343 — скорость звука в см/мкс, и мы делим на 2, потому что волны доходят до препятствия и возвращаются обратно.
Наконец, мы выводим рассчитанное расстояние на последовательный монитор и добавляем задержку в 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 миллисекунд перед следующим измерением.

Советы

  1. Точное измерение длительности:

При использовании функции pulseIn() важно помнить, что она измеряет длительность импульса. В случае с HC-SR04 это время, в течение которого на выводе Echo удерживается высокий уровень. Чтобы обеспечить точные измерения, убедитесь, что отсутствуют другие электрические помехи, которые могут повлиять на длительность импульса. Также учтите, что если препятствие находится слишком далеко, импульс может завершиться по тайм-ауту. Чтобы корректно обрабатывать такие случаи, в функции pulseIn() можно задать значение тайм-аута. Например, long duration = pulseIn(echoPin, HIGH, 20000);, где 20000 — значение тайм-аута в микросекундах.

  1. Избегание источников шума:

На ультразвуковые волны могут влиять источники громкого шума. При размещении HC-SR04 в вашем проекте избегайте мест с высокой интенсивностью звука, таких как близость к динамикам или очень шумная промышленная среда. Шум может создавать помехи ультразвуковым волнам, излучаемым датчиком, что приводит к неточным измерениям расстояния. Если вам необходимо использовать датчик в шумной зоне, рассмотрите возможность использования звукопоглощающих материалов или кожухов для защиты датчика от шума.

Интеграция Raspberry Pi

Предупреждение о напряжении

Одним из ключевых моментов при интеграции HC-SR04 с Raspberry Pi являются уровни напряжения. Контакты GPIO (универсальные входы/выходы) на Raspberry Pi могут принимать напряжение не более 3,3 В. Однако HC-SR04 работает от 5 В, и контакт Echo HC-SR04 может выводить сигнал 5 В. Подключение сигнала 5 В непосредственно к контакту GPIO Raspberry Pi может повредить Pi.

Для решения этой проблемы можно использовать схему делителя напряжения. Простой делитель напряжения на резисторах 1 кОм и 2 кОм позволяет преобразовать 5-вольтовый выходной сигнал с вывода Echo датчика HC-SR04 в сигнал, совместимый с 3,3 В, для Raspberry Pi. Формула для расчёта выходного напряжения V вых делителя напряжения имеет вид V вых = V вх × R 2 R 1 + R 2 , где V вх — входное напряжение (в данном случае 5 В), R 1 — первый резистор (1 кОм), а R 2 — второй резистор (2 кОм). Подставив значения, получаем V вых = 5 × 2000 1000 + 2000 ≈ 3,33 В , что находится в безопасном диапазоне для вывода 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

Вот пример кода на Python, использующий библиотеку RPi.GPIO для соединения HC-SR04 с Raspberry Pi:
				
					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 Конфигурация

Распределение контактов

ESP32 — это мощный микроконтроллер с несколькими контактами GPIO (универсальные входы/выходы). При подключении HC-SR04 к ESP32 вы можете использовать 5 В от контакта VOUT ESP32 для питания HC-SR04. Контакты Trig и Echo можно подключить к любым доступным контактам GPIO. Например, вы можете подключить вывод Trig к GPIO 14, а вывод Echo — к GPIO 15. Однако убедитесь, что выбранные выводы не используются другими компонентами вашего проекта.

Код Arduino IDE

Код для использования HC-SR04 с ESP32 в Arduino IDE очень похож на код Arduino. Вот пример:
				
					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 и вычисляем расстояние.

Однако при использовании ESP32 в Arduino IDE убедитесь, что в IDE выбрана правильная плата ESP32. Кроме того, если вы планируете интегрировать ESP32 с функциями IoT (Интернет вещей), такими как WiFi или Bluetooth, вам необходимо обработать инициализацию этих функций в своем коде. Например, если вы хотите отправить данные о расстоянии по WiFi, вам нужно будет добавить код для подключения к сети WiFi и настроить сервер или клиент для отправки данных.

Креативные идеи проектов с использованием HC-SR04

Робот, обходящий препятствия

Робот, обходящий препятствия, представляет собой увлекательное и практичное применение ультразвукового датчика HC-SR04. Его основная функция заключается в безопасном перемещении по окружающей среде путем обнаружения препятствий на своем пути. Это достигается за счет использования нескольких датчиков HC-SR04, стратегически размещенных на роботе.

Датчики настроены на обнаружение препятствий с разных сторон. Например, набор датчиков размещен в передней части робота для обнаружения любых препятствий, находящихся непосредственно на его пути. Кроме того, датчики размещены по бокам робота для обнаружения препятствий, которые могут приближаться сбоку. При обнаружении препятствия система управления роботом, которая часто основана на микроконтроллере, таком как Arduino, рассчитывает расстояние до препятствия, используя данные с датчиков HC-SR04.

На основе этой информации о расстоянии система управления затем определяет соответствующие действия, которые необходимо предпринять, чтобы избежать препятствия. Обычно это включает в себя управление двигателями таким образом, чтобы изменить направление движения робота. Например, если препятствие обнаружено с левой стороны робота, система управления может дать команду левому двигателю замедлиться или перейти в режим заднего хода, в то время как правый двигатель продолжает работать с нормальной скоростью. Это заставляет робота повернуть вправо, в сторону от препятствия.

Для реализации этого проекта вам понадобится несколько ключевых компонентов. Arduino служит «мозгом» операции. Он обрабатывает данные, полученные от датчиков HC-SR04, и отправляет команды двигателям. Двигатели необходимы для привода колес робота, что позволяет ему двигаться. Для управления двигателями необходим драйвер двигателя, такой как L298N. L298N может обрабатывать относительно высокие требования двигателей к току и позволяет Arduino эффективно контролировать скорость и направление двигателей. И, конечно же, для обнаружения спереди и сбоку необходимы несколько датчиков HC-SR04. Комбинируя эти компоненты и написав соответствующий код для их управления, вы можете создать полнофункционального робота, обходящего препятствия.

Умная мусорная корзина

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

Датчик HC-SR04 установлен на мусорном ведре таким образом, что он может определять расстояние до любых объектов, находящихся перед ним. Когда кто-то приближается к мусорному ведру, датчик измеряет расстояние между мусорным ведром и человеком. Если измеренное расстояние становится меньше заданного порогового значения (например, 20 см), это означает, что человек находится достаточно близко к мусорному ведру, чтобы воспользоваться им. В этот момент датчик посылает сигнал сервомотору.

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

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

Монитор уровня воды

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

Датчик HC-SR04 устанавливается над резервуаром с водой. Он излучает ультразвуковые волны вниз, в направлении поверхности воды. Эти волны распространяются по воздуху и отражаются, когда достигают поверхности воды. Затем датчик измеряет время, за которое волны доходят до поверхности воды и возвращаются обратно. Используя известную скорость звука в воздухе, можно рассчитать расстояние от датчика до поверхности воды.

Во многих случаях датчик уровня воды интегрирован с системой IoT (Интернет вещей). Например, он может быть подключен к приложению Blynk. Рассчитанные данные об уровне воды отправляются в приложение, что позволяет пользователям удаленно контролировать уровень воды. Это особенно полезно для промышленных применений, где мониторинг уровня воды в режиме реального времени имеет решающее значение для правильного функционирования процессов.

Одним из важных аспектов, который необходимо учитывать при настройке датчика уровня воды, является калибровка. Поскольку датчик устанавливается на определенной высоте над дном резервуара, эта высота должна учитываться при расчете расстояния. Например, если датчик установлен на высоте 50 см над дном резервуара, а рассчитанное расстояние от датчика до поверхности воды составляет 30 см, то фактический уровень воды в резервуаре составляет 20 см. Точно откалибровав высоту датчика и выполнив необходимые расчеты, вы можете обеспечить точность и надежность показаний датчика уровня воды.

Устранение распространенных неполадок

Несогласованные показания

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

Причина: многолучевое отражение или нестабильное питание

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

Еще одной причиной является нестабильное питание. Если питание HC-SR04 нестабильно, это может привести к неисправности датчика. Колебания напряжения могут повлиять на правильную работу ультразвукового передатчика и приемника, что приведет к нестабильным измерениям расстояния. Например, если вы используете батарею с низким зарядом или адаптер питания с плохой регулировкой напряжения, датчик может не получать стабильное питание 5 В, что может повлиять на его работу.

Исправление: добавьте защитный кожух для датчика и используйте стабилизированный источник питания 5 В.

Добавление защитного кожуха вокруг датчика может помочь уменьшить влияние многолучевых отражений. Кожух может быть сконструирован таким образом, чтобы направлять ультразвуковые волны более сфокусированным образом, уменьшая вероятность их отражения от нежелательных поверхностей. Простой картонный или пластиковый кожух с узким отверстием в передней части может быть эффективен в этом отношении.

Использование стабилизированного источника питания 5 В имеет решающее значение для стабильной работы. Блок питания со встроенной стабилизацией напряжения, такой как высококачественный настенный адаптер или модуль питания с регулировкой напряжения, обеспечивает стабильное напряжение 5 В для HC-SR04. Это помогает устранить любые проблемы, вызванные колебаниями напряжения, и повышает общую точность и стабильность показаний датчика.

Нет выходного сигнала

Еще одна распространенная проблема — отсутствие выходного сигнала датчика HC-SR04. Это может быть признаком нескольких различных неисправностей, и для восстановления работоспособности датчика важно систематически проверить каждую из возможных причин.
Проверка: Проверьте проводку (особенно VCC/GND), делитель напряжения для Raspberry Pi и логику кода для синхронизации триггера/эха.
Прежде всего, тщательно проверьте подключение. Убедитесь, что контакты VCC и GND правильно подключены к источнику питания и заземлению соответственно. Неплотное или неправильное подключение может помешать правильному включению датчика или вызвать короткое замыкание, которое нарушит нормальную работу модуля. Во многих случаях простая визуальная проверка и повторное подключение проводов могут решить проблему.

Если вы используете HC-SR04 с Raspberry Pi, не забудьте проверить схему делителя напряжения. Как упоминалось ранее, контакты GPIO Raspberry Pi могут работать только с напряжением 3,3 В, и делитель напряжения часто используется для преобразования выходного напряжения 5 В с контакта Echo HC-SR04 в сигнал, совместимый с 3,3 В. Если компоненты делителя напряжения (обычно резисторы) повреждены или неправильно подключены, это может привести к тому, что Raspberry Pi не будет получать выходной сигнал.

Логика кода для синхронизации триггера/эха также является важной областью, которую необходимо проверить. Убедитесь, что код посылает правильный триггерный сигнал (импульс высокого уровня 10 мкс) на контакт Trig и что он правильно измеряет длительность импульса высокого уровня на контакте Echo. Неправильный код может помешать срабатыванию датчика или привести к неправильной интерпретации эхо-сигнала микроконтроллером, что приведет к отсутствию выхода или неправильным расчетам расстояния. Например, если задержки в коде установлены неправильно, это может нарушить правильную последовательность срабатывания датчика и считывания эха.

Ошибки выхода за пределы диапазона

Ошибки выхода за пределы диапазона могут возникать, когда обнаруживаемый объект находится слишком близко или слишком далеко от датчика HC-SR04. Это может вызвать проблемы в вашем проекте, особенно если ваш код не подготовлен к обработке таких ситуаций.
Решение: Внедрить таймаут (например, 38 мс для отсутствия эха) и корректно обрабатывать значения 0 или ∞ в коде.
Реализация таймаута в коде — полезный способ обработки случаев, когда объект находится слишком далеко, чтобы датчик мог обнаружить эхо в течение разумного времени. Например, если эхо не поступает в течение 38 мс, это хороший признак того, что объект находится за пределами диапазона датчика. В коде можно настроить таймер, который запускается при отправке триггерного сигнала и останавливается при получении эха. Если таймер достигает значения таймаута, не получив эха, можно предположить, что объект находится вне диапазона, и предпринять соответствующие действия, например отобразить сообщение об ошибке или установить значение расстояния по умолчанию.

Также важно правильно обрабатывать значения 0 или ∞ (бесконечность) в коде. Значение расстояния 0 может означать, что датчик находится слишком близко к объекту, ближе, чем его минимальный диапазон обнаружения. В таких случаях вы можете установить минимальный порог расстояния в своем коде и соответствующим образом скорректировать значение расстояния. Аналогично, если код вычисляет чрезвычайно большое значение расстояния (приближающееся к бесконечности), это, вероятно, указывает на ошибку, например, на проблему с обнаружением эха или неверные вычисления. Ваш код должен уметь корректно обрабатывать такие случаи, например, регистрируя сообщение об ошибке или пытаясь повторно измерить расстояние.

HC-SR04 по сравнению с другими датчиками расстояния

vs. Инфракрасные датчики

Таблица 1: HC-SR04 (ультразвуковой) и инфракрасные датчики

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 к световым помехам по сравнению с уязвимостью инфракрасных датчиков к окружающему освещению и цвету материалов.

по сравнению с лазерными датчиками

Таблица 2: HC-SR04 и лазерный датчик/ToF (VL53L0X)

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 модулей

Таблица 3: HC-SR04 и US-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 долларов).

Передовые технологии и оптимизация

Калибровка нескольких датчиков

Для более сложных приложений, особенно в сценариях, где необходим обзор на 360°, использование нескольких датчиков HC-SR04 может стать решающим фактором. Например, в робототехнике наличие нескольких датчиков HC-SR04, стратегически размещенных вокруг корпуса робота, позволяет ему обнаруживать препятствия со всех сторон, обеспечивая всесторонний обзор окружающей среды.

Однако при использовании нескольких датчиков значительной проблемой может стать перекрестная интерференция. Перекрестная интерференция возникает, когда ультразвуковые волны, излучаемые одним датчиком, мешают работе другого датчика. Это может привести к неточным показаниям, поскольку датчики могут неправильно интерпретировать мешающие волны как эхо от реальных препятствий.

Для уменьшения перекрестных помех можно использовать несколько методов. Один из подходов заключается в временном мультиплексировании датчиков. Это предполагает активацию датчиков по одному, с достаточным интервалом времени между каждой активацией. Например, если у вас есть четыре датчика HC-SR04 на роботе, вы можете активировать датчик 1, дождаться завершения его цикла измерения, затем активировать датчик 2 и так далее. Таким образом, вы гарантируете, что ультразвуковые волны от одного датчика не пересекаются с волнами другого датчика, что снижает вероятность перекрестных помех.

Другой метод — использование экранирующих материалов. Установка физического барьера, такого как тонкий металлический лист или звукопоглощающий материал, между датчиками может помочь блокировать ультразвуковые волны от одного датчика, чтобы они не достигали другого. Это может быть особенно полезно в ситуациях, когда датчики расположены в непосредственной близости друг от друга.

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

Фильтрация шума

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

Одним из широко используемых методов является фильтр скользящего среднего. Фильтр скользящего среднего рассчитывает среднее значение из серии последовательных показаний расстояния. Например, вместо использования одного показания расстояния можно взять последние 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 предлагают дополнительную гибкость за счет настраиваемых режимов работы. Эти режимы можно настроить с помощью резисторов, что позволяет использовать различные протоколы связи и рабочие характеристики.
Одним из таких режимов является режим GPIO (универсальный вход/выход), который является стандартным режимом для большинства базовых приложений. В этом режиме модуль работает, как описано в предыдущих разделах, с использованием контактов Trig и Echo для запуска измерения расстояния и приема эхо-сигнала соответственно.

Однако в некоторых версиях 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.
  • Задайте тайм-аут: прекращайте ожидание без эха, чтобы программа не зависала.
  • Учитывайте скорость звука: температура меняет пересчёт, а движение воздуха добавляет ошибку.
  • Соблюдайте геометрию: мягкие, наклонные, узкие и близкие поверхности поглощают или отклоняют сигнал.
  • Исключайте взаимные помехи: запускайте датчики по очереди и фильтруйте невозможные скачки.

Заключение

Ультразвуковой датчик HC — SR04 остается незаменимым компонентом в электронных проектах благодаря своей доступности, простоте использования и универсальности. Освоив принцип его работы, подключив к популярным микроконтроллерам и изучив творческие способы применения, вы сможете раскрыть весь его потенциал — от базового измерения расстояния до сложных систем IoT. Есть вопросы или идеи для проектов? Поделитесь ими с нами через плавающую форму! 🛠️

Об авторе

Picture of Aidan Taylor
Aidan Taylor

Я Эйдан Тейлор, и у меня более 10 лет опыта работы в области реверс-инжиниринга печатных плат, дизайна печатных плат и разблокировки IC.

Поделиться

Рекомендуемый пост

Tags

Нужна помощь?

Прокрутить вверх

Instant Quote

Мгновенный расчет