Как синхронизировать несколько ардуино?

Я провожу эксперимент по контролю позы, в котором человеку представляется серия изображений (стимулов), и я пытаюсь измерить смещение этого человека в результате этих стимулов. Для этого я планирую использовать 3 Ардуино:

1) "Arduino Tx 1": Arduino nano с экраном Xbee и блоком MPU, подключенным для измерения смещения. Эта реализация должна быть беспроводной, потому что объект должен иметь возможность свободно перемещаться.

2) "Arduino Tx 2": arduino uno для считывания аналогового сигнала, который указывает, когда человеку представлено изображение (стимул).

3) "Arduino Rx": arduino uno, подключенный к компьютеру и считывающий данные как с "Arduino Tx 1", так и с "Arduino Tx 2".

Я хочу убедиться, что сигналы, поступающие от "Arduino Tx 1" и "Arduino Tx 2", синхронизированы. То есть: если изображение представлено при t=t0 (сигнал, воспринимаемый "Arduino Tx 2"), то я хочу иметь возможность сказать, что смещение, воспринимаемое "Arduino Tx 1" при t=t0+dt, соответствует этому стимулу.

Мой вопрос: можно ли гарантировать, что сигналы, поступающие от "Arduino Tx 1" и "Arduino Tx 2", синхронизируются при считывании "Arduino Rx"?

, 👍-1

Обсуждение

Что вы имеете в виду под "синхронизированы"? Если вы получаете сигналы, поступающие в один и тот же момент, это будет синхронизировано, не так ли?, @Nick Gammon

О каком уровне точности мы говорим? Каково время реакции? 1-10 мс означало бы с ошибкой 1% 10-100 сша. Я бы предложил транслировать начальное сообщение, измерять, а затем получать результаты., @Mikael Patel

Почему индикация изображения является аналоговой? Вы должны получить цифровой импульс (с прерыванием) во время отображения изображения. И тогда вы сможете с этой точки измерить смещение., @Paul

Даже несмотря на то, что один из них беспроводной и, следовательно, будет использовать батарею: не могут ли ардуино просто непрерывно отправлять сообщения?, @Arjan


2 ответа


0

Пусть TX2 также испускает инфракрасный импульс, который инициирует синхронизацию, сообщаемую TX1. TX1 должен сообщать о dt, а не о t_tx1.

Обычные часы реального времени для Arduino сообщают с разрешением 1 секунда, что звучит недостаточно точно для ваших нужд.

,

Большинство устройств RTC также имеют выход 32 768 кГц, что должно быть более чем достаточно точным., @CharlieHanson


0

ИМХО, задержки незначительны, если вы обнаруживаете время в диапазоне миллисекунд. Просто дайте нам дополнительную информацию (например, какую максимальную ошибку вы можете допустить).

В любом случае вы можете реализовать оценку времени в оба конца. Например

  • RX отправляет пакет (или даже всего один байт) одному TX, чтобы перевести его в "режим измерения RTT".
  • TX считывает пакет и отправляет подтверждение. Это необходимо для предотвращения ошибок, когда TX занят чем-то другим.
  • Когда ACK получен, RX отправляет сообщение и начинает измерять время.
  • Когда TX получает сообщение, немедленно отправляет ответ
  • Когда RX получит ответ, таймер остановится. Задержка связи составляет половину измеренного времени

Просто повторите эту процедуру как для TX1, так и для TX2; таким образом, у вас будет оценка того, сколько времени потребуется для получения сообщения от каждого из них. Затем, когда вы получаете пакет, вы знаете, сколько времени прошло с момента его передачи (и поэтому вы можете синхронизировать их).

,