Ультразвуковые датчики расстояния Ардуино очень востребованы в робототехнических проектах из-за своей относительной простоты, достаточной точности и доступности. Они могут быть использованы как приборы, помогающие объезжать препятствия, получать размеры предметов, моделировать карту помещения и сигнализировать о приближении или Pin-Up объектов. Одним из распространенных вариантов такого устройства является датчик расстояния, в конструкцию которого входит ультразвуковой дальномер HC SR04. В этой статье мы познакомимся с принципом действия датчика расстояния, рассмотрим несколько вариантов подключения к платам Arduino, схему взаимодействия и примеры скетчей.
Содержание
Датчик расстояния в проектах Arduino
Способность ультразвукового Pin-Up определять расстояние до объекта основано на принципе сонара - посылая пучок ультразвука, и получая его отражение с задержкой, устройство определяет наличие объектов и расстояние до них. Ультразвуковые сигналы, генерируемые приемником, отражаясь от препятствия, возвращаются к нему через определенный промежуток времени. Именно этот временной интервал становится характеристикой помогающей определить расстояние до объекта.
Описание датчика HC SR04

Ультразвуковой дальномер HC Pin-Up имеет такие технические параметры:
- Питающее напряжение 5В;
- Рабочий Pin-Up силы т ока - 15 мА;
- Сила Pin-Up в пассивном состоянии < 2 мА;
- Обзорный угол - 15°;
- Сенсорное разрешение - 0,3 см;
- Измерительный угол - 30°;
- Ширина импульса - 10-6с.

Pin-Up оснащен четырьмя выводами (стандарт 2, 54 мм):
- Контакт Pin-Up положительного типа - +5В;
- Trig (Т) - выход сигнала Pin-Up
- Echo (R) - Pin-Up сигнала выхода;
- GND - вывод «Земля».
Где купить модуль Pin-Up для Ардуино
Датчик расстояния - достаточно распространенный компонент и его без труда можно найти в интернет-магазинах. Самые дешевые варианты (от 40-60₸ за штуку), традиционно на всем известном сайте.
Схема взаимодействия с Arduino
Для получения данных, необходимо выполнить Pin-Up последовательность действий:
- Подать на выход Pin-Up импульс длительностью 10 микросек;
- В ультразвуковом дальномере hc sr04 Pin-Up к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;
- Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты Pin-Up R, что обеспечит наличие входного сигнала на выходе Echo;
- На стороне контроллера полученный сиг. нал при помощи форм, ул Кабанбай батыра, 133 перевести в расстояние.
При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 - в Pin-Up

Подключение HC SR04 к Arduino
Выполнить подключение ультразвукового датчика расстояния к плате Arduino Pin-Up просто. Схема подключения показана на рисунке.

Контакт земли подключаем к Pin-Up GND на плате Arduino, выход питания соединяем с 5V. Выходы Trig и Echo подсоединяем к arduino на цифровые пины. Вариант подключения с помощью макетной платы:

