Оглавление:

Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino: 20 шагов (с изображениями)
Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino: 20 шагов (с изображениями)

Видео: Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino: 20 шагов (с изображениями)

Видео: Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino: 20 шагов (с изображениями)
Видео: Ультразвуковой дальномер 2024, Ноябрь
Anonim
Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino
Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino
Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino
Сравнение сонарных дальномеров LV-MaxSonar-EZ и HC-SR04 с Arduino

Я считаю, что многие проекты (особенно роботы) требуют или могут извлечь выгоду из измерения расстояния до объекта в реальном времени. Сонарные дальномеры относительно недороги и могут быть легко подключены к микроконтроллеру, например, Arduino.

В этом руководстве сравниваются два простых в использовании устройства-эхолота-дальномера, показано, как подключить их к Arduino, какой код требуется для считывания значений из них, и как они «соотносятся» друг с другом в разных ситуациях. Из этого я надеюсь, что вы получите представление о плюсах и минусах двух устройств, которые помогут вам использовать наиболее подходящее устройство в вашем следующем проекте.

Я хотел сравнить чрезвычайно популярное устройство HC-SR04 (bug-eye) с менее распространенным устройством LV-MaxSonar-EZ, чтобы увидеть, когда я могу использовать одно, а не другое. Я хотел поделиться своими выводами и настройками, чтобы вы могли поэкспериментировать с ними и решить, что использовать в своем следующем проекте.

Почему эти двое …

Почему HC-SR04? Bug-Eye HC-SR04 чрезвычайно популярен по нескольким причинам:

  • Недорого - 2 доллара или меньше, если покупать оптом.
  • Относительно легко подключиться к
  • Многие, многие проекты используют его, поэтому он хорошо известен и понятен.

Почему LV-MaxSonar-EZ?

  • Интерфейс к
  • Он имеет хороший / простой форм-фактор для включения в проект.
  • Он имеет 5 версий, отвечающих различным требованиям к измерениям (см. Техническое описание).
  • Он (как правило) намного точнее и надежнее, чем HC-SR04.
  • Доступно - от 15 до 20 долларов.

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

Предположения:

  • Вы знакомы с Arduino и Arduino IDE.
  • IDE Arduino установлена и работает на вашей предпочтительной машине разработки (ПК / Mac / Linux).
  • У вас есть соединение от Arduino IDE к вашему Arduino для загрузки и запуска программ и связи.

Есть инструкции и другие ресурсы, которые помогут вам в этом, если это необходимо.

Запасы

  • HC-SR04 Дальномер 'Bug-Eye'
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4 - я использую '1', но интерфейс всех версий одинаков)
  • Arduino UNO
  • Макетная плата без пайки
  • Заголовок - 7 контактов, 90 ° (для устройства MaxSonar, см. * Ниже для использования 180 °)
  • Перемычка ленточного кабеля - 5-жильная, вилка-вилка
  • Перемычка ленточного кабеля - 2-х проводная, вилка-вилка
  • Перемычка - папа-папа
  • Монтажный провод - красный и черный (для питания от Arduino до макета и от макета к устройствам)
  • Компьютер с Arduino IDE и USB-кабелем для подключения к Arduino UNO

* MaxSonar не поставляется с прикрепленным заголовком, поэтому вы можете использовать заголовок, наиболее подходящий для вашего проекта. Для этого учебного пособия я использовал заголовок под углом 90 °, чтобы его было легко подключить к макетной плате. В некоторых проектах может быть лучше использовать жатку на 180 ° (прямой). Я прилагаю фото, чтобы показать, как это подключить, чтобы вам не приходилось их переключать. Если вы предпочитаете использовать переходник на 180 °, вам понадобится дополнительная 7-проводная перемычка для ленточного кабеля «папа-мама», как показано на моей фотографии.

Репозиторий Git Hub: файлы проекта

Шаг 1. Погоня…

Погоня…
Погоня…

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

Поскольку устройство MaxSonar используется реже и менее понятно по сравнению с устройством HC-SR04, я хотел показать:

  • Как подключить устройство MaxSonar к микроконтроллеру (в данном случае Arduino)
  • Как проводить измерения с разных выходов устройства MaxSonar
  • Сравните подключение устройства MaxSonar к устройству HC-SR04
  • Проверить умение измерять расстояние до объектов с разными поверхностями
  • Почему вы можете выбрать одно устройство вместо другого (или использовать оба в тандеме)

Я надеюсь, что это руководство поможет вам в этой погоне …

Шаг 2: Начало работы - установка макетной платы Arduino

