Как синхронизировать несколько ардуино?
Я провожу эксперимент по контролю позы, в котором человеку представляется серия изображений (стимулов), и я пытаюсь измерить смещение этого человека в результате этих стимулов. Для этого я планирую использовать 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"?
@CodificandoBits, 👍-1
Обсуждение2 ответа
Пусть TX2 также испускает инфракрасный импульс, который инициирует синхронизацию, сообщаемую TX1. TX1 должен сообщать о dt, а не о t_tx1.
Обычные часы реального времени для Arduino сообщают с разрешением 1 секунда, что звучит недостаточно точно для ваших нужд.
Большинство устройств RTC также имеют выход 32 768 кГц, что должно быть более чем достаточно точным., @CharlieHanson
ИМХО, задержки незначительны, если вы обнаруживаете время в диапазоне миллисекунд. Просто дайте нам дополнительную информацию (например, какую максимальную ошибку вы можете допустить).
В любом случае вы можете реализовать оценку времени в оба конца. Например
- RX отправляет пакет (или даже всего один байт) одному TX, чтобы перевести его в "режим измерения RTT".
- TX считывает пакет и отправляет подтверждение. Это необходимо для предотвращения ошибок, когда TX занят чем-то другим.
- Когда ACK получен, RX отправляет сообщение и начинает измерять время.
- Когда TX получает сообщение, немедленно отправляет ответ
- Когда RX получит ответ, таймер остановится. Задержка связи составляет половину измеренного времени
Просто повторите эту процедуру как для TX1, так и для TX2; таким образом, у вас будет оценка того, сколько времени потребуется для получения сообщения от каждого из них. Затем, когда вы получаете пакет, вы знаете, сколько времени прошло с момента его передачи (и поэтому вы можете синхронизировать их).
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- В чем разница между delay() и delaymicroseconds()
- Программирование Arduino на Паскале?
- Arduino nano KiCad символы
Что вы имеете в виду под "синхронизированы"? Если вы получаете сигналы, поступающие в один и тот же момент, это будет синхронизировано, не так ли?, @Nick Gammon
О каком уровне точности мы говорим? Каково время реакции? 1-10 мс означало бы с ошибкой 1% 10-100 сша. Я бы предложил транслировать начальное сообщение, измерять, а затем получать результаты., @Mikael Patel
Почему индикация изображения является аналоговой? Вы должны получить цифровой импульс (с прерыванием) во время отображения изображения. И тогда вы сможете с этой точки измерить смещение., @Paul
Даже несмотря на то, что один из них беспроводной и, следовательно, будет использовать батарею: не могут ли ардуино просто непрерывно отправлять сообщения?, @Arjan