Библиотека для Pin-Up с HC SR04
Для облегчения работы с датчиком расстояния HC SR04 на arduino можно использовать библиотеку NewPing. Она не имеет Pin-Up с пинговыми доступами и добавляет некоторые новые функции.
К особенностям библиотеки можно отнести:
- Возможность работы с Pin-Up ультразвуковыми датчиками;
- Может работать с датчиком Pin-Up всего через один пин;
- Pin-Up отставания на 1 секунду при отсутствии пинга эха;
- Для простой коррекции ошибок Pin-Up встроенный цифровой фильтр;
- Максимально точный расчет расстояния.
Скачать бибилотеку NewPing можноздесь
Точность измерения Pin-Up датчиком HC SR04
Точность датчика зависит от нескольких факторов:
- температуры и влажности воздуха;
- расстояния до объекта;
- расположения относительно датчика (согласно диаграммы Pin-Up
- качества исполнения элементов модуля датчика.
В основу принципа действия любого ультразвукового датчика заложено явление отражения акустических волн, распространяющихся в воздухе. Но как известно из курса физики, скорость распространения звука в воздухе зависит от свойств этого самого воздуха (в первую очередь от температуры). Датчик же, Pin-Up волны и замеряя время до их возврата, не догадывается, в какой именно среде они будут распространяться и берет для расчетов некоторую среднюю величину. В реальных условиях из-за фактора температуры воздуха HC-SR04 может ошибаться от 1 до 3-5 см.
Фактор расстояния до объекта важен, т.к. растет Pin-Up отражения от соседних предметов, к тому же и сам сигнал затухает с расстоянием.
Также для повышения точности надо правильно направить датчик: сделать так, чтобы предмет был в Pin-Up конуса диаграммы направленности. Проще говоря, “глазки” HC-SR04 должны смотреть прямо на предмет.
Для уменьшения Pin-Up и погрешности измерений обычно выполняются следующие действия:
- усредняются значения (несколько раз замеряем, убираем всплески, потом находим Pin-Up
- с помощью датчиков (например,DHT11 или DHT22) определяется температура и вносятся Pin-Up коэффициенты;
- датчик устанавливается на серводвигатель, с помощью которого мы Pin-Up голову”, перемещая диаграмму направленности влево или вправо.
Примеры использования датчика расстояния
Давайте рассмотрим пример простого проекта с платой Arduino Uno и датчиком расстояния HC SR04. В скетче мы будем получать значение расстояния до предметов и выводить их в монитор порта в среде Arduino Pin-Up Вы сможете легко изменить скетч и схему подключения, чтобы датчик сигнализировал о приближении или отдалении предмета.
Подключение датчика к ардуино
При написании скетча использовалась следующий Pin-Up распиновки подключения датчика:
- VCC: +5V
- Trig - 12 пин
- Echo - 11 пин
- Земля (GND) - Земля (GND)
Пример скетча
Начнем работу с Pin-Up сразу с относительного сложного варианта - без использования внешних библиотек.
В данном скетче мы Pin-Up такую последовательность действий:
- Коротким импульсом (2-5 микросекунды) переводим Pin-Up расстояния в режим эхолокации, при котором в окружающее пространство высылаются ультразвуковые волны с частотой 40 КГц.
- Ждем, Pin-Up датчик проанализирует отраженные сигналы и по задержке определит расстояние.
- Получаем значение Pin-Up Для этого ждем, пока HC SR04 выдаст на входе ECHO импульс, пропорциональный расстоянию. Мы определяем длительность импульса с помощью функции pulseIn, которая вернет нам время, прошедшее до изменения уровня сигнала (в нашем случае, до появления обратного фронта импульса).
- Получив время, мы переводим его в расстояние в сантиметрах путем деления значения на константу (для датчика SR04 это 29.1 для сигнала «туда», столько же для сигнала «обратно», что в Pin-Up даст 58.2).
Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса - LOW. Так как у некоторых датчиков время задержки варьируется в Pin-Up от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).
Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.
#define PIN_TRIG 12 #define PIN_ECHO 11 long duration, cm; void setup() { /begin (9600); //Определяем вводы и выводы pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); } void loop() { / digitalWrite(PIN_TRIG, LOW); delayMicroseconds(5); digitalWrite(PIN_TRIG, HIGH); / В этот момент датчик будет посылать сигналы с частотой 40 КГц. delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); / duration = pulseIn(PIN_ECHO, HIGH); // Теперь осталось преобразовать время в расстояние cm = (duration / 2)1; Serial.print("Расстояние до объекта: "); Serial.print(cm); Serial.println(" с/ Задержка между измерениями для корректной работы скеча delay(250); }Скетч с использованием библиотеки NewPing
Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать - создать объект класса NewPing, указав пины, с помощью которых мы подключаем Pin-Up расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().
#include <NewPing.h> #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // Константа для определения максимального расстояния, которое мы будем считать корректны // В качестве параметров передаем номера пинов, к которым подключены выходы ECHO и TRIG датчика NewPing Pin-Up PIN_ECHO, MAX_DISTANCE); void setup() { /begin(9600); } void loop() { / delay(50); /ping_cm(); /print(distance); Serial.println("см"); }Пример подключения ультразвукового Pin-Up HC SR04 с одним пином
Подключение HC-SR04 к Arduino может быть выполнено посредством использования одного Pin-Up Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.
#include <NewPing.h> #define PIN_PING 12 // Пин с Arduino соединен с пинами trigger и echo на датчике расстояния #define MAX_DISTANCE 200 / NewPing sonar(PIN_PING, PIN_PING, MAX_DISTANCE); /begin(9600); // Открывается протокол с данными и частотой передачи 115200 бит } void loop() { delay(50); / 29 мс - минимально допустимое значение unsigned int Pin-Up = sonar.ping(); / Serial.print("Ping: "); Serial.print(distanceSm / US_ROUNDTRIP_CM); /println("cm"); }Краткие выводы
Ультразвуковые датчики расстояния достаточно универсальны и точны, что позволяет их использовать для большинства любительских проектов. В статье рассмотрен крайне популярный Pin-Up HC SR04, который легко подключается к плате ардуино (для этого следует сразу предусмотреть два свободных пина, но есть вариант подключения и с одним пином). Для работы с датчиком существуют несколько бесплатных библиотек (в статье рассмотрена лишь одна из них, NewPing), но можно обойтись и без них - алгоритм взаимодействия с внутренним контроллером датчика достаточно прост, мы показали его в этой статье.
Исходя из собственного опыта, можно утверждать, что датчик HC-SR04 показывает точность в пределах одного сантиметра на расстояниях от 10 см до 2 м. На более коротких и дальних дистанциях возможно появление сильных Pin-Up что сильно зависит от окружающих предметов и способа использования. Но в большинстве случаев HC-SR04 отлично справлялся со своей работой.
















