В данной статье объясняется, как определить местоположение объекта с помощью Arduino, двух ультразвуковых датчиков и формулы Герона для треугольников. Движущихся частей в проекте нет.
Формула Герона позволяет рассчитать площадь любого треугольника, для которого известны все стороны. Как только вы узнаете площадь треугольника, вы сможете рассчитать положение одного объекта (относительно известной базовой линии), используя тригонометрию и теорему Пифагора.
Точность отличная. При использовании распространенных ультразвуковых датчиков HC-SR04 или HY-SRF05 возможны большие области обнаружения.
На рисунке выше показана схема подключения для «эхолокатора на двух датчиках и Arduino».
Датчик B представлен «пассивным», это делается с помощью нанесения нескольких слоев маскирующей ленты поверх передающего (T) преобразователя. Эта лента блокирует ультразвук, который иначе излучался бы.
Перечень компонентов:
1 x Arduino Uno R3;
2 x ультразвуковой преобразователь HY-SRF05, или HC-SR04;
1 однорядный разъем 2,54 мм (папа);
2 однорядных разъема 2,54 мм (мама);
2 куска алюминия;
2 небольших куска дерева;
2 небольших самореза;
3 кабельных стяжки;
4 длинных изолированных провода (разных цветов)
Теория
Датчик A получит эхо от любого объекта в «красной зоне».
Датчик B будет получать эхо, только если объект находится в «лиловой зоне». Вне этой зоны определить координаты объекта невозможно (целевая зона может быть полностью «освещена» звуком, если расположить датчики ниже базовой линии).
Большие «лиловые» зоны обнаружения возможны, если датчики расставлены широко.
Площадь любого треугольника может быть вычислена по формуле:
S=½bh
Преобразование уравнения (1) дает нам высоту (координату Y):
Пока всё хорошо... Но как мы вычислим площадь?
Ответ заключается в том, чтобы разместить два ультразвуковых преобразователя на известном расстоянии друг от друга (базовая линия) и измерить расстояние, на котором каждый датчик находится от объекта, используя ультразвук.
Преобразователь A посылает импульс, который отражается от объекта во всех направлениях. Этот импульс слышат оба преобразователя, и A, и B. Преобразователь B не передает импульсов, он только слушает.
Обратный путь к преобразователю A показан красным цветом. Если разделить его на два и учесть скорость звука, мы можем рассчитать расстояние d1 с помощью формулыформулы
d1=t/59
Значение 59 для константы получается следующим образом:
Скорость звука составляет примерно 340 м/с, что составляет 0,034 см/мкс (сантиметр/микросекунда).
Обратное значение 0,034 см/мкс составляет 29,412 мкс/см, которое при умножении на 2 (чтобы получить длину обратного пути) дает в результате 58,824 или 59 при округлении.
Это значение можно подстроить вверх/вниз, чтобы учесть температуру, влажность и давление воздуха.
Путь к преобразователю B показан синим цветом. Если из этого пути вычесть расстояние d1, мы получим расстояние d2. Формула для d2 будет следующей:
d2=t/29.5
Величина 29,5 для константы получается следующим образом:
Тут нет обратного пути, поэтому мы используем 29,5, что является половиной значения, используемого в формуле (3) выше.
Формула Герона
Формула Герона использует нечто, называемое «полу-периметром», в который вы добавляете каждую из трех сторон треугольника и делите результат на два:
s=(a+b+c)/2(5)
Теперь площадь может быть рассчитана по следующей формуле:
площадь=√s⋅(s−aL)⋅(s−b)⋅(s−c)(6)
Как только мы узнаем эту площадь, мы сможем вычислить высоту (координату Y) из формулы (2) выше.
Теорема Пифагора
Теперь координату X можно вычислить, отложив из вершины треугольника перпендикулярную линию до базовой линии, чтобы получить прямоугольный треугольник. Теперь координату X можно вычислить с помощью теоремы Пифагора:
с1=√b2−h2
Установите следующее программное обеспечение в этом порядке:
Arduino IDE
Скачайте и установите Arduino IDE (интегрированную среду разработки) с сайта https://www.arduino.cc/en/main/software, если она еще у вас не установлена.
Processing 3
Скачайте и установите Processing 3 отсюда https://processing.org/download/.
Скетч Arduino
Скачайте и откройте в Arduino IDE файл "dual_sensor _echo_locator.ino", загрузите его в свою Arduino Uno R3.
Закройте Arduino IDE, но USB кабель оставьте подключенным
Скетч Processing
Скопируйте содержимое прикрепленного файла, “dual_sensor_echo_locator.pde” в Processing "Sketch".
Теперь нажмите вверху слева кнопку "Run"... На вашем экране должен появиться графический экран.
Тестирование
Подключите USB кабель Arduino к компьютеру.
Запустите “dual_sensor_echo_locator.pde”, нажав кнопку запуска вверху слева в Processing 3 IDE.
На вашем экране должны начать появляться числа, разделенные запятой
Расположение датчиков
Расположите датчики на расстоянии 100 см друг от друга и 100 см от объекта, фронтальной стороной к нему.
Медленно поворачивайте оба датчика к диагонально противоположному углу воображаемого квадрата со стороной 1 метр.
Когда вы будете вращать датчики, то найдете положение, в котором на графическом дисплее появится мигающая красная точка.
Также, когда датчики захватят ваш объект, будут отображаться дополнительные данные
расстояние d1
расстояние d2
базовая линия (base)
смещение (offset)
полупериметр (s)
площадь (area)
координата X
координата Y
Дисплей
Дисплей был написан с помощью Processing 3. Базовая линия 100 см показана.
Изменение базовой линии
Давайте изменим нашу базовую линию со 100 см на 200 см.
Измените “float Baseline = 100;” в заголовке скетча Processing на “float Baseline = 200;”.
Измените метки “50” и “100” в функции “draw_grid()” скетча Processing на “100” и “200”.
Изменение смещения
Если мы расположим датчики ниже базовой линии, то сможем получить площадь обнаружения.
Если вы решите это сделать, то в заголовке скетча Processing должна быть изменена переменная "Offset".