
Интернет-магазин «Неглупый Дом»
Конвертер UR485 превращает обычный UART Arduino в промышленный интерфейс RS485 — в отличие от прямого провода, такая линия устойчива к помехам и работает на десятки метров.
Как и CAN, RS485 — дифференциальная шина (данные передаются разницей напряжений на двух проводах A и B), что и даёт устойчивость к помехам на большие расстояния. Но, в отличие от CAN, у RS485 нет встроенного в протокол арбитража: это просто "общий провод", и если две платы одновременно начнут передавать, их сигналы столкнутся и данные на линии испортятся — RS485 half-duplex (попеременный, не одновременный приём/передача), поэтому в реальных сетях нужна либо строгая дисциплина "кто и когда говорит" (как опрос по очереди от главного узла), либо протокол поверх RS485 (например, Modbus), который сам решает эту задачу.
Модуль UR485 (на чипе типа MAX485) обычно включает автоматическое определение направления передачи по самому факту начала отправки данных — но на части более простых/дешёвых модулей направление нужно переключать вручную через пин DE (Driver Enable) непосредственно перед отправкой и возвращать обратно в режим приёма после неё.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.
#include <SoftwareSerial.h>
SoftwareSerial rs485(2, 3); // RX, TX
const bool isSender = true; // на второй плате поставьте false
void setup() {
rs485.begin(9600);
Serial.begin(9600);
Serial.println(isSender ? "Режим: отправитель" : "Режим: приёмник");
}
void loop() {
if (isSender) {
rs485.println("Hello from node A");
delay(1000);
} else {
if (rs485.available()) {
String msg = rs485.readStringUntil('\n');
Serial.println(msg);
}
}
}
Модуль UR485 на большинстве плат сам определяет направление передачи — если ваша версия требует ручного переключения приём/передача, добавьте управление DE-пином через `digitalWrite()` перед каждой отправкой.
Ещё модули для Arduino: Электронные модули.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.