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

Operating Voltage
+5V DC (4.5V to 5.5V)
Operating Current
~15mA (Standby: ~2mA)
Range
2cm to 400cm (0.8" to 13ft)
Accuracy
±3mm (Best case, varies with environment)
Resolution
0.3cm (1mm theoretically possible with calibration)
Angle of Detection
~15° cone angle
Trigger Input Signal
10μs HIGH pulse to initiate ranging
Echo Output Signal
Pulse width proportional to distance: 1μs = 0.017cm (based on sound speed 340m/s)
Maximum Frequency
40kHz ultrasonic frequency
Measurement Cycle
≥60ms (to avoid interference between measurements)
Operating Temperature
-15°C to +60°C (5°F to 140°F)
Dimensions
45mm × 20mm × 15mm (sensor module)
Weight
~5g (module only)

Пояснение:

  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. Простая конструкция интерфейса упрощает подключение к различным микроконтроллерам и другим электронным компонентам.

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

Pin 1
Label
VCC
Function
Power Supply (Positive)
Voltage
5V DC
Connection
Arduino: 5V
Raspberry Pi: 5V (Common ground with module)
Pin 2
Label
Trig (Trigger)
Function
Trigger Input
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Connection
Arduino: Any Digital Pin (e.g., D2)
Raspberry Pi: Any GPIO (e.g., GPIO17)
Pin 3
Label
Echo
Function
Echo Output
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Connection
Arduino: Any Digital Pin (e.g., D3)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
⚠️ Direct 5V Echo to Raspberry Pi may damage GPIO! Use 1kΩ + 2kΩ voltage divider.
Pin 4
Label
GND
Function
Power Ground (Common Ground)
Connection
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 мкс. Этот простой механизм цифрового ввода позволяет легко контролировать процесс измерения расстояния.

The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula Distance ( cm ) = Time ( μs ) × 0.0343 2 . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.

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

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

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

Расчет расстояния:

Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is Distance (cm) = Time ((μs)) × 0.0343 2 . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as 2000 × 0.0343 2 = 34.3 cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.

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

Руководство по настройке 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 миллисекунд перед следующим измерением.

In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.

The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.

Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.

Советы

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

When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.

  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.

To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage V out of a voltage divider is V out = V in × R 2 R 1 + R 2 , where V in is the input voltage (5V in this case), R 1 is the first resistor (1kΩ), and R 2 is the second resistor (2kΩ). Plugging in the values, we get V out = 5 × 2000 1000 + 2000 3.33 V , which is within the safe range for the Raspberry Pi GPIO pin.

Проводка

  • 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()

				
			

In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.

The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).

In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.

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);
}

				
			

In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the distance.

Однако при использовании 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. Инфракрасные датчики

Table 1: HC-SR04 (Ultrasonic) vs Infrared Sensors

HC-SR04

Range: 2cm–400cm (Abstract 1, 6)

Accuracy: ±3mm (ideal conditions, Abstract 1)

Voltage: 5V (fixed, Abstract 1)

Pros: No light interference, longer range (Abstract 5)

Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)

Infrared

Range: Typically <100cm (Abstract 1, 5)

Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)

Voltage: 3.3V–5V (flexible, Abstract 5)

Pros: Small size, low cost (Abstract 1)

Cons: Ambient light/color interference (Abstract 5)

В таблице 1 показан компромисс между надежным датчиком HC-SR04 с большим радиусом действия (2–400 см) и компактными размерами/низкой стоимостью инфракрасных датчиков, с учетом устойчивости HC-SR04 к световым помехам по сравнению с уязвимостью инфракрасных датчиков к окружающему освещению и цвету материалов.

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

Table 2: HC-SR04 vs Laser/ToF (VL53L0X)

HC-SR04

Range: 2cm–400cm (Abstract 1, 4)

Accuracy: ±3mm (Abstract 4)

Update Rate: 60ms (Abstract 4)

Cost: ~$2–3 (Abstract 1)

Weakness: 15° cone angle, environmental noise (Abstract 1)

Laser/ToF (VL53L0X)

Range: 5cm–200cm (Abstract 1, 3)

Accuracy: ±1mm–3mm (Abstract 3)

Update Rate: 20ms (faster, Abstract 4)

Cost: ~$10–15 (Abstract 1)

Strength: 5° narrow beam, interference-resistant (Abstract 3)

В таблице 2 сравниваются экономичность (2–3 доллара) и широкий диапазон (400 см) датчика HC-SR04 с превосходной точностью (±1 мм) и скоростью (частота обновления 20 мс) лазерных/ToF-датчиков, которые идеально подходят для применений, требующих высокой точности в контролируемых средах.

против США — 100 модулей

Table 3: HC-SR04 vs US-100 (Ultrasonic)

HC-SR04

Range: 2cm–400cm (Abstract 2, 6)

Accuracy: ±3mm (nominal, Abstract 2)

Voltage: 5V only (Abstract 6)

Feature: GPIO-only, no temperature compensation (Abstract 3)

Issue: Random values beyond 400cm (Abstract 6)

US-100

Range: 2cm–450cm (Abstract 2, 3)

Accuracy: ±2mm (better in tests, Abstract 3)

Voltage: 3.3V–5V (Abstract 3)

Feature: Temperature compensation (UART mode), error codes (Abstract 6)

Downside: Higher cost ($5–8), UART setup required (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 остается незаменимым компонентом в электронных проектах благодаря своей доступности, простоте использования и универсальности. Освоив принцип его работы, подключив к популярным микроконтроллерам и изучив творческие способы применения, вы сможете раскрыть весь его потенциал — от базового измерения расстояния до сложных систем IoT. Есть вопросы или идеи для проектов? Поделитесь ими с нами через плавающую форму! 🛠️

Поделиться:

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

Instant Quote