nRF24L01 - Измерение расстояния по прошедшему времени
Для школы мы с моей командой работаем над браслетом, который будет предупреждать пользователя, если он находится слишком близко к другому браслету (для соблюдения социальной дистанции). Проблема заключается в измерении расстояния с помощью радиоволн. Поскольку я не могу использовать мощность сигнала, я думаю о расчете расстояния по времени, необходимому для передачи некоторых данных, и скорости (которая будет около скорости света). Я отказался от идеи использования ультразвука, потому что ему слишком легко мешают другие препятствия.
Мой план примерно такой:
- Датчик 1 и 2 синхронизированы с часами.
- Оба будут запускать "секундомер", а значения времени должны быть точно такими же в в то же время.
- Датчик 1 отправляет сообщение датчику 2. Сообщение содержит время начала передачи.
- Датчик 2 получает сообщение, сразу записывает время приема и вычисляет время, необходимое для перемещения данных
- d = v/t
- Наоборот
Если расстояние меньше радиуса, срабатывает предупреждение в виде вибромотора.
Ограничения включают тактовую частоту; Я намерен использовать плату Seeeduino XIAO, совместимую с Arduino. Тактовая частота макс. 48 МГц, что означает, что наименьшее приращение, которое он может измерить, составляет 20,82 наносекунды. Я также подсчитал, что для преодоления двух метров потребуется 13,33 наносекунды (прежнее расстояние, чтобы держаться на публике). Следовательно, с доступной мне тактовой частотой я могу измерить только 3 м и более.
Предполагая, что меня устраивает это расстояние, смогу ли я сделать это, используя один-единственный скетч Arduino? Я знаю, что программы Arduino могут запускаться только по одной за раз. Будут ли постоянные фоновые часы/секундомер слишком сложными? Не могли бы вы дать мне какие-либо другие указания?
@Hari5000, 👍0
Обсуждение1 ответ
Лучший ответ:
Измерения задержки света нецелесообразны для предлагаемого вами варианта использования. Как предполагает Маженко в своем комментарии, вам потребуется ЧРЕЗВЫЧАЙНО точное измерение времени, а также высокоскоростная обработка радиочастотного сигнала. Любые измерения, которые вы выполняете с помощью программного обеспечения, будут слишком неточными из-за синхронизации программного обеспечения.
iBeacons от Apple (основанные на BLE) предлагают мгновенные, ближние, средние и дальние показания в зависимости от мощности сигнала. Вы должны быть в состоянии добиться чего-то подобного с вашими собственными браслетами, используя BLE. Различные пороговые значения расстояния будут иметь некоторую погрешность, но можно будет получить приличные результаты.
Как насчет того, чтобы вычесть время процесса из общего времени? Я знаю, что радиочастотному модулю требуется 2 мкс для обработки каждого бита., @Hari5000
Нет. Это НЕ БУДЕТ РАБОТАТЬ без специального оборудования., @Duncan C
Я смотрю на BLE - похоже, это то, что мне нужно., @Hari5000
@ Hari5000: Насчет «_радиочастотному модулю требуется 2 мкс для обработки каждого бита_»: вы имеете в виду, что он всегда занимает _точно_ 2000 мкс? Или это больше похоже на (2,00 ± 0,01) мкс?, @Edgar Bonet
@ Hari5000 Официальный API Covid-19 от Google и Apple также использует маяки BLE. Они выбрали такой подход не просто так. Вычисление расстояния между двумя произвольными (и движущимися) точками в этом диапазоне не так просто. BLE — это путь к лучшим и самым простым результатам., @chrisl
Возможно, не «лучшие» результаты, но самые простые и достаточно хорошие результаты с использованием недорогого оборудования., @Duncan C
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Пустое значение не игнорируется, как должно быть.
- Как Arduino может проверить, подключен ли он к ПК и включен ли компьютер?
- Проблема с NRF24L01
- NRF24L01+ (библиотека TMRH20): Получатель получает пустые данные
- Как автоматически сбросить модуль NRF24L01
- Программа Nano Every с использованием порта UPDI
- Не удается загружать скетчи в Arduino Nano Every
Вы бы хотели, чтобы атомные часы были привязаны к спине каждого пользователя для такой точности времени..., @Majenko
@Majenko Помимо точности синхронизации, возможно ли, чтобы такой код выполнялся одновременно? Запустить счетные часы, постоянно посылая радиоимпульсы? Подпрограммы?, @Hari5000
Если вы напишете его правильно, вы можете сделать так, чтобы две вещи работали одновременно, но это не поможет вам обойти основные физические барьеры, которые делают его непрактичным., @Majenko
идея с ультразвуком может действительно сработать ... какой-то тип обмена эхо-запросами .... возможно, может быть передана уникальная последовательность импульсов ... когда последовательность получена, будет отправлен ответ .... отправитель обмен будет прослушивать ответ и, когда он будет получен, вычислить круговой путь .... радиоканал может использоваться для административных функций, таких как системная синхронизация., @jsotola
@jsotola Ультразвуковые датчики имеют узкий угол обнаружения и площадь - обычно около 30 градусов. Если бы я использовал его на браслете, я мог бы получить ложные срабатывания от объектов вокруг меня, таких как столы и стулья, не говоря уже о том, что я мог бы стоять прямо перед кем-то и не брать их. Ультразвук не может проникать сквозь объекты... они полезны, потому что отражаются от них., @Hari5000
как насчет этого .... радио используется для назначения каждому браслету места в очереди, чтобы не было помех между диапазонами .... когда у диапазона есть очередь, он отправляет синхронизирующее радиосообщение и ультразвуковой импульс .... все остальные диапазоны ожидают ультразвукового импульса ... любой диапазон, который получает импульс до истечения времени ожидания, будет считаться слишком близким ... радиосообщение будет использоваться для оповещения о близости .... без разницы если ультразвуковой импульс отразится от объекта....ультразвуковой передатчик и приемник надо было бы сделать всенаправленным, @jsotola
Всенаправленные ультразвуковые датчики дороги, и это общешкольный проект. Спасибо за ваши идеи, но я решил пойти с BLE., @Hari5000
13,33 наносекунды на самом деле 4 метра. NRF отправляет биты со скоростью 2 Мбит/с, используя FSK. Таким образом, передача делится на куски по 250 нс. Так что не ожидайте точности ns от логики обнаружения сигнала внутри NRF., @Gerben
@Gerben Моя ошибка ... Первоначально я планировал, что сигнал будет идти от S1 к S2, а затем обратно к S1, таким образом, формула v = 2d / t и d = vt / 2. Спасибо за указание на это. Я все равно отказался от этой идеи и теперь занимаюсь BLE. Это не точно, но это то, что мне нужно., @Hari5000