Как работает ультразвуковой датчик HC-SR04. Каковы его основные характеристики. Как подключить HC-SR04 к Arduino. Как написать код для измерения расстояния с помощью HC-SR04. Какие типичные проблемы возникают при работе с HC-SR04.
Принцип работы ультразвукового датчика HC-SR04
Ультразвуковой датчик HC-SR04 — это популярный и недорогой модуль для измерения расстояния, широко используемый в проектах с Arduino. Принцип его работы основан на отражении ультразвуковых волн от препятствий:
- Датчик испускает короткий ультразвуковой импульс частотой 40 кГц
- Звуковая волна распространяется в воздухе со скоростью около 343 м/с
- При встрече с препятствием волна отражается обратно к датчику
- Приемник датчика фиксирует отраженную волну
- Измеряется время между отправкой и приемом сигнала
- На основе времени рассчитывается расстояние до объекта
Зная скорость звука и время прохождения сигнала, можно легко вычислить расстояние по формуле:

Расстояние = (Скорость звука * Время) / 2
Деление на 2 необходимо, так как звук проходит путь до объекта и обратно.
Основные характеристики HC-SR04
Ультразвуковой датчик HC-SR04 обладает следующими ключевыми параметрами:
- Напряжение питания: 5В
- Потребляемый ток: 15 мА
- Рабочая частота: 40 кГц
- Дальность измерения: 2-400 см
- Точность: до 3 мм
- Угол обзора: 15 градусов
- Размеры: 45x20x15 мм
Благодаря своей доступности, простоте использования и хорошим характеристикам, HC-SR04 стал стандартным выбором для многих проектов, требующих измерения расстояния.
Подключение HC-SR04 к Arduino
Датчик HC-SR04 имеет 4 вывода, которые нужно подключить к Arduino:
- VCC — питание 5В
- Trig — вход запуска измерения
- Echo — выход с результатом
- GND — земля
Схема подключения выглядит следующим образом:
- VCC датчика -> 5V Arduino
- Trig датчика -> цифровой пин Arduino (например, D7)
- Echo датчика -> цифровой пин Arduino (например, D8)
- GND датчика -> GND Arduino
Важно использовать правильное напряжение питания 5В, иначе датчик может работать некорректно или выйти из строя.

Программирование Arduino для работы с HC-SR04
Базовый алгоритм работы с датчиком HC-SR04 на Arduino выглядит так:
- Подать короткий импульс на вывод Trig для запуска измерения
- Дождаться появления сигнала на выводе Echo
- Измерить длительность импульса на Echo
- Рассчитать расстояние на основе длительности
Вот пример простого кода для Arduino:
«`cpp const int trigPin = 7; const int echoPin = 8; 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.034 / 2; Serial.print(«Расстояние: «); Serial.print(distance); Serial.println(» см»); delay(500); } «`
Типичные проблемы при работе с HC-SR04
При использовании ультразвукового датчика HC-SR04 могут возникать некоторые сложности:
- Ложные срабатывания из-за помех или отражений от других объектов
- Некорректные измерения при работе с мягкими или звукопоглощающими поверхностями
- Ограниченный угол обзора, что может привести к пропуску узких объектов
- Влияние температуры и влажности на точность измерений
- Необходимость калибровки для повышения точности
Для решения этих проблем можно использовать различные методы фильтрации данных, усреднение нескольких измерений или комбинирование показаний нескольких датчиков.
Применение HC-SR04 в проектах
Ультразвуковой датчик HC-SR04 находит широкое применение в различных проектах на базе Arduino:
- Роботы, избегающие препятствий
- Системы парковки автомобилей
- Измерение уровня жидкости в резервуарах
- Охранные системы и датчики движения
- Интерактивные арт-инсталляции
- Умные мусорные баки, определяющие заполненность
Благодаря своей универсальности, HC-SR04 может быть адаптирован под множество задач, где требуется измерение расстояния или обнаружение объектов.

Альтернативы HC-SR04
Хотя HC-SR04 является популярным выбором, существуют и другие датчики расстояния для Arduino:
- Sharp GP2Y0A21YK0F — инфракрасный датчик расстояния
- VL53L0X — лазерный датчик времени пролета
- HC-SR501 — PIR датчик движения
- US-015 — улучшенная версия HC-SR04 с большей дальностью
Выбор конкретного датчика зависит от требований проекта, таких как точность, дальность действия, размеры и стоимость.
Советы по улучшению точности измерений
Для повышения точности и надежности измерений с HC-SR04 можно применить следующие приемы:
- Усреднение нескольких последовательных измерений
- Использование медианного фильтра для устранения выбросов
- Учет температуры воздуха для корректировки скорости звука
- Калибровка датчика на известных расстояниях
- Применение экранирования для защиты от электромагнитных помех
Реализация этих методов может значительно улучшить качество данных, получаемых с датчика HC-SR04.
Датчики движения и расстояния Arduino Robostore
Сортировка:
по популярности сначала дешевле по названию сначала новые
Отображение:
Датчики движения и расстояния — это датчики, фиксирующие перемещение объектов в пространстве, и последующего запуска определённых задач в зависимости от полученных показателей.
Таки датчики имеют различную чувствительность в зависимости от требуемых задач, но основной характеристикой можно выделить диапазон или зону обнаружения. Зона обнаружения — это зона пространства, в котором датчик движения гарантированно обнаружит человека или объекты.
Датчики движения и расстояния можно уловно поделить на пассивные и активные, первые спроектированы для получения определенных показателей извне, вторые сами излучают волны и анализируют полученный результат. Однако, большинство современных датчиков имеют комбинированную конструкцию.
В зависимости от излучения, на которое способен отреагировать чувствительный элемент, датчики движения можно поделить на три основных типа:
1. Ультразвуковые датчики — принцип работы таких датчиков основан на изменении звуковых волн. С определённой периодичностью такой датчик излучает в окружающее пространство ультразвуковые волны и исследует полученное отражение. Если отраженные волны изменились и эти перемены достигли контрольной точки, то делается вывод о перемене окружающей среды и срабатывает сигнал.
2. Радиоволновые датчики. Такие датчики действуют по принципу ультразвуковых, но их работа создана на основе радиоволн. Так как радиоволны имеют такую особенность, что способны проходить через неметаллические преграды, стены зданий, мебель, окружающие объекты, то радиоволновые датчики движения имеют более обширную зону действия и используются в особых случаях.

Датчики движения и расстояния обширно применяются для бытовых и промышленных нужд. Их используют как для создания охранных систем и систем обнаружения, так и для автоматизации определённых бытовых потребностей, например включения или выключения света, кондиционера, в зависимости от присутствия людей в помещении.
Купить датчики движения и расстояния в Украине очень удобно через интернет-магазин Robostore.
На это есть 7 причин:
• Вам не обязательно приезжать в магазин, Вы можете заказать доставку в любую точку Украины.
• Доставка по Киеву в течение дня, по Украине — 2-5 рабочих дней (в зависимости от того, насколько Ваш город удален от Киева).
• Длительный срок эксплуатации всей продукции.
• Высокое качество товаров.
• За каждым клиентом закрепляется персональный менеджер, который всегда готов посоветовать Вам лучший выбор и проконсультировать по любому из товаров.

