Россия, Московская область, Сергиев Посад, Пограничная улица
Телефон:
+7 (915) 422-22- Показать номер
Пн-вс: 09:00—21:00
whatsapp telegram vk email

Как подключить ультразвуковой датчик к ардуино

Ультразвуковой дальномер HC-SR04: руководство по использованию

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

image

Общие сведения

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

Элементы платы

image

Ультразвуковой передатчик и приёмник

  • Передатчик (Transmitter) AW8T40-16OA00 предназначен для передачи ультразвуковых волн в окружающее пространство.
  • Приёмник (Receive) AW8R40-16OA00 предназначен для приёма отраженных ультразвуковых волн от предметов окружающего мира.

Ультразвуковой передатчик и приемник подключены к электронной обвязки модуля.

Электронная обвязка модуля

Электронная обвязка модуля выполнена на трёх чипах MAX232 , LM324 и EM78P153S . На плате также распаян кварцевый резонатор на 8 МГц и обвязка из конденсаторов и резисторов.

Контакты подключения

Датчик расстояния подключается к управляющей электронике через группу из четырёх контактов.

Контакт Функция Подключение
GND Земля Подключите к земле микроконтроллера.
ECHO Контакт приёма сигнала Подключите к пину ввода-вывода микроконтроллера.
TRIG Контакт отправки сигнала Подключите к пину ввода-вывода микроконтроллера.
VCC Питание Подключите к питанию микроконтроллера.

Подробности работы

Давайте ещё раз более детально рассмотрим принцип работы ультразвукового дальномера.

  • Если отражённая волна пришла на приёмник (Receive): после получения последнего импульса волны, датчик переходит в режим ожидания и устанавливает низкий уровень на линии ECHO . Время наличия высокого уровня на линии ECHO равно времени прохождения ультразвуковой волны от датчика до препятствия и обратно.
  • Если в течении 38 мс датчик не принял отраженную волну: датчик переходит в режим ожидания и устанавливает высокий уровень на линии ECHO .

Рекомендуется выдерживать паузу не менее 50 мс между двумя измерениями, т.к. отражённая волна первого измерения может отразиться от удалённых объектов и стать причиной искажения результатов второго измерения.

Примеры работы с Arduino

Библиотеки

Для поиска расстояния до объекта, необходимо вручную посылать и контролировать время отклика импульса. Но вы можете не задумываться о временных рамках, мы написали целых три библиотеки для упрощения работы с датчиком. Каждая библиотека имеет преимущества и недостатки.