Начало работы - установка макетной платы Arduino
Начало работы - установка макетной платы Arduino

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

  1. Я прикрепляю Arduino UNO и небольшую беспроводную макетную плату к пластиковому куску размером 3-3 / 8 дюйма x 4-3 / 4 дюйма (8,6 x 12,0 см) с резиновыми ножками внизу.
  2. Я использую красный и черный соединительный провод 22-AWG для подключения + 5V и GND от Arduino к распределительной полосе питания макета.
  3. Я включил танталовый конденсатор 10 мкФ на распределительную полосу питания и земли, чтобы уменьшить шум мощности (но для этого проекта это не требуется)

Это обеспечивает хорошую платформу, с которой легко создать прототип.

Шаг 3: Подключите LV-MaxSonar-EZ

Подключите LV-MaxSonar-EZ
Подключите LV-MaxSonar-EZ
Подключите LV-MaxSonar-EZ
Подключите LV-MaxSonar-EZ
Подключите LV-MaxSonar-EZ
Подключите LV-MaxSonar-EZ

Заголовок 90 °, припаянный к устройству MaxSonar, легко вставить в макетную плату. Затем 5-контактный ленточный кабель подключает MaxSonar к Arduino, как показано на схеме. В дополнение к ленточному кабелю я использую короткие отрезки красного и черного соединительного провода от распределительной шины, чтобы обеспечить питание устройства.

Электропроводка:

МаксСонар Ардуино Цвет
1 (ЧБ) Питание-GND Желтый
2 (PW) Цифровой-5 Зеленый
3 (AN) Аналог-0 Синий
4 (RX) Цифровой-3 Фиолетовый
5 (Техас) Цифровой-2 Серый
6 (+5) +5 BB-PWR Rail красный
7 (земля) GND BB-PWR Rail Чернить

Примечание:

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

Шаг 4: Подключите HC-SR04

HC-SR04 обычно поставляется с уже прикрепленным разъемом под углом 90 °, поэтому его легко подключить к макетной плате. Затем 2-контактный ленточный кабель подключает HC-SR04 к Arduino, как показано на схеме. В дополнение к ленточному кабелю я использую короткие отрезки красного и черного соединительного провода от распределительной шины, чтобы обеспечить питание устройства.

HC-SR04 Ардуино Цвет
1 (VCC) +5 BB-PWR Rail красный
2 (TRIG) Цифровой-6 Желтый
3 (ЭХО) Цифровой-7 апельсин
4 (земля) GND BB-PWR Rail Чернить

Шаг 5: Подключите переключатель опций HC-SR04

Когда я начал этот проект, моим намерением было просто протестировать различные варианты интерфейса устройства MaxSonar. После того, как я его запустил, я решил, что было бы неплохо сравнить его с вездесущим устройством HC-SR04 (bugeye). Однако я хотел иметь возможность запускать / тестировать без него, поэтому я добавил параметр / тест в код.

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

На схеме это показано как переключатель, но на макетной плате я просто использую перемычку (как показано на фотографиях). Если провод подключен к GND, HC-SR04 будет включен в измерения. Код «подтягивает» (делает вход высоким / истинным) в Arduino, поэтому, если он не будет понижен (подключен к GND), HC-SR04 не будет измеряться.

Хотя этот Instructable превратился в сравнение двух устройств, я решил оставить это на месте, чтобы проиллюстрировать, как вы можете включать / исключать различные устройства / опции в свой проект.

Макетная плата Ардуино Цвет
GND BB-PWR Rail Цифровой-12 белый

Шаг 6. Как заставить все работать…

Как заставить все работать…
Как заставить все работать…
Как заставить все работать…
Как заставить все работать…
Как заставить все работать…
Как заставить все работать…

Теперь, когда все подключено - пора заставить все работать!

Как упоминалось в разделе «Предположения» - я не собираюсь объяснять, как работает Arduino IDE или как программировать Arduino (подробно).

В следующих разделах представлен код Arduino, включенный в этот проект.

Распакуйте полный архив в папку, которую вы используете для разработки Arduino. Загрузите код MaxSonar-outputs.ino в вашу IDE Arduino и приступим!

Шаг 7: Макет проекта

Проект содержит информацию об устройстве LV-MaxSonar-EZ, принципиальную схему, README и код Arduino. Принципиальная схема представлена в формате Fritzing, а также в виде PNG-изображения. README находится в формате Markdown.

Шаг 8: ввод кода…

В этом руководстве я не могу подробно рассмотреть все аспекты кода. Я освещаю некоторые высокоуровневые детали. Я рекомендую вам прочитать комментарий верхнего уровня в коде и изучить методы.

В комментариях содержится много информации, которую я не буду здесь повторять.

Есть несколько моментов, на которые я хочу обратить внимание в «установочном» коде …

  • Переменная `_DEBUG_OUTPUT` и операторы #define
  • Определения контактов Arduino, используемых для интерфейса
  • Определения коэффициентов пересчета, используемых в расчетах