• Служба поддержки работает 5 дней в неделю с 10:00 до 19:00.
Компания Robostore находится в Киеве по адресу улица Вербовая 24, офис Robostore, станция метро Почайна (Петровка).
Звоните и заказывайте датчики движения и расстояния по телефонам:
+38 (096) 470 02 29 (Viber, Telegram)
+38 (063) 306 34 78 (Telegram по поводу оптовых покупок)
Инфракрасный датчик расстояния E18-D80NK 3-80см фотоэлектрический Arduino
Инфракрасный датчик расстояния E18-D80NK 3-80см фотоэлектрический ArduinoКонтакты Заказать звонок Написать письмо Оптовикам Статьи
- Личный кабинет
- Модель: E18-D80NK
- Тип: NPN / NO
- Питание: 5 В
- Сила тока: 30 мА если нет препятствий, 45 мА если есть
- Длина датчика: 50 мм
- Дистанция: 10-80 см (настраивается)
- Контакты: черный — сигнал; коричневый — +5В; синий — общий
- Для настройки дистанции – крутить винт против часовой стрелки для уменьшения зоны видимости, по часовой – для увеличения
- Datasheet.pdf
- Пример использования
- Источник питания: +5 В постоянного тока
- Ток покоя: <2 мА
- Рабочий ток: 15 мА
- Эффективный угол: <15°
- Расстояние дальности: 2 см – 400 см/1″ – 13 футов
- Разрешение: 0,3 см
- Угол измерения: 30 градусов
- Ширина входного импульса триггера: 10 мкс
- Размеры: 45 мм x 20 мм x 15 мм
- Датчик имеет четыре контакта — GND, VCC, триггер, эхо
- Работает от 5в. Подключите контакт Vcc датчика к Arduino 5v . Контакт GND
- ультразвукового датчика подключен к GND Arduino .
- Интерфейс триггерного и эхо-вывода датчика с любыми цифровыми выводами Arduino. Здесь мы подключены к цифровым контактам 2 и 3 Arduino.
25
11749
Описание
Инфракрасный датчик расстояния E18-D80NK 3-80см фотоэлектрический Arduino. Инфракрасный датчик расстояния E18-D80NK. Дистанция 10 — 80 см (настраивается подстроечным резистором с обратной стороны датчика), выходной сигнал – цифровой бинарный, сигнализирует о том есть ли препятствие в зоне видимости. Питание 5В. Содержит в себе передатчик и приемник в инфракрасном диапазоне. В отличии от ультразвукового датчика расстояния не показывает расстояние до препятствия, а просто показывает есть ли препятствие в зоне видимости. При срабатывании датчика выходное напряжение становится равным 0.
Технические характеристики
Дополнительно
org/PropertyValue»>Материал корпуса | Пластик + металл |
Совместимость | Windows |
Страна регистрации бренда | Китай |
Страна-производитель товара | Китай |
Тип | Аксессуары для Роботов |
Комментарии
0Пока не было комментариев.
Прокомментировать
Ссылки
Для покупки регистрация не обязательна! Если хотите сделать заказ, — просто добавьте нужные вам товары в корзину, укажите свои данные и нажмите кнопку «Оформить заказ». Оплата — перевод на карту-ключ счета ПБ — онлайн без комиссии картой любого банка (LiqPay) — безналичный расчет без НДС для юридических лиц — наличными или картой при доставке (только Новой Почтой при заказе от 100 грн) — наличными или через терминал в нас в магазине Нашли дешевле? Напишите нам об этом в чат — кнопка в левом нижнем углу экрана. В сообщении укажите ссылку на активную страницу такого же товара в украинском интернет-магазине и мы пересмотрим цену. Доставка — Новая Почта — Укрпочта (только при предоплате) — Самовывоз (можете также вызвать курьера Глово по Ивано-Франковску) Отправка товара происходит каждый рабочий день. В большинстве случаев, ваш заказ уедет в день заявки/оплаты или на следующий день.. Заказы самовывозом можно забрать в нашем магазине, после заявки позвоним вам и скажем, когда посылка с заказом будет готова к выдаче. Гарантия и возврат — возврат в течение 14 дней, если товар не подошел — гарантия от 6 месяцев на товары собственного изготовления |
УЛЬТРАЗВУКОВОЙ ДАТЧИК HC-SR04 С ARDUINO
Ультразвуковой датчик HC-SR04 — это датчик, который может измерять расстояние. Он излучает ультразвук с частотой 40 000 Гц (40 кГц), который распространяется по воздуху, и если на его пути есть объект или препятствие, он отражается обратно в модуль. Он обычно используется в роботах, избегающих препятствий, и в проектах автоматизации. Он поставляется в комплекте с модулями ультразвукового передатчика и приемника.
Вот список некоторых характеристик и характеристик ультразвукового датчика HC-SR04:
Ультразвуковые датчики излучают звуковые волны с частотой, слишком высокой для человеческого восприятия. Эти звуковые волны распространяются по воздуху со скоростью звука, примерно 343 м/с. Если перед датчиком находится объект, звуковые волны отражаются обратно, и приемник ультразвукового датчика их обнаруживает. Измеряя, сколько времени прошло между отправкой и получением звуковых волн, можно рассчитать расстояние между датчиком и объектом.
При 20°C скорость звука составляет примерно 343 м/с или 0,034 см/мкс. Предположим, что время между отправкой и получением звуковых волн составляет 2000 микросекунд. Если вы умножите скорость звука на время прохождения звуковых волн, вы получите расстояние, которое прошли звуковые волны.
Расстояние = Скорость x Время
Но это не тот результат, который нам нужен. Расстояние между датчиком и объектом на самом деле составляет только половину этого расстояния, поскольку звуковые волны проходят от датчика к объекту и обратно от объекта к датчику. Значит, нужно разделить результат на два.
Расстояние (см) = скорость звука (см/мкс) × время (мкс) / 2
Итак, для примера это будет:
Расстояние (см) = 0,0343 (см/мкс) × 2000 (мкс) / 2 = 34,3 см
VCC — это источник питания для ультразвукового датчика расстояния HC-SR04, который мы подключаем к контакту 5V на Arduino.
Триггер Штифт (Триггер) используется для запуска ультразвуковых импульсов.
Вывод Echo генерирует импульс при приеме отраженного сигнала. Длина импульса пропорциональна времени, которое потребовалось для обнаружения передаваемого сигнала.
GND должен быть подключен к земле Arduino.
Соединение
Образец кода
Тестирование
Шаг 1. Подключите кабель A–B к USB-порту компьютера и убедитесь, что порт обнаружен, установив флажок в диспетчере устройств.
Шаг 2. Откройте два окна Arduino IDE, выберите Arduino UNO в качестве платы и выберите соответствующий COM-порт. Плата
: Инструменты > Плата > Arduino/Geniuno UNO.
Шаг 3. Порт: Инструменты > Порт в Arduino.
Шаг 4. Скомпилируйте и загрузите эту программу на плату Arduino Uno через Arduino IDE
Показания датчика будут получены в последовательном мониторе.
Видеодемонстрация показана ниже
Я использовал плату Arduino Uno и ультразвуковой датчик HC-SR04. Вот код, который я использую. Код работал гладко, просто кажется, что эхо-вывод не смог получить импульс от ультразвукового звука триггера, поэтому он продолжает получать False (НИЗКОЕ показание) и, таким образом, дает мне ложное чтение расстояния.