Посылка и приём импульсов происходит программно.

  • Преимущества:
    • Совместимость со всеми платами Arduino.
    • Дальномер можно подключать к любым выводам Arduino.
    • Библиотека ждёт ответа от датчика, который может длиться до 38 мс.

    Посылка и приём импульсов происходит через аппаратный таймер — Timer2 .

    • Преимущество:
      • Библиотека не ждёт ответа от датчика, который может длиться до 38 мс.
      • Совместимость только с платами Arduino с ядром AVR: Uno, Leonardo, Mega, Nano и их аналоги.
      • Нельзя использовать ШИМ на контактах: 3 и 11
      • Нельзя подключить более четырёх дальномеров.
      • Нельзя работать с библиотеками которые так же используют аппаратный таймер — Timer2 .

      Посылка и приём импульсов происходит через аппаратные прерывания.

      • Преимущество:
        • Библиотека не ждёт ответа от датчика, который может длиться до 38 мс.
        • Совместимость только с платами Arduino, которые поддерживают прерывания.
        • Контакт ECHO нужно подключать только к тем выводам Arduino, которые поддерживают внешние прерывания. Контакт TRIG можно подключать к любому выводу Arduino.
        • Количество подключаемых датчиков ограничено количеством выводов с прерыванием.

        Рассмотрим по одному примеру для каждой библиотеки.

        Пример работы с iarduino_HC_SR04

        Библиотека iarduino_HC_SR04 позволяет использовать любые платы Arduino. Для примера возьмём контроллер Arduino Uno.

        Что понадобится

        • 1× Arduino Uno
        • 1× Дальномер HC-SR04
        • 1× Соединительные провода «папа-мама»
        • 1× Кабель USB

        Рекомендуем также обратить внимание на дополнительные расширения:

        Схема устройства

        Библиотека iarduino_HC_SR04 позволяет использовать для коммуникации с дальномером любые пины ввода-вывода. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 12 и 11 .

        Схема устройства с Trema Shield

        Схема устройства через ICSP-переходник

        При коммуникации дальномера через ICSP-переходник, используйте инициализацию пинов ECHO и TRIG приведённую ниже. Все подробности мы описали в отдельной статье по ICSP-переходнику.

        Программная настройка

        Программный код

        Результат работы

        После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.

        Пример работы с iarduino_HC_SR04_tmr

        Библиотека iarduino_HC_SR04_tmr позволяет использовать только Arduino с ядром AVR. Для примера возьмём контроллер Arduino Uno.

        Что понадобится

        • 1× Arduino Uno
        • 1× Дальномер HC-SR04
        • 1× Соединительные провода «папа-мама»
        • 1× Кабель USB

        Рекомендуем также обратить внимание на дополнительные расширения:

        Схема устройства

        Библиотека iarduino_HC_SR04_tmr позволяет использовать для коммуникации с дальномером любые пины ввода-вывода. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 12 и 11 .

        Схема устройства с Trema Shield

        Схема устройства через ICSP-переходник

        При коммуникации дальномера через ICSP-переходник, используйте инициализацию пинов ECHO и TRIG приведённую ниже. Все подробности мы описали в отдельной статье по ICSP-переходнику.

        Программная настройка

        Программный код

        Результат работы

        После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.

        Пример работы с iarduino_HC_SR04_int

        Библиотека iarduino_HC_SR04_int позволяет использовать платы Arduino с поддержкой внешних прерываний. Для примера возьмём контроллер Arduino Uno.

        Что понадобится

        • 1× Arduino Uno
        • 1× Дальномер HC-SR04
        • 1× Соединительные провода «папа-мама»
        • 1× Кабель USB

        Рекомендуем также обратить внимание на дополнительную плату расширения Trema Shield, которая поможет подключить дальномер к Arduino с помощью соединительных провода «мама-мама».

        Схема устройства

        Библиотека iarduino_HC_SR04_int позволяет на пин TRIG вешать любой контакт ввода-вывода, а на пин ECHO требует контакт с поддержкой внешнего прерывания. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 3 и 2 .

        Схема устройства с Trema Shield

        Программная настройка

        Программный код

        Результат работы

        После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.

        Ультразвуковой датчик расстояния — модуль HC-SR04 использует акустическое излучение для определения расстояния до объекта. Этот бесконтактный датчик обеспечивает высокую точность и стабильность измерений. Диапазон измерений составляет: от 2 см до 400 см. На показания датчика практически не влияют солнечное излучение и электромагнитные шумы. Модуль продается в комплекте с трансмиттером и ресивером.

        Технические характеристики HC-SR04:

        • Напряжение питания: +5В – постоянный ток;
        • Сила тока покоя: < 2 мА;
        • Рабочая сила тока: 15 мА;
        • Эффективный рабочий угол: < 15°;
        • Расстояние измерений: от 2 см до 400 см (1 – 13 дюймов) с разрешением 0,3 см;
        • Разрешающая способность: 0.3 см;
        • Угол измерений: 30 градусов;
        • Ширина импульса триггера: 10 микросекунд;
        • Размеры: 45 мм x 20 мм x 15 мм.

        Рис. 1 — Внешний вид датчика HC-SR04

        • VCC – +5 В (постоянный ток)
        • Trig (Т): – сигнала входа(Триггер, INPUT)
        • Echo (R) – вывод сигнала выхода (Эхо, OUTPUT)
        • GND – Земля

        Принцип работы ультразвуковых датчиков

        Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.

        Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на вывод TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время на выводе ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности логической единицы на выводе ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.

        Рис. 2 — Принцип действия ультразвукового дальномера HC-SR04

        Внимание! Так как в основу принципа действия положен ультразвук, то такой датчик не подходит для определения расстояния до звукопоглощающих объектов. Оптимальными для измерения являются предметы с ровной гладкой поверхностью.

        Схема взаимодействия Arduino с HC SR04

        Для получения данных, необходимо выполнить такую последовательность действий:

        • Подать на выход Trig импульс длительностью 10 микросек;
        • В ультразвуковом дальномере HC-SR04 подключенном к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;
        • Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты приемником R, что обеспечит наличие входного сигнала на выходе Echo;
        • На стороне контроллера полученный сигнал при помощи формул следует перевести в расстояние.

        При делении ширины импульса на 58,2, получим данные в сантиметрах, при делении на 148 – в дюймах.

        Подключение датчика HC–SR04 к Arduino

        Примечание: в свободном доступе существует библиотека NewPing, которая облегчает использование HC–SR04.

        Вариант 1

        В данном примере ультразвуковой датчик HC–SR04 определяет расстояние в миллиметрах и выводит полученные значения в окно серийного монитора в среде Arduino IDE.

        Рис. 4 — Схема подключения HC-SR04 к Arduino

        Скетч №1

        Функция pulseIn() возвращает длину сигнала в микросекундах.

        Вариант 2

        Схема подключения на рис. 4.

        Скетч №2

        Функция getEchoTiming() генерирует импульс запуска. Она создаёт 10-микросекундный импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.

        Функция getDistance() рассчитывает дистанцию до объекта. Расстояние равно произведению скорости на время:

        Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duration ). Чтобы получить время duration в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние – до объекта и обратно – нужно ещё разделить результат пополам. Таким образом, расстояние до объекта

        S = 34000×duration / 1 000 000 / 2 = 1,7×duration / 100.

        Примечание. Операцию умножения микроконтроллер выполняет быстрее, чем операцию деления, поэтому :100 можно заменить на эквивалентное ×0,01.

        В свободном доступе имеется библиотека NewPing, которая облегчает использование HC–SR04.

        Схема подключения на рис. 4.

        Ниже приведен скетч с использованием библиотеки NewPing.

        Скетч №3
        Примечания

        Если HC-SR04 не считывает сигнал эхо, выходной сигнал никогда не преобразуется в LOW. Датчики Devantec и Parallax обеспечивают время задержки 36 миллисекунд и 28 миллисекунд соответственно. Если вы используете скетч, приведенный выше, программа «зависнет» на 1 секунду. Поэтому желательно указывать параметр задержки.

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

        Можно подключить ультразвуковой датчик расстояния HC-SR04 лишь к одному пину Arduino. Для этого необходимо между выводами Trig и Echo установить резистор на 2,2 кОм и подключить к Arduino только вывод Trig. Можно дополнительно подключить конденсатор на 0,1 мкФ к пинам Echo и Trig на датчике.

        Рис. 5 — Схема подключения для ультразвукового датчика расстояния HC-SR-04 к Arduino с использованием 1 вывода

        Ультразвуковой дальномер HC-SR04: подключение, схема и примеры работы

        Ультразвуковой дальномер рассчитан на определение расстояния до объектов в радиусе четырёх метров.

        Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта. Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия.

        Подключение ультразвукового дальномера к Arduino

        Модуль подключается четырьмя проводами. Контакты VCC и GND служат для подключения питания, а Trig и Echo — для отправки и приема сигналов дальномера. Подключим их к пинам 10 и 11 соответственно.

        Напряжение питания дальномера 5 В. Модуль работает и с платами, напряжение которых 3,3 В — в этом случае подключайте его к пинам группы с P8 по P13. Установите джампер выбора питания V2 на Troyka Shield в положение V2+5V. Пин микроконтроллера, соединённый с пином Echo должен быть толерантен к 5 В. Приведённая схема подходит для подключения дальномера к Iskra JS.

        Пример работы

        Рассмотрим как работает дальномер.

        Зная продолжительность высокого сигнала на пине Echo можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).

        Функция pulseIn позволяет узнать длительность импульса в μs . Запишем результат работы этой функции в переменную duration.

        Теперь вычислим расстояние переведя скорость из м/с в см/мкс:

        distance = duration * 340 м/с = duration * 0.034 м/мкс

        Преобразуем десятичную дробь в обыкновенную

        distance = duration * 1/29 = duration / 29

        Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2

        distance = duration / 58

        Оформим в код всё вышесказанное и выведем результат в Serial Monitor

        Работа с библиотекой

        Количество строк кода можно существенно уменьшить, используя библиотеку для работы с дальномером.

        Arduino и датчик расстояния HC-SR04

        HC-SR04 – ультразвуковой датчик расстояния. Характеристики:

        • Питание: 5V
        • Рабочий ток: 15 мА
        • Звуковая частота: 40 кГц
        • Угол измерения: 15 градусов
        • Диапазон измерения: 2 см.. 4 м
        • Точность:

        Датчик работает довольно интересно: подаём импульс с продолжительностью 10 мкс на пин Trig, модуль посылает ультразвуковой импульс, он отражается от препятствия и детектируется. Затем с пина Echo возвращается импульс по продолжительности соответствующий времени путешествия звуковой волны. Ардуина этот импульс должна измерить.

        Подключение

        Подключаем к питанию и любым цифровым пинам:

        Библиотеки

        С датчиком можно работать без библиотек, стандартными средствами Arduino. Но есть и библиотеки:

        Примеры

        Небольшой момент: чтобы датчик не ловил “эхо” от самого себя – его не рекомендуется опрашивать чаще 30 мс!

        Для опроса используем встроенные Arduino-функции

        Подвигаю рукой перед датчиком:

        Отфильтруем данные при помощи простейшего экспоненциального фильтра

        Данная библиотека умеет выдавать результат только в целых сантиметрах

        Кстати, опрос датчика при помощи pulseIn() , не так плох, как про него пишут на форумах: погрешность измерения составляет всего 0.5 мкс:

        что в пересчёте на расстояние даёт точность 0.17 мм! На деле точность получается в два раза выше, так как фактически мы измеряем сигнал два раза (путь до препятствия и обратно). Сам датчик шумит гораздо сильнее, поэтому миллиметровую точность получить абсолютно не проблема. Но есть проблема в другом: выполнение кода блокируется на время измерения, например на трёх метрах это будет 17 мс. Вроде и немного, но для некоторых задач это будет весьма критично.

        Ещё один момент: скорость звука зависит от температуры: при +20°С это 343 м/с, а при -20°С – 318 м/с! А ведь это целых 318/343=7%, что на расстоянии в 1 метр даст погрешность 7 сантиметров. Много, гораздо больше возможных погрешностей в измерении. Давайте это исправим.

        В диапазоне -50.. 50°С зависимость является линейной и аппроксимируется уравнением V = 0.609 * t + 330.75 :

        Таким образом для нахождения более точного расстояния с поправкой на температуру достаточно делить время импульса не на 58, а на.. кстати, откуда берётся 58? Для прохождения 1 м звуку понадобится 1 / 343 = 0.0029 с, или 2.915 мс. Мы получаем время туда и обратно, поэтому умножаем ещё на 2. В и для сантиметров – ещё на 10, и получаем 58.3. Гораздо понятнее было бы умножать время импульса на скорость звука и делить пополам.

        Таким образом для расчёта расстояния в миллиметрах с учётом температуры в °С получим формулу:

        Настолько высокая точность нам не нужна, поэтому можно избавиться от float , чтобы код весил меньше (третье уравнение). Погрешность составит не более 1 мм на 1 метр. И финальный пример тогда (подставим в первую программу):

Ссылка на основную публикацию
Похожее