Важно понимать, что в электронике, как и в любой другой сфере, нет «правильных» вариантов решения — вариантов ВСЕГДА несколько, выбирается тот вариант, который подходит вам по стоимости, наличию соответствующих комплектующих/оборудования/времени или, банально, доступности соответствующих пинов.
Иногда для создания проекта требуется использовать несколько плат Arduino. Это может быть связано с наличием большого количества датчиков, шаговых или серво-двигателей, экранов и других электронных устройств, либо распределенностью системы.
Возникает вопрос — каким образом связать их воедино, чтобы можно было передавать служебную информацию (команды) или данные, либо получать статус/данные с каждой из плат в некий единый центр?
Существует несколько шин(протоколов), которые можно реализовать на платах Arduino:
Все платы Arduino имеют, как минимум, один последовательный порт (UART или USART): Serial. Он связан с цифровыми выводами 0(RX) и 1(TX), а также используется для связи с ПК через USB. I2C или IIC (ай-ту-си, Inter-Integrated Circuit)— последовательная асимметричная шина. Использует две двунаправленные линии связи, связанные с выводами SDA и SCL. SPI ( Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (four-wire) интерфейсом.
Рассмотрим подробней перечисленные решения, приведем примеры, дадим комментарии, начнем с более нового решения, с шины I2C.
- Объединение устройств в сеть через I2C
- Пример реализации I2C(кликабельная ссылка)
- Объединение устройств в сеть через SPI
- Использование интерфейса UART
- Построение сетей со сложной структурой
- Урок 26.2 Соединяем две arduino по стандарту RS485
- Преимущества:
- Недостатки:
- Нам понадобится:
- Видео:
- Схема подключения:
- Код программы:
- Настройка параметров линии связи:
- Урок 26.5 Соединяем несколько arduino по радиоканалу через nRF24L01+
- Преимущества:
- Недостатки:
- Нам понадобится:
- Видео:
- Схема подключения:
- Алгоритм работы:
- 🌟 Видео
Видео:Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать
Объединение устройств в сеть через I2C
I2C/IIC (ай-ту-си, Inter-Integrated Circuit)— последовательная асимметричная шина. Использует две двунаправленные линии связи связанные с выводами SDA и SCL.
Для того, чтобы соединить несколько (больше двух) плат и/или устройств нам по сути нужен только i2c-hub и свободные порты SDA/SCL. По шине I2C можно соединить до 127 устройств, главное условие — каждое подключенное устройство должно иметь собственный уникальный адрес.
Пример реализации I2C(кликабельная ссылка)
Обратите внимание, что выводы, отвечающие за интерфейс I2C на платах Arduino, — отличаются для различных контроллеров.
На некоторых платах распаяны отдельные выводы SDA/SCL, эти выводы — дубли конкретных цифровых или аналоговых выводов.
Для Arduino UNO SDA/SCL — дубль выводов A4/A5, для Mega — D20/D21.
Видео:FLProg - Урок 17. Как подключить несколько датчиков ds18b20 к одной шинеСкачать
Объединение устройств в сеть через SPI
SPI ( Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (four-wire) интерфейсом.
- Отсутствие проводов между arduino.
- Высокая скорость передачи данных, до 2 Мб/с. Выше чем у шин I2C и UART.
- Полудуплексная связь. Режим работы модулей (приёмник / передатчик) можно менять в процессе их работы.
- Высокая помехозащищенность. Данные в пакетах принимаются с проверкой CRC.
- Контроль доставки данных. Приемник отправляет передатчику сигнал подтверждения приёма данных (без смены режима работы).
- Возможность выбора одного из 128 каналов связи. Шаг каждого канала равен 1 МГц (от 2,400 ГГц до 2,527 ГГц).
- Возможность одновременной работы до 6 передатчиков на одном канале.
Вместо радио-модулей можно использовать Arduino Ethernet Shield, который также использует шину SPI. Возможно есть и другие реализации, использующие SPI, пишите в коментариях — добавлю.
Использование интерфейса UART
Все платы Arduino имеют, по крайней мере, один последовательный порт (также известный как UART или USART): Serial. Он связан с цифровыми выводами 0 (RX) и 1 (TX), а также используется для связи с компьютером через USB.
У плат Arduino Mega / Arduino Due есть 4 UART интерфейса!
Основной и 3 дополнительных UART-интерфейса Arduino Mega и Arduino Due не загружают контроллер, так как они отделены от ядра; необходимо сконфигурировать порт и «запихать» данные в буфер, после чего операции передачи пойдут независимо от вас.
Читайте также: Кама 505 r16 зимние шины
По сути это nри дополнительных последовательных порта: Serial1 с выводами 19 (RX) и 18 (TX), Serial2 с выводами 17 (RX) и 16 (TX), Serial3 с выводами 15 (RX) и 14 (TX). При написании программы вы так и работаете с портами Serial1-Serial3 как с обычным Serial.
Смотрите подробней про работу с дополнительными интерфейсами Arduino Mega / Arduino Due тут или тут, тут с примерами.
Также существуют библиотеки (SoftwareSerial, AltSoftSerial и другие), которые позволяют реализовать последовательный интерфейс на любых цифровых выводах Arduino с помощью программных средств, дублирующих функциональность UART. Библиотеки позволяют программно создавать несколько последовательных портов, работающих на скорости до 115200 бод. Для устройств, работающих с инвертированным сигналом, в ряде библиотек предусмотрен соответствующий параметр, включающий инвертирование.
При помощи библотек, вы можете создать как минимум 1 (ОДИН) дополнительный UART-интерфейс на любой Arduino плате. На том же Arduino UNO у вас будет не один RX-TX интерфейс, а ДВА! На Arduino Mega как минимум 4 + 1 = 5 интерфейсов.
- HardwareSerial — Наилучшая производительность. Если возможно — всегда используйте аппаратные UART-порты! Teensy и Teensy++ имеют один доступный порт (не используемый для загрузки или в Мониторе порта Arduino IDE). У Arduino Mega есть 3 дополнительных порта (писали выше). У Arduino Uno нет отдельного (единственный доступный — одновременно используется для загрузки по USB и коммуникации с ПК).
- AltSoftSerial — данная библиотека может одновременно передавать и получать данные. Может одновременно работать с HardwareSerial и другими библиотеками. Использует 16-битный таймер (будет конфликтовать с другими библиотеками, использующими данный таймер) и отключает некоторые PWM-пины. Будьте внимательны при работе с другими библиотеками, использующими прерывания.
- SoftwareSerial (NewSoftSerial, вторая ссылка) — может использовать несколько пинов (несколько каналов передачи), но активным может быть только один. Не может одноверменно передавать и получать. Может мешать работе других библиотек или HardwareSerial, если используется с более низкой скоростью передачи. Будьте внимательны при работе с другими библиотеками, использующими прерывания.
- Old SoftwareSerial (SoftwareSerial для Arduino 0023 & более старые) — очень плохая производительность.
Будьте внимательны при отладке программы через Монитор Порта Arduino IDE (Arduino Serial Monitor). К примеру, Arduino UNO имеет единственный аппаратный порт, поэтому трансляция в консоль информационных (отладочных) сообщений с кодами команд может привести к их повторной отправке и выполнению на плате.
Видео:Подключение несколько DS18B20 на одну шину.Скачать
Построение сетей со сложной структурой
Для детального пронимания всего нишеизложенного вы можете изучить в сети курс «Сети ЭВМ», который даст понимание основ построения сетей из компьютеров, микрокомпьютеров и различных устройств, а также — используемых протоколов. Для понимающих, при соединении плат Arduino в сеть возможно построение следующих топологий сети: кольцо, общая шина, звезда, дерево, …
Видео:Подключение нескольких DS18B20 к ATmega8 на одну шинуСкачать
Урок 26.2 Соединяем две arduino по стандарту RS485
При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.
В этом уроке мы научимся соединять две arduino по стандарту RS485 через аппаратную шину UART.
Читайте также: Максимальная разрядность шины адреса равна
Преимущества:
- Простота реализации.
- Реализуется возможность подключения более двух arduino.
- Любая arduino на линии связи может работать ведущим и/или ведомым.
- Передача данных осуществляется на большие расстояния (длина линии связи до 1,2 км).
- Не требуется отключать модули от шины UART при загрузке скетча.
Недостатки:
- Связь осуществляется в полудуплексном режиме (одновременно может отправлять данные только одна arduino).
- Используется дополнительный цифровой вывод arduino, для управления конвертирующим модулем.
Нам понадобится:
- Arduino х 2шт.
- LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 2шт.
- Trema Shield х 2шт.
- Эластичная клавиатура 4×4 х 2шт.
- Шлейф «мама-мама» (4 провода) для шины I2С х 2шт.
- Витая пара «мама-мама» (2 провода) — линия связи x 1шт.
- Конвертирующий модуль на базе чипа MAX485 х 2шт.
Для реализации проекта нам необходимо установить библиотеки:
- Библиотека iarduino_KB (для подключения матричных клавиатур).
- Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .
Видео:
Схема подключения:
Подключение LCD дисплея осуществляется к аппаратным выводам шины I2C.
Клавиатура подключается к любым цифровым выводам, в примере используются выводы 2-9.
Конвертирующий модуль подключается к шине UART:
На рисунке приведён пример подключения двух и более устройств.
Схемы устройства-1, устройства-2, . — идентичны.
Все конвертирующие модули на линии соединяются одноименными выводами: «A» с «A», «B» с «B».
Код программы:
Настройка параметров линии связи:
Конвертирующий модуль только преобразует сигналы TTL в стандарт RS485 и обратно. Параметры линии: скорость передачи данных, количество бит в минимальной посылке, длина стопового бита, проверка на чётность/нечётность, зависят от настроек шины UART, см. раздел «Настройка параметров шины UART» в уроке 26.1.
Настройки шины UART всех arduino подключённых к линии должны быть идентичны!
Видео:Передача данных - шина SPIСкачать
Урок 26.5 Соединяем несколько arduino по радиоканалу через nRF24L01+
При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.
В этом уроке мы научимся соединять несколько arduino по радиоканалу ISM диапазона, используя радио модуль nRF24L01+, на расстоянии до 100 м. Если использовать радио модули NRF24L01+PA+LNA, то расстояние между arduino можно увеличить до 1 км, не меняя код скетча.
Преимущества:
- Отсутствие проводов между arduino.
- Высокая скорость передачи данных, до 2 Мб/с. Выше чем у шин I2C и UART.
- Полудуплексная связь. Режим работы модулей (приёмник / передатчик) можно менять в процессе их работы.
- Высокая помехозащищенность. Данные в пакетах принимаются с проверкой CRC.
- Контроль доставки данных. Приемник отправляет передатчику сигнал подтверждения приёма данных (без смены режима работы).
- Возможность выбора одного из 128 каналов связи. Шаг каждого канала равен 1 МГц (от 2,400 ГГц до 2,527 ГГц).
- Возможность одновременной работы до 6 передатчиков на одном канале.
Недостатки:
- Модули nRF24L01+ работают в радиочастотном диапазоне ISM (Industrial, Scientific, Medical) 2,4 ГГц, на котором работают WiFi, Bluetooth и другие устройства, например радио телефоны и даже СВЧ печи. Эти устройства могут «глушить» некоторые каналы данного диапазона. Поэтому вблизи таких устройств дальность связи между модулями, на некоторых каналах, резко уменьшается. Увеличить дальность можно сменив канал связи на любой из 128 доступных модулям nRF24L01+.
- При выборе скорости 2 Мб/с, задействуются сразу два канала (выбранный и следующий за ним).
- Модули питаются от напряжения 3,3 В постоянного тока. Но их можно запитать от 5 В через адаптер nRF24L01+.
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
- Библиотека RF24 (для работы с радио модулями nRF24L01+).
- Библиотека iarduino_4LED, (для работы с Trema четырехразрядным LED индикатором).
- Библиотеки SPI и Servo входят в стандартный набор Arduino IDE.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .
Видео:
Схема подключения:
Все радио модули nFR24L01+ подключены, через адаптер, к аппаратной шине SPI. Trema четырехразрядный LED индикатор подключён к цифровым выводам D2 и D3 (можно подключить к любым выводам Arduino). Сервопривод подключён к цифровому выводу D4 (можно подключить к любым выводам). Trema потенциометр и слайдер подключены к аналоговым входам A0 (можно подключить к любым аналоговым входам). Питание адаптера nFR24L01+ взято с контактов GND и Vcc (5 В).
Если Вы будете подключать модуль nFR24L01+ без адаптера, то модуль требуется запитать от напряжения 3,3 В постоянного тока.
Адаптер nRF24L01+ | Arduino Uno | Назначение |
---|---|---|
CE / SS | 9 (меняется в скетче) | Шина SPI — выбор устройства |
CSN | 10 (меняется в скетче) | Выбор режима: приёмник / передатчик |
SСK | 13 (SCK) | Шина SPI — линия тактирования |
MO | 11 (MOSI) | Шина SPI — линия данных (от мастера к ведомому) |
MI | 12 (MISO) | Шина SPI — линия данных (от ведомого к мастеру) |
IRQ | Не используется | Прерывание |
Алгоритм работы:
Передатчики:
Скетчи обоих передатчиков идентичны, за исключением значения идентификатора трубы, которое должно быть уникальным для каждого передатчика, работающего на одном канале.
При старте (в коде setup) скетч настраивает работу радио модуля в режим передачи данных, указывая номер канала, скорость передачи, мощность передачи и идентификатор трубы.
Далее, каждый передатчик постоянно (в коде loop), считывает показания с аналогового входа A0 в 0 элемент массива data и отправляет этот массив радио модулю для передачи. Код loop выполняется с задержкой в 50 мс, этого времени достаточно для того что бы приемник успел принять и обработать данные другого передатчика.
Приёмник:
При старте (в коде setup) скетч настраивает работу радио модуля в режим приёма данных, указывая те же данные, что и у обоих передатчиков: номер канала, скорость передачи данных, мощность передачи. Но, в отличии от передатчиков, создаёт (открывает) не одну, а две трубы для приёма данных, указывая 1 трубе идентификатор 1 передатчика, а 2 трубе идентификатор 2 передатчика.
Далее приёмник инициирует работу с LED индикатором и сервоприводом. После чего, постоянно (в коде loop), проверяет нет ли в буфере данных, принятых радио модулем. Если данные есть, то они читаются в массив data, а в переменную pipe читается номер трубы, по которой эти данные пришли, таким образом определяя от какого передатчика приняты данные.
- Если данные приняты от передатчика №1, то значение 0 элемента массива data (показания Trema потенциометра) преобразуются в градусы и используется для поворота сервопривода.
- Если данные приняты от передатчика №2, то значение 0 элемента массива data (показания Trema слайдера) выводятся на LED индикатор.
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
🌟 Видео
Подключение нескольких устройств по шине i2cСкачать
Введение в шину I2CСкачать
Как подключить несколько I²C с одинаковыми адресами. Железки АмперкиСкачать
Arduino I2C связь между контроллерамиСкачать
Подключить несколько устройств к Ардуино по шине SPIСкачать
Arduino CAN Sender ( Ардуино отправка пакетов в КАН шину)Скачать
I2C мультиплексор TCA9548A или как подключить несколько часов к Arduino?Скачать
Подключение нескольких датчиков температуры DS18B20 к ArduinoСкачать
Трансиверы CAN шины TJA1050, MCP2551 как альтернатива RS485Скачать
I2C хаб — как подключить одинаковые I²C модули к одной шине. Управляем IMU, матрицами, NFC и RTC.Скачать
Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)Скачать
Урок 26.3 Соединяем две arduino по шине I2C #iarduinoСкачать
Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 1Скачать
Урок 26.1 Соединяем две arduino по шине UARTСкачать
MCP2515, контроллер CAN шины с интерфейсом SPIСкачать