импорт pyfirmata время импорта доска = pyfirmata.Arduino('COM16') начало = 0 конец = 0 эхо = board.get_pin('d:11:i') триггер = board.get_pin('d:12:o') Светодиод = board.get_pin('d:13:o') это = pyfirmata.util.Iterator (доска) это.старт() триггер.запись(0) время сна(2) пока верно: время сна (0,5) триггер.запись(1) время сна (0,00001) триггер.запись(0) печать (эхо. чтение ()) в то время как echo.read() == False: начало = время.время() в то время как echo.read() == Истина: конец = время.время() TimeElapsed = конец - начало расстояние = (TimeElapsed * 34300) / 2 print («Измеренное расстояние = {} см». формат (расстояние))
Я пытался изменить time.sleep() на несколько значений, и это все еще не работает. Он отлично работает, когда я использую код Arduino непосредственно из Arduino IDE.
- python
- arduino
- arduino-uno
- arduino-ultra-sonic
- pyfirmata
2
Я не проводил точных расчетов, но при расстоянии 50 см время прохождения составляет около 3 мс. Это будет означать, что вам нужно отключить импульс и опросить состояние контакта в течение этого времени.
Этого не произойдет. Эхо, вероятно, приходит до того, как вы отключили эмиттер через PyFirmata. Вы должны сделать измерение задержки на Arduino.
Я решаю эту проблему ложных данных путем подсчета. Я наблюдаю, что ложные данные приходят через 2 или 3 секунды. Поэтому, если это занимает более 2 или 3 секунд, я очищаю счет и перезапускаю его с 0;
Судо-код: цент = 0; если значение датчика <= 20 && значение датчика <= 30: снт++; если число>=5: обнаружено = верно; кт = 0; если cnt<5 && lastDecttime>2 (2 секунды): цент = 0; // Здесь мы обрабатываем ложное значение и очищаем данные
В настоящее время я пытаюсь решить именно эту проблему. Я могу заставить датчик работать напрямую с Arduino IDE, но не с python и pyfirmata. Я получаю некоторый вывод, но в основном это бессмысленно. Вот пример вывода, который я получаю, удерживая датчик на одном и том же расстоянии от моего объекта:
817.