Как определить расстояние между двумя устройствами Bluetooth?

Рейтинг: 6Ответов: 1Опубликовано: 11.02.2015

Возможно ли как-то через bluetooth определить, на каком расстоянии (или направлении) находится другое устройство с bluetooth? Т.е., может, через силу сигнала или как-то еще... Я имею в виду программно, например, через приложение на android. Почитал про android.bluetooth, но ничего интересного не нашел.

Ответы

▲ 7Принят

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

Итак, датчик блютуса в телефоне один, и он ненаправленный. То есть азимут он определить не может. Узнать уровень сигнала можно (есть пример кода), но как перевести уровень в метры для неизвестного сигнала... а никак. Потому как передатчики у разных телефонов разной мощности (можно, конечно, по mac адресу адаптера определить девайс и внести поправочный коэффициент, но на всех девайсов не напасешся конфигов). Во-вторых, сам уровень может "прыгать".

Но если сильно очень хочется, то можно сделать. Нужно измерить уровень с нескольких точек и сделать "триангуляцию". Очень сильно может помочь, если есть несколько датчиков в заведомо известных местах.

Использовать gps для определения текущих координат вряд ли получится, так как точность gps обычно 5-10 метров (а в помещении и то ниже. Гугл во всю работает над проектом bluepoint, который позволяет определить положение в помещении по wifi), а для bluetooth, который в телефонах, максимальный радиус досягаемости также около 10-15 метров (да, я знаю, что некоторые девайсы могут брать на 100 метров, но, насколько я знаю, в телефонах такое не применяется).

Если стоит задача "найти устройство", а не определит координаты, то это сделать заметно проще. Пользователю предлагается просто идти прямо. Программа следит за уровнем сигнала. Пока он повышается - значит идем правильно, если начал понижаться - удаляемся. В этот момент предлагаем повернуть на 90 градусов вправо или влево (а акселерометр и гироскоп помогут определить пройденное расстояние и направление). Как только пользователь пройдет немного, сразу станет понятно, где девайс.

Возможны такие варианты:

  • уровень сигнала увеличивался, потом уменьшился. После поворота снова увеличивался и уменьшился. Значит девайс внутри угла. По двум максимумам можно провести перпенидикуляры и пересечение даст положение;
  • уровень сигнала увеличивался, потом уменьшился. После поворота уменьшается. Значит повернули не в ту сторону. Предлагаем развернуться на 180 градусов; :)
  • уровень сигнала изначально уменьшался - развернуться на 180 градусов и попробовать с самого начала.

Подведем больше математики и физики. Известно, что уровень сигнала падает обратно пропорционально квадрату расстояния. Уровень сигнала (rssi) обычно измеряется в децибелах, а это просто логарифм умноженный на константу. Логарифм квадрата - это просто 2 раза логарифм расстояния. Поэтому уровень сигнала будет уменьшаться по логарифму расстояния. Измеряя в процессе ходьбы уровень и полагая, что он уменьшается по логарифму и окружностями (более-менее), можно сделать качественный поиск.