Акустический радиолокационный дисплей с Ардуино

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

Дополнительная модификация датчика позволяет обнаруживать несколько объектов с каждым пингом.

Шаг 1. Комплектующие и инструменты

На фото выше можно увидеть основные комплектующие Ардуино радара. Конструкция проста. В из инструментов всё, что вам нужно, - это два сверла, острый нож, пару резаков и паяльник.

Стоит сказать, что точки на радаре, представляющие первичные объекты, отображаются красным цветом, а точки, представляющие вторичные объекты, отображаются синим цветом. Подробнее - на последнем шаге.

Следующие детали были куплены в обычном магазине:

  • 1 - пластиковый контейнер для пищевых продуктов.
  • 1 - миниатюрный переключатель.
  • 1 - лента (используется для крепления проводов от датчика).
  • 1 - лента (используется для крепления датчика).
  • 1 - кусок из алюминия толщиной 20 мм размером 40 х 55 мм.
  • 6 - 9 мм нейлоновых прокладок.
  • 3 - кабельные стяжки.
  • 13 - болтики 3 мм x 6 мм.
  • 1 - 3-мм гайка.
  • 4 - болтики 4 мм x 10 мм.
  • 2 - 4 мм гайки.

Эти детали заказаны на АлиЭкспресс:

  • 1 - микроконтроллер Arduino Uno R3 в комплекте с USB-кабелем.
  • 1 - 28BJY-48 5-вольтовый шаговый двигатель в комплекте с контроллером ULN2003.
  • 1 - 5-миллиметровый латунный шестигранный вал для колесной пары для моделей автомобилей.
  • 1 - ультразвуковой датчик HY-SRF05 (или HC-SRF04).

Шаг 2. Схема подключения

Схема подключения показана на рисунке выше. Дополнительная модификация (на диаграмме синее соединение) показана ниже:

Эта модификация одинакова для ультразвуковых датчиков HC-SR04 и HY-SRF05 и позволяет обнаруживать множественные эхо-сигналы. Если у вас есть HC-SR04, интегральная схема к которой вы припаиваете провод обозначается U2.

Шаг 3. Как это работает

Механика

Все части расположены внутри пластмассового контейнера для пищевых продуктов. Питание обеспечивается от USB-порта. Схема содержит Arduino, ультразвуковой датчик, шаговый двигатель и микропереключатель для перемещения датчика в его «стартовое» положение. Микропереключатель необходим, так как невозможно вращать шаговый двигатель вручную из-за его внутренней зубчатой ​​передачи 64:1.

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

Шаговый двигатель 28BJY-48 имеет «угол шага» 5,625/64 градуса, что означает, что шаги на 1 градус невозможны (хотя сетка обозначена на 0,80 градуса).

К счастью:

180 / (угол поворота) = 180*64 / 5.625 = 2048

который равномерно делится на 8. Если мы увеличим число от 0 до 2048 и разделим на 8, получится 256 вариантов, когда мы получим остаток от нуля. Мы просто отправляем «пинг», когда остаток равен нулю. Это соответствует «пингованию» каждого Пи/256 радианов или 0.703125 градусов.

Программное обеспечение

После дисплей принимает управление и постоянно опрашивает Ардуино относительно следующих данных:

  • Азимут
  • Дистанция1 (Distance1)
  • Дистанция2 (Distance2)
  • Направление

Затем на экране отображаются «расстояние(-я)» для каждого «азимута». Информация «направление» используется для создания отображения (визуализации) «точек», появляющихся за «лучом» при вращении.

Arduino автоматически переходит к следующей позиции «ping», когда данные отправляются на дисплей.

Программное обеспечение «Processing 3», используемое для записи дисплея и может быть загружено с processing.org.

«Processing 3» поддерживает 2D и 3D-графику и очень похожа на Arduino IDE (англ. - Integrated Development Environment). Основными визуальными отличиями являются «графическое окно» при запуске кода и использование функции «draw()» вместо «loop()» Ардуино.

Шаг 4. Экран

Нужно было создать графический дисплей на 180 градусов, поскольку он обеспечивает «радарную тень», в которой можно стоять во время экспериментов. Такой дисплей также совместим с сервомотором, если вы захотите его использовать. Полный 360-градусный дисплей можно получить путем настройки кода.

Графика содержит ряд «дуг» и «линий». На фотографии ниже показаны угловые надписи, которые позже были отброшены в пользу горизонтального текста, который легче читать.

Показывает красную линию, изображающую «луч». Текст теперь горизонтальный.

Красная линия на фото выше была повернута на 0.80 градусов по 256 азимутальным позициям. На фотографии ниже внешние части сетки не покрываются, поскольку ширина луча слишком узкая. Это приводит к некоторым странным артефактам.

Увеличение ширины луча устранило эти артефакты.

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

Цветовая схема в итоге была изменена, чтобы добавить оттенок реализма.

Анимация

Анимированные части графического дисплея используют 3D-графику, чтобы значительно упростить код. Чтобы понять, как это возможно, сделаем «30-градусную линию» с постоянным радиусом от начальной координаты XY (0,0).

2D-графика требует использования sin (30) и cos (30) для вычисления конечных координат XY линии:

X=cos(30)*radius = 0.866*radius
Y=sin(30)*radius = 0.5*radius
line(0,0,X,Y);

3D-графика не требует использования тригонометрии. Мы просто поворачиваем координаты сетки XY вокруг оси Z, затем рисуем горизонтальную линию.

pushMatrix();		//сохранить наши текущие координаты сетки
rotateZ(radians(30));	//повернуть наши координаты XY-сетки вокруг оси Z
line(0,0,radius,0);	//нарисовать «горизонтальную» линию на повернутой сетке
popMatrix();		//restore our grid coordinates

В любом случае это работает, но второй метод поддается «ping» интервалам Пи/256 радианов.

Затухающие линии

В модели затухающего луча используется умная техника, найденная на форумах. Луч имеет собственный виртуальный экран. До рисования любой строки «альфа» (непрозрачность) всех предыдущих строк уменьшается на небольшую величину. В конечном счете самые ранние линии становятся невидимыми, что дает иллюзию угасающего рисунка.

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

Шаг 5. Монтаж кронштейна

Шаблон сверления для подходящего кронштейна из алюминия показан выше. Расположите два наружных «крепежных отверстия» ниже датчиков передачи (T) и приема (R). Лучшие результаты получаются, если сенсор вращается вокруг приемного (R) датчика, а не на полпути между двумя датчиками. Три отверстия дадут возможность поэкспериментировать.

Шаг 6. Сборка

Отверстие для кабеля USB

Не пытайтесь просверлить отверстие для кабеля USB, хотя сторона пластикового контейнера может быть разрезана. Вместо этого расплавьте отверстие, используя наконечник горячего паяльника, затем отшлифуйте острым ножом. Будьте осторожны, не дышите в это время.

Вал-расширитель

Замените один из 4 мм «зажимных винтов» в удлинителе вала болтом 4 мм x 10 мм. Этот болт используется для активации переключателя.

Переключатель

Установите переключатель таким образом, чтобы он включался 4-мм болтом, когда вал вращается по часовой стрелке.

В уроке использованы два витка медного провода толщиной 20 мм, чтобы прикрепить микропереключатель к корпусу, поскольку 2-миллиметровые гайки и болты были недоступны.

Остальные компоненты

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

Монтаж датчика

Фото выше показывает узел датчика. Все нежелательные контакты были удалены и через пластинку просверлино 3 мм отверстие. Затем заготовка  прикрепляется к кронштейну с помощью гайки и болта 3 мм.

Фото выше показывает вид сбоку узла датчика. Провода привязаны к кронштейну. Этот «предохранитель» предотвращает нежелательное перемещение кабеля при вращении датчика. Также обратите внимание на «серый» провод, подключенный к контакту 10 IC1. Этот провод является дополнительным и передает вторичные эхо-сигналы в Arduino.

Шаг 7. Установка программного обеспечения

Установите всё что нужно в следующем порядке, как написано ниже.

Arduino IDE

Загрузите и установите Arduino IDE (интегрированное окружение разработки), если еще не установлена. Скачать можно здесь.

Processing 3

Загрузите и установите "Processing 3" отсюда.

Передатчик акустического радара

Скопируйте содержимое файла ниже в «эскиз» Arduino, сохраните его, а затем загрузите в свой Arduino Uno R3:

Закройте Ardino IDE, но оставьте кабель USB подключенным.

Приемник акустического радара

Скопируйте содержимое файла ниже в скетч для «Processing 3» (может понадобиться переименовать расширение .ino в .pde):

Шаг 8. Итоговый результат

Нажмите левую кнопку «Запустить» (Run) в окне «Processing 3», и ваш проект запустится. Попробуйте обнаружить разные объекты.

Для объектов поблизости требуется, чтобы датчик передачи (Т) был низким, чтобы предотвратить проход «луча» над объектом.

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

На фото показан собранный радар Ардуино.

На этой фотографии показан фактический снимок экрана из семи объектов.

Азимут и расстояние каждого первичного объекта показаны красным цветом. Любое эхо от вторичного объекта отображается синим цветом. Без изменения датчика вы увидите только красные объекты.

Поскольку звуковые импульсы расширяются конусообразным образом, отдаленные объекты становятся шире. Фактически каждый объект - это середина каждой прерывающейся (красной или красно-синей) линии.

Непрерывные линии, содержащие как красные, так и синие точки, представляют собой единый объект, часть которого находится в тени.

Ардуино+