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

Парктроник на Ардуино с дисплеем и LED

Парктроник на Ардуино ► сделать просто, при этом можно использовать дисплей, световую и звуковую индикацию. Рассмотрим сборку проекта парктроника на Arduino Uno.

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

Парктроник на Ардуино своими руками

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

Скетч для вычисления среднего значения датчика HC-SR04

Пояснения к коду:

  1. перед выполнением цикла for, необходимо обнулять переменные sum и total, поэтому мы их задаем в цикле, при этом они становятся равными нулю;
  2. алгоритм программы можно применять на любом датчике.

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

Для этого проекта нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • ультразвуковой дальномер HC-SR04;
  • дисплей LCD 1602 I2C;
  • светодиоды и резисторы;
  • RGB светодиоды Ардуино;
  • пьезодинамик;
  • провода папа-мама, папа-папа.

Схема. Ультразвуковой парктроник с дисплеем 1602

Для сборки парктроника с экраном следует подключить к плате ультразвуковой дальномер, пьезодинамик и LCD экран, как на картинке выше. В представленную выше программу остается лишь добавить функцию вывода расстояния на дисплей и условие для срабатывания зуммера. Время между измерениями и расстояние при котором будет включен предупредительный звуковой сигнал можно поменять в скетче.

Скетч. Парктроник на Ардуино с экраном жк

Пояснения к коду:

  1. время задержки между измерениями и расстояние при срабатывании пьезодинамика можно поменять в начале кода, изменив значения del и cm ;
  2. количество измерений можно увеличивать, но это увеличит время выполнения программы, не изменив принципиально качество измерения расстояния.

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

Так как устройство не рекомендуется ставить на автомобиль из-за отсутствия влагостойкости у датчиков HC-SR04, то и дисплей не имеет смысла подключать к парктронику на Arduino Uno. Лучше всего использовать световую индикацию. В следующем варианте проекта используются красные, желтые и зеленые светодиоды для индикации расстояния от устройства до автомобиля, заезжающего в гараж.

Скетч. Парктроник на Ардуино со светодиодами

Пояснения к коду:

  1. в начале программы задаются переменные, которые можно поменять, настроив подходящий режим работы автомобильного парктроника на Ардуино;
  2. светодиоды одного цвета можно подключать к одному пину.

Гаражный ультразвуковой парктроник Arduino

В следующей программе реализована функция выключения звуковой сигнализации через 10 секунд (можно изменить в программе), т.е. когда машина уже остановилась. В схеме использованы RGB светодиоды 5 В, чтобы для питания использовать обычную зарядку от телефона. Схема сборки проекта на Ардуино остается прежней, а скачать скетч и файлы с макетом корпуса в Corel Draw для парктроника можно здесь.

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

В этом уроке описывается процесс создания ультразвукового радара с помощью микроконтроллера 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 линии:

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

В любом случае это работает, но второй метод поддается «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», и ваш проект запустится. Попробуйте обнаружить разные объекты.

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

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

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

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

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

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

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

Самодельный радар с монитором на Ардуино

Не знаю кто как, но я давно хотел сделать радар, такой чтоб туда-сюда излучатель крутился и на экране видно было наличие и дистанцию до объектов. Конечно в домашних условиях вещь, подобную военным или авиа службам сделать не получится – там и мощности, и размеры недосягаемые. Но что-то похожее, причём совсем не сложное и не дорогое (пару тысяч рублей) соорудить возможно. Итак, на основе популярного Ардуино вы можете сделать такую себе мини РЛС с помощью ультразвукового детектора и собственно платы Arduino. Схема подсмотрена на сайте “Мехатроник”. Все, что нужно для этого проекта: ультразвуковой датчик для обнаружения объектов, маленький серводвигатель для поворота датчика и плата Arduino для управления ими. Ну и макетка с проводами.

Сначала сделаем крепление для подключения ультразвукового датчика к серводвигателю. Изготавливаем его, как это показано на рисунке ниже, потом он приклеивается и крепится к двигателю с помощью винта.

Теперь прикрепите штырьки, на которые припаяем 4 провода для подключения датчика.

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

Мы подключили ультразвуковой датчик HC-sr04 к выводам 10 и 11, а серводвигатель к 12 контакту на плате Arduino.

Исходный код

Теперь нужно взять код и загрузить его на плату Ардуино, которая позволит взаимодействовать между Arduino и обработкой сигнала. Здесь будем получать значения для угла и расстояние, измеренное с помощью датчика с платы Arduino на обработку IDE с помощью функции SerialEvent(), которая считывает данные из последовательного порта, и будем ставить значения угла и расстояния в переменные iAngle и iDistance. Эти переменные будут использоваться для построения линии обнаружения объектов.

void drawRadar() <
pushMatrix();
translate(960,1000); // moves the starting coordinats to new location
noFill();
strokeWeight(2);
stroke(98,245,31);
// draws the arc lines
arc(0,0,1800,1800,PI,TWO_PI);
arc(0,0,1400,1400,PI,TWO_PI);
arc(0,0,1000,1000,PI,TWO_PI);
arc(0,0,600,600,PI,TWO_PI);
// draws the angle lines
line(-960,0,960,0);
line(0,0,-960*cos(radians(30)),-960*sin(radians(30)));
line(0,0,-960*cos(radians(60)),-960*sin(radians(60)));
line(0,0,-960*cos(radians(90)),-960*sin(radians(90)));
line(0,0,-960*cos(radians(120)),-960*sin(radians(120)));
line(0,0,-960*cos(radians(150)),-960*sin(radians(150)));
line(-960*cos(radians(30)),0,960,0);
popMatrix();
>

Для рисования линии, которая движется вдоль радара, сделана функция drawLine(). Переменная iAngle используется как линия, что перерисовывается для каждой ступени.

void drawLine() <
pushMatrix();
strokeWeight(9);
stroke(30,250,60);
translate(960,1000); // moves the starting coordinats to new location
line(0,0,950*cos(radians(iAngle)),-950*sin(radians(iAngle))); // draws the line according to the angle
popMatrix();
>

Для прорисовывания обнаруженных объектов служит функция drawObject(). Она получает расстояние от ультразвукового датчика, преобразует его в пикселах, и в сочетании с углом датчика рисует объект на радаре – экране ЖК монитора.

Радар на arduino

Случилось так, что попалась мне на глаза arduino с некоторым количеством сенсоров. Наигравшись с blink-ами и analog ридами, разумеется, пришел к мысли о покупке собственной платы. Пробежавшись беглым взглядом по списку готовых шилдов, открыл ебей и заказал Funduino Mega2560 (аналог arduino mega 2560), и некоторое количество дополнительных девайсов к нему.

Среди самых интересных заказанных шидов был цветной TFT дисплей с разрешением 320×240, имеющий 16 битную шину и резистивный тачскрин. Как оказалось впоследствии, дисплей нужно было подключать к Mega через переходной шилд, однако упустив этот момент, переходник заказан не был, а жажда приключений заставила взять в руки паяльник и перепаять коннектор «папы», на «маму». В результате, при помощи серьезной кучи проводов и некоторого количества нервных клеток, дисплей завелся, стандартная библиотека подхватилась и начались эксперименты. Собственно о результатах последнего и пойдет речь.


Теперь это «мама»

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


Еще бы лазер на 10мВт и — бойтесь мухи.

Дабы моя РЛС УЛС была более устойчивой, получившийся агрегат было решено приклеить к стеклянной подставке под стаканы. Для экспериментов оказалось более чем достаточно ну и повторяемость хорошая. Итак, еще раз принцип работы. Сервомашинка вращает влево-вправо установленный на ней датчик расстояний. Каждый момент изменения угла сервы, сопровождается рабочими импульсами датчика. Иными словами, каждому углу сервы, соответствует свои показания датчика. Далее, эти данные переводятся в читабельный вид библиотекой УЗ датчика и в соответствии с углом и показаниями датчика, на дисплее рисуется точка.
Небольшая анимашка иллюстрирующая принцип работы.

Сам код я максимально упростил. Однако в более стабильном варианте, добавлен корректор ошибок датчика. Периодически, УЗ выдает запредельные данные, скажем, прибавляет к настоящему значению 2000мм. причем предыдущее и последующее значения находятся в пределах нормы. Вот и анализируя соседние данные, код исправляет ошибку.

Однако не обошлось без проблем. Оказалось что тока выдаваемого USB ну никак не достаточно для полноценной запитки только arduino и дисплея, не говоря уже о серве с УЗ датчиком. Пришлось дополнительно запитать плату от 9 вольтового БП. Однако даже в этом случае УЗ выдавал не верные данные, а его предел измерения ограничивался 50 см в глубину. И это не считая массы помех, подмешиваемых в окончательные данные с датчика. Источником помех, как оказалось, являлась сервомашинка, которая при вращении давала серьезные наводки на УЗ датчик. В результате серву, я запитал от второго блока питания, соединив только минусовой провод с общей цепью. Несмотря на все принятые меры, наводки частично остались, что заметно как на данных с датчика, так и на изображении с дисплея.

Источники:

http://arduinoplus.ru/arduino-radar/

http://radioskot.ru/blog/samodelnyj_radar_s_monitorom_na_arduino/2016-09-30-459

http://habr.com/post/175495/

http://arduinoplus.ru/arduino-termometr-ds18b20/

Ссылка на основную публикацию