Отладка используется во всем коде, и я покажу, как ее можно включать / выключать динамически.

«Определения» используются для выводов и преобразований Arduino, чтобы упростить использование этого кода в других проектах.

Отладка…

Раздел «Отладка» определяет переменную и некоторые макросы, которые упрощают включение отладочной информации в последовательный вывод по запросу.

Логическая переменная `_DEBUG_OUTPUT` имеет значение false в коде (может иметь значение true) и используется в качестве теста в макросах` DB_PRINT… `. Его можно динамически изменять в коде (как показано в методе setDebugOutputMode).

Глобалы…

После определений код создает и инициализирует несколько глобальных переменных и объектов.

  • SoftwareSerial (см. Следующий раздел)
  • _loopCount - используется для вывода заголовка каждые n строк
  • _inputBuffer - используется для сбора последовательного / терминального ввода для обработки параметров (отладка вкл. / выкл.)

Шаг 9. Программное обеспечение Arduino - последовательный…

Одна из опций интерфейса MaxSonar - это последовательный поток данных. Однако Arduino UNO обеспечивает только одно последовательное соединение для передачи данных, которое используется / совместно используется с портом USB для связи с Arduino IDE (хост-компьютером).

К счастью, в IDE Arduino входит библиотечный компонент, который использует пару контактов цифрового ввода-вывода Arduino для реализации интерфейса последовательного ввода-вывода. Поскольку в последовательном интерфейсе MaxSonar используется 9600 BAUD, этот «программный» интерфейс отлично справляется с обменом данными.

Для тех, кто использует Arduino-Mega (или другое устройство, которое имеет несколько последовательных портов HW), пожалуйста, не стесняйтесь настраивать код для использования физического последовательного порта и устранять необходимость в SW-Serial.

Метод `setup` инициализирует интерфейс` SoftwareSerial`, который будет использоваться с устройством MaxSonar. Требуется только прием (RX). Интерфейс «инвертирован», чтобы соответствовать выходу MaxSonar.

Шаг 10: Код - Настройка

Как описано выше, метод setup инициализирует интерфейс SoftwareSerial, а также физический последовательный интерфейс. Он настраивает контакты ввода-вывода Arduino и отправляет заголовок.

Шаг 11: Код - Цикл

Код `цикла` проходит через следующее:

  • Вывести заголовок (используется для отладки и плоттера)
  • Запустите MaxSonar, чтобы выполнить измерение
  • Считайте значение ширины импульса MaxSonar
  • Считайте значение MaxSonar Serial-Data
  • Считайте аналоговое значение MaxSonar
  • Отметьте опцию «HC-SR04» и, если она включена:

    Запустить и прочитать устройство HC-SR04

  • Выведите данные в формате с разделителями табуляцией, который может использоваться последовательным плоттером.
  • Подождите, пока не пройдет достаточно времени, чтобы можно было провести еще одно измерение.

Шаг 12: Код - Запустите MaxSonar. Прочитать значение PW

MaxSonar имеет два режима: «запускаемый» и «непрерывный».

В этом руководстве используется «запускаемый» режим, но многие проекты могут извлечь выгоду из использования «непрерывного» режима (см. Таблицу).

При использовании «триггерного» режима первый действительный выход - это широтно-импульсный (PW) выход. После этого остальные выходы действительны.

TiggerAndReadDistanceFromPulse посылает импульсы на триггерный вывод на устройстве MaxSonar и считывает результирующее значение ширины импульса.

Обратите внимание, что, в отличие от многих других гидролокаторов, MaxSonar выполняет двустороннее преобразование, поэтому считываемое расстояние - это расстояние до цели.

Этот метод также задерживает достаточно долго, чтобы другие выходы устройства были действительными (последовательный, аналоговый).

Шаг 13: Код - считывание серийного значения MaxSonar

После запуска MaxSonar (или в «непрерывном» режиме), если включена опция последовательного вывода (через элемент управления «BW - Pin-1»), передается последовательный поток данных в форме «R nnn», а затем ПЕРЕВОЗКОЙ-ВОЗВРАТОМ '\ r'. «Nnn» - это значение в дюймах до объекта.

Метод readDistanceFromSerial считывает последовательные данные (из программного последовательного порта) и преобразует значение nnn в десятичное. Он включает отказоустойчивый тайм-аут на случай, если серийное значение не получено.

Шаг 14: Код - считывание аналогового значения MaxSonar

Аналоговый порт MaxSonar постоянно обеспечивает выходное напряжение, пропорциональное последнему измеренному расстоянию. Это значение можно прочитать в любое время после инициализации устройства. Значение обновляется в пределах 50 мс от последнего считывания расстояния (запускаемый или непрерывный режим).

Значение (Vcc / 512) на дюйм. Таким образом, при Vcc от Arduino 5 вольт значение будет ~ 9,8 мВ / дюйм. Метод readDistanceFromAnalog считывает значение с аналогового входа Arduino и преобразует его в значение в дюймах.

Шаг 15: Код - запуск и считывание HC-SR04

Хотя существуют библиотеки для чтения HC-SR04, я обнаружил, что некоторые из них ненадежны с различными устройствами, с которыми я тестировал. Я обнаружил, что код, который я включил в метод sr04ReadDistance, является простым и более надежным (насколько может быть недорогое устройство HC-SR04).

Этот метод устанавливает, а затем запускает устройство HC-SR04, а затем ожидает измерения ширины возвратного импульса. Измерение ширины импульса включает тайм-аут для решения проблемы HC-SR04, связанной с очень большой длительностью импульса, когда он не может найти цель. Предполагается, что ширина импульса, превышающая целевое расстояние ~ 10 футов, не является объектом или объектом, который нельзя распознать. Если время ожидания истекло, в качестве расстояния возвращается значение «0». Это «расстояние» (ширина импульса) можно настроить с помощью значений #define.

Ширина импульса преобразуется в расстояние туда и обратно, а затем возвращается как расстояние до объекта.

Шаг 16: Код - поддержка последовательного плоттера Arduino IDE

Код - Поддержка последовательного плоттера Arduino IDE
Код - Поддержка последовательного плоттера Arduino IDE

Теперь о выходе!

Метод `loop` запускает сбор данных о расстоянии с двух устройств - но что нам с этим делать?

Ну, конечно, мы разошлем его, чтобы его можно было просмотреть на консоли - но мы хотим большего!

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

Последовательный плоттер принимает заголовок, содержащий метки значений, а затем несколько строк значений с разделителями, которые будут построены в виде графика. Если значения выводятся регулярно (раз в «столько секунд»), график обеспечивает визуализацию расстояния до объекта с течением времени.

Метод `loop` выводит три значения из MaxSonar и значение из HC-SR04 в формате с разделением табуляцией, который может использоваться с последовательным плоттером. Один раз каждые 20 строк выводит заголовок (на случай, если серийный плоттер включен в середине потока).

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

Шаг 17: Код - Отладка…

Код - Отладка…
Код - Отладка…
Код - Отладка…
Код - Отладка…

Отладка - это необходимость. Как можно отследить проблему, если что-то работает не так, как ожидалось?

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

В это руководство я включил механизм для динамического включения и отключения отладочных операторов печати (последовательного вывода) из ввода, считанного из последовательного монитора Arduino IDE (в следующем выпуске ожидается, что последовательный плоттер также предоставит этот ввод).

Логическое значение `_DEBUG_OUTPUT` используется в ряде методов печати #define, которые могут использоваться в коде. Значение переменной _DEBUG_OUTPUT используется для включения печати (отправки вывода) или нет. Значение может быть изменено динамически внутри кода, как это делает метод setDebugOutputMode.

Метод setDebugOutputMode вызывается из цикла на основе ввода, полученного от последовательного ввода. Входные данные анализируются на предмет соответствия «отладка вкл / выкл | истина / ложь» для включения / отключения режима отладки.

Шаг 18: Заключение

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

Кстати - я намекнул на очень простой в использовании способ точного измерения расстояния до объекта с помощью LV-MaxSonar-EZ… Вы можете использовать аналоговый выход (один провод) и режим непрерывного измерения для считывания расстояния, когда это необходимо, используя простой код в readDistanceFromAnalog прямо с аналогового входа Arduino. Один провод и (сокращенно) одна строка кода!

Шаг 19: Альтернативное подключение MaxSonar (с использованием заголовка 180 °)

Альтернативное подключение MaxSonar (с использованием заголовка 180 °)
Альтернативное подключение MaxSonar (с использованием заголовка 180 °)
Альтернативное подключение MaxSonar (с использованием заголовка 180 °)
Альтернативное подключение MaxSonar (с использованием заголовка 180 °)
Альтернативное подключение MaxSonar (с использованием заголовка 180 °)
Альтернативное подключение MaxSonar (с использованием заголовка 180 °)

Как я уже упоминал, MaxSonar не поставляется с подключенным заголовком. Таким образом, вы можете использовать любое соединение, наиболее подходящее для вашего проекта. В некоторых случаях может быть более подходящим жатка с углом 180 ° (прямой). Если это так, я хотел бы быстро показать, как вы можете использовать это с этим Instructable. На этой иллюстрации показан MaxSonar с прямым разъемом, подключенным к макетной плате с помощью ленточного кабеля «папа-мама», а затем подключенный к Arduino, как описано в оставшейся части статьи.

Шаг 20: код Arduino

Код Arduino находится в папке «MaxSonar-output» проекта в Sonar Range-Finder Comparison.

Рекомендуемые: