Способ последовательного взаимодействия с многосетевой подчиненной сетью Arduino.
У меня есть один ПК с запущенной Visual Studio и программой, которая будет отправлять команды Arduinos через последовательные COM-порты. Таким образом, в 11 Nano MCU у меня будут драйверы двигателей L293D/L298N IC, а в других Nanos у меня будут датчики.
Я хотел бы иметь программу в Visual Studio, которая отправляет команды через последовательный порт для приведения в действие двигателей для каждого микроконтроллера на борту. Это роботизированное приложение, и все, что я упомянул выше, будет заключено в Humanoid.
Вот несколько примеров того, что я думаю сделать:
char data = Serial.read();
if (data == 'A')
{
digitalWrite(13, HIGH);
}
Или что-то вроде этого:
servodata = Serial.read();
if (servodata == '1') // Одинарная кавычка! Это символ.
{
SERVO.write(pos);
}
Как вы можете видеть, Arduinos будет иметь что-то вроде этого, работающее и ожидающее, пока Visual Studio отправит команды через последовательный интерфейс на один или несколько микроконтроллеров одновременно. Я думаю, 30 символов, разделяющих/распределяющих это число по каждому Rx Arduino.
р>@Frank, 👍0
Обсуждение2 ответа
Не совсем понятно, какой именно запрос, но отвечая на вопрос в теме письма:
Вы можете легко подключить несколько последовательных / RS232 COM-портов, имея все подчиненные входы RX и главный выход TX на одной линии, и все подчиненные выходы TX подключены сетью OR к одной линии к главному входу RX. Главный «общается» со всеми подчиненными одновременно. Каждый подчиненный общается только с главным. Только один подчиненный может полезно общаться одновременно. Назначение назначения сообщения и арбитраж подчиненного разговора выполняются программно.
Как показано ниже, сеть OR на каждом подчиненном устройстве может быть такой же простой, как диод с катодом (сторона стержня) к линии TX и анодом к общей линии к главному RX. Один подтягивающий резистор (или внутренний подтягивающий резистор в главном устройстве на линии RX) подтягивает линию к высокому уровню, когда все подчиненные линии TX имеют высокий уровень.
Эта диаграмма показывает, насколько простой может быть многоточечная связь.
Примечание. Как показано, полярность диодов соответствует истинному RS232 с логической 1 = низкий = отрицательный.
При прямом подключении выходов UART TTL уровня (5 В/0 В) поменяйте местами диоды.
Кроме того, добавьте подтягивающее сопротивление от +5 В к синей линии RX к главному устройству — 10 кОм к 5 В, вероятно, будет достаточно.
Отсюда - Многоточечная сеть для RS232.
Когда вывод ведомого TX имеет высокий уровень, его диод «заблокирован», и он не влияет на общий уровень ведомого устройства и ведущего. Когда любая линия ведомого TX имеет низкий уровень, общая линия через свой диод подтягивается к низкому уровню, и ведущий видит низкий уровень. Обычные RS232 COM могут возникать между ведомым и ведущим.
Когда мастер отправляет, все подчиненные видят передачу одновременно. Должен быть установлен базовый протокол, позволяющий обрабатывать сообщения предполагаемому получателю. Это может состоять, например, из отправки адресного слова + командного слова или слов. Вы можете иметь одно подчиненное устройство, действующее на сообщение, или все подчиненные, или закат, в зависимости от вашей системы адресации.
Направление «от подчиненного устройства к главному» позволяет отправлять данные только одному подчиненному устройству, и необходимо гарантировать, что одновременно отправляет данные только одно подчиненное устройство и/или что конфликты можно разрешить.
Несмотря на очевидные ограничения такой системы, она может работать очень хорошо, дешева и проста в реализации. Если есть много подчиненных устройств, нагрузки должны быть проверены, например, чтобы главный TX мог управлять всеми подчиненными RX одновременно. Поскольку схема однонаправленная, легко добавить базовый буфер.
немного смутно для новичка, чтобы понять некоторые из ваших технических разговоров, но я пытаюсь здесь, @Frank
@Frank'sDesig'Nature - Посмотрите на схему выше. Поменяйте направления диодов, так как вы используете 0 В/5 В, а не настоящий RS232. Добавьте 10 кОм от Master RX (синяя линия) к =%V. Попробуйте. Когда Master управляет линией TX, все подчиненные RX видят данные. Когда любой подчиненный передает данные, главный видит данные, но ни один подчиненный не видит., @Russell McMahon
есть ли причина, по которой я не могу просто использовать один из этих портов расширения USB 3.0 5 Гбит/с? Я, мужик, использую 2 порта USB, как сейчас, из расширения из 4 USB, все подключены к одному USB в моем планшете, и оттуда я открываю 2 терминала, когда отлаживаю Tx и Rx с 2 разных Arduino без проблем. ТАК почему я должен использовать этот формат? А не способ USB? Кажется, это просто работа для передачи/приема данных, когда IDE уже делает это без лишней ерунды, о которой мы говорили?, @Frank
[ссылка]http://www.ebay.com/itm/111717351068, @Frank
RS-485 или RS-422 — это обычные промышленные способы, позволяющие одному последовательному порту общаться со многими устройствами, особенно в шумных условиях с большим количеством двигателей. Для получения правильного электрического интерфейса требуется микросхема драйвера для каждого устройства.
RS-485 обеспечивает двунаправленную связь, если вы хотите получать данные обратно от удаленных узлов, а RS-422 обеспечивает «симплексную» или однонаправленную связь, если вы просто хотите слепо отправлять команды без какой-либо обратной связи.
Что касается программного обеспечения, то, вероятно, проще всего будет воспользоваться моей библиотекой ICSC — она позволяет обращаться к отдельным устройствам на шине RS422 или RS485 и отправлять им команды.
@Russell McMahon спасибо за подробное объяснение, несмотря на безумные опечатки, я достаточно хорошо понял, хотя, я думаю, у вас сложилось впечатление, что подчиненные устройства Arduino будут передавать что угодно обратно главному «компьютеру, выполняющему всю передачу», просто хочу прояснить это, потому что вы много говорите о подчиненных устройствах, которые обмениваются данными с чем угодно, когда этого не происходит, подчиненные устройства только и делают, что управляют двигателями, и ничего больше, у них запущен скетч, который ищет параметр для последовательного вызова с использованием длинного списка операторов break/switch., @Frank
Это тот тип команд, который я люблю отправлять каждому подчиненному устройству. Serial.println('LT2|LP3|LM5|LR4|LI6'); или 'LT2|LP3|LM5|LR4|LI6' Я хочу отправить этот тип блока каждому отдельному подчиненному устройству, но имейте в виду, что приведенный выше блок предназначен только для активации этого подчиненного устройства и его скорости, за ним последует дополнительный блок с указанием направления., @Frank
нравится это, ребята? , @Frank
И если так, то, полагаю, мой следующий вопрос будет таким: если все привязано к общему стилю, как ПК узнает, кому что отправлять? если отправить «LT2|LP3|LM5|LR4|LI6» и я хочу, чтобы это было для одной конкретной Arduino, я не хочу, чтобы все Arduino принимали эти параметры В этом примере блока «LT2|LP3|LM5|LR4|LI6» LT2 идет следующим образом (L — это микроконтроллер, в то время как T = выводу на этом микроконтроллере (вывод D7 и т. д.), а 2 — это скорость, также известная как задержка (2)); ) Итак, как вы видите, все остальные Arduino, которые не являются «L», не будут использовать эти данные в последовательном порту? как будет осуществляться адресация?, @Frank
Вопрос о том, как заставить определенную плату Arduino реагировать на определенную команду, также задается автором здесь: [Как мне получить уникальный адрес для всех моих плат Arduino, находясь в RS485?](http://arduinoprosto.ru/q/14791/how-can-i-get-a-unique-address-for-all-my-arduino-boards-while-in-rs485), @Nick Gammon
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Чтение SMS с помощью Arduino Uno и SIM800L и печать на LCD (16x2 буквенно-цифровых) с использованием последовательного соединения
- Как работает последовательная связь на Arduino?
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
Отвечает ли мой ответ на то, что вы хотели узнать?, @Russell McMahon