Arduino Mega с двумя Arduino Uno в качестве ведомых устройств по I2C?

Доброе утро! Это мой первый пост здесь, и я впервые погружаюсь в мир микроконтроллеров. Потерпите, пока я описываю этот теоретический проект.

У меня есть Arduino Mega 2560, две Arduino Uno, один акселерометр, два Wii Nunchucks (с адаптерами Nunchucky) и два 3-осевых джойстика. Мне интересно, как подключить/запрограммировать два Uno к Mega в качестве подчиненных устройств; к обоим будет подключен один нунчак и джойстик для управления набором сервоприводов/актуаторов, всего два набора сервоприводов/актуаторов. Акселерометр будет подключен напрямую к Mega и будет управлять третьим набором сервоприводов/актуаторов с помощью отслеживания положения головы (акселерометр, прикрепленный к гарнитуре).

Я читал все подряд, и первое, что мне нужно узнать, это как установить I2C между Mega и двумя Uno. Я нашел несколько схем, но не был уверен, что это лучший способ для моего приложения. После того, как I2C будет установлен, мне интересно узнать, как заставить акселерометры и потенциометры джойстика наиболее эффективно управлять сервоприводами и исполнительными механизмами. Мне также интересно, как программировать кнопки для воспроизведения предварительно запрограммированных последовательностей сервоприводов, но я забегаю вперед. Если кто-то интересуется этим проектом, он для большого аниматронного костюма. Любые советы приветствуются, и спасибо за чтение!

*редактировать: Я сделал набросок в Fritzing, чтобы дать вам представление о том, что я задумал. Не обращайте внимания на акселерометр слева — он появится позже, когда я займусь соленоидами.

, 👍0

Обсуждение

Добро пожаловать на StackExchange! Это очень обширный вопрос, или, по сути, серия вопросов. Вы можете прочитать [мою ветку об I2C](http://www.gammon.com.au/i2c) - но для остальных я предлагаю вам разбить ее на серию более конкретных вопросов. Ваш проект звучит осуществимым. Развлекайтесь!, @Nick Gammon

Это всего лишь мое мнение, но обычно я склонен создавать сети микроконтроллеров только в случае крайней необходимости. Это включает случаи, когда две или более частей должны общаться по беспроводной сети, или когда один uC слишком мал (обычно флэш, но иногда даже пины, даже если проще использовать расширители портов). Если вы хотите заставить их общаться для изучения того, как работают разные шины, хорошо, но если у вас есть проект в голове, лучше упаковать все в один arduino; если не хватает ресурсов, расширяйте, но обычно это не так ;), @frarugi87


3 ответа


1

Добро пожаловать в чудесный мир микроконтроллеров! Похоже, это будет захватывающий проект, и вы определенно многому научитесь!

Что касается подключения по I2C, вам нужно подключить несколько вещей:

  • SDA (строка «данных»)
  • SCK (линия «часов»)
  • GND (земля)

Для I2C (который также называется TWI для двухпроводного интерфейса) вы соединяете все подобные линии вместе. Это означает соединение всех выводов SDA (аналоговый вывод 4 [A4] на Unos, цифровой вывод 20 на Mega) и всех выводов SCK (аналоговый вывод 5 [A5] на Unos, цифровой вывод 21 на Megas). Я думаю, что схема отличается от этой. Я не могу прочитать фактические надписи на платах, потому что разрешение изображения недостаточно высокое. Вы также хотите соединить все выводы заземления вместе, что вы и сделали на своем рисунке.

Если вам нужен быстрый способ начать работу с I2C, используйте примеры скетчей в среде программирования Arduino. Откройте Arduino, затем перейдите в Файл > Примеры > Провода. В вашем случае я бы выбрал одно ведущее устройство и использовал два других как ведомые. Я бы попробовал использовать master_writer на Mega и slave_receiver на 2 Unos. Хорошей идеей было бы оставить все акселерометры, потенциометры и т. д. выключенными для начала. Просто пусть ведущее устройство посылает команду двум ведомым устройствам, и когда они ее получат, они могут зажечь свой встроенный светодиод:

digitalWrite(13, HIGH)

Еще одно замечание: в эскизе Fritzing показана батарея на 3,7 В, питающая Arduino, но им нужно 6–20 В, а лучше всего использовать 7–12 В. Я понимаю, что это может быть просто запасная батарея, которую вы подбросили для чертежа. На всякий случай я подумал, что стоит упомянуть об этом.

Как предложил Ник Гаммон выше, вы, вероятно, получите лучший ответ, разбив остальную часть вашего поста на отдельные вопросы. Удачи с вашим проектом! Звучит как забавный!

,

0

Во-первых, вам нужно немного изучить протокол I2C.

В нем есть пояснение по поводу чего-то под названием Адрес, а также кое-что еще об указании главного или подчиненного узлов.

Итак, вам необходимо протестировать некоторые моменты, прежде чем монтировать всю систему.

  • Проверьте основную связь I2C.
  • Проверьте первый подчиненный I2C с его адресом.
  • Проверьте второй подчиненный I2C с его адресом.
  • Проверьте взаимосвязь между тремя элементами (не забудьте установить подтягивающие резисторы в SDA и SCL!)

Надеюсь, это поможет

,

0

Чипы Arduino или AVR не используют протокол I2C, но технически альтернативный TWI = это не полный протокол I2C. Пожалуйста, не используйте внешние подтягивающие резисторы с SDA и SCL на Arduino, если вы не отключили внутренние подтягивающие резисторы. В Arduino IDE есть библиотека I2C/TWI, активированная с внутренними подтягивающими резисторами при начале передачи, и внутренние подтягивающие резисторы составляют 10-50 кОм. В чипах AVR подтягивающие резисторы интегрированы. TWI не устанавливает его как 100% открытый сток. Поскольку есть защитные фиксирующие диоды на VCC и GND. Если Arduino является ведомым устройством и у него выключено питание, это будет поддерживать SDA и SCL на низком уровне через диоды.

,