🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🔗 Проект: обмен данными между Arduino на большом расстоянии по RS485

Два модуля UR485

Конвертер UR485 превращает обычный UART Arduino в промышленный интерфейс RS485 — в отличие от прямого провода, такая линия устойчива к помехам и работает на десятки метров.

Как это работает

Как и CAN, RS485 — дифференциальная шина (данные передаются разницей напряжений на двух проводах A и B), что и даёт устойчивость к помехам на большие расстояния. Но, в отличие от CAN, у RS485 нет встроенного в протокол арбитража: это просто "общий провод", и если две платы одновременно начнут передавать, их сигналы столкнутся и данные на линии испортятся — RS485 half-duplex (попеременный, не одновременный приём/передача), поэтому в реальных сетях нужна либо строгая дисциплина "кто и когда говорит" (как опрос по очереди от главного узла), либо протокол поверх RS485 (например, Modbus), который сам решает эту задачу.

Модуль UR485 (на чипе типа MAX485) обычно включает автоматическое определение направления передачи по самому факту начала отправки данных — но на части более простых/дешёвых модулей направление нужно переключать вручную через пин DE (Driver Enable) непосредственно перед отправкой и возвращать обратно в режим приёма после неё.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. UR485: RX/TX → D2/D3 (через SoftwareSerial), VCC → 5V, GND → GND на обеих платах.
  2. A и B соединяют обе платы витой парой, не перепутав полярность (A к A, B к B на обоих концах).
  3. На длинных линиях (десятки метров) добавьте резистор-терминатор 120 Ом на каждом конце линии, как в проекте по CAN-шине.
  4. Прошейте одну плату с `isSender = true`, вторую — с `isSender = false`, и проверьте связь через Serial-монитор на плате-приёмнике.

Скетч (обе платы одинаковые, роль задаётся константой)

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.

#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: Электронные модули.

← 🚌 обмен данными между двумя Arduino по шине …🌐 проводная веб-метеостанция на Ethernet-мод… →

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA