Skip to main content

Протоколы связи. Как электроника разговаривает

Представьте команду людей из разных стран. Чтобы работать вместе, им нужен общий язык. В роботе так же: процессор, датчики, моторы должны “разговаривать” на понятном всем языке. Эти языки называются протоколами связи.

Почему не просто провода?

Если подключить датчик напрямую к контроллеру, получится:

  • Контроллер говорит: “Дай температуру”
  • Датчик отвечает: “25” (но это вольты? градусы? непонятно)

Протокол — это правила:

  • Когда говорить (по расписанию или когда спросят)
  • В каком формате (число, текст, код)
  • Как понять ошибки (если сигнал испортился)

Основные протоколы (от простого к сложному)

1. UART (Serial) — самый простой

Как работает: Как два человека разговаривают по телефону.

  • Один говорит, другой слушает
  • Потом меняются

Провода:

  • TX (Transmit) — отправитель → получатель
  • RX (Receive) — получатель ← отправитель
  • GND (Ground) — общая “земля”

Плюсы:

  • Очень просто (в Arduino: Serial.begin(9600);)
  • Подходит для связи Arduino ↔ Компьютер

Минусы:

  • Только между двумя устройствами
  • Недалеко (пару метров)

Пример в коде:

// Arduino отправляет данные
Serial.println("Температура: 25C");

// Компьютер получает в мониторе порта:
// Температура: 25C

2. I2C — для многих устройств

Как работает: Как школьный урок.

  • Учитель (Master) спрашивает: “Вася, какая температура?”
  • Вася (Slave 1) отвечает: “25”
  • Учитель: “Петя, какое давление?”
  • Петя (Slave 2) отвечает: “760”

Провода:

  • SDA (Data) — данные
  • SCL (Clock) — тактовый сигнал (когда читать данные)
  • Плюс питание и земля

Плюсы:

  • Много устройств на двух проводах (до 128!)
  • Стандарт для датчиков (температура, давление, IMU)

Минусы:

  • Не очень быстро
  • Недалеко (внутри робота)

Пример подключения:

Arduino (Master)
   ├─ SDA → Датчик температуры
   ├─ SCL → Датчик давления  
   └─ GND → Оба датчика

3. SPI — самый быстрый

Как работает: Как конвейер на заводе.

  • Начальник дает команду всем сразу
  • Каждый рабочий делает свою часть
  • Результаты собираются быстро

Провода:

  • MOSI (Master Out Slave In) — команды от главного
  • MISO (Master In Slave Out) — ответы от устройств
  • SCK (Clock) — общий такт
  • SS/CS (Chip Select) — выбор конкретного устройства

Плюсы:

  • Очень быстро (в 10-100 раз быстрее I2C)
  • Надежно

Минусы:

  • Много проводов (4 + на каждое устройство)
  • Сложнее программировать

Где используется:

  • SD-карты
  • Дисплеи
  • Быстрые датчики

4. CAN Bus — для надежных роботов

Как работает: Как совещание в компании.

  • Любой может начать говорить, если линия свободна
  • Все слышат всех
  • Если двое начали одновременно — решает приоритет

Плюсы:

  • Очень надежный (используется в машинах, самолетах)
  • На большие расстояния (до 1 км)
  • Много устройств (до 110)

Минусы:

  • Сложнее
  • Нужны специальные модули (CAN-шина)

Где используется:

  • Большие роботы (как Boston Dynamics)
  • Автономные автомобили
  • Промышленные системы

Как выбрать протокол для школьного проекта?

Для начинающих (первый робот):

Проект: Робот, едущий по линии
Что нужно: 2 мотора, 3-5 ИК-датчиков
Выбор: 
• Датчики → Аналоговые пины Arduino (самый простой)
• Если датчиков много → I2C (мультиплексор)
• Связь с компьютером → UART (Serial)

Для продвинутых (сложный робот):

Проект: Робот-исследователь с камерой
Что нужно: Камера (Raspberry Pi), датчики (Arduino), моторы
Выбор:
• Raspberry Pi ↔ Arduino → UART
• Датчики на Arduino → I2C/SPI
• Управление с телефона → Bluetooth/Wi-Fi

Сравнительная таблица:

ПротоколМакс. скоростьМакс. расстояниеУстройствСложностьДля чего
UART115 кбит/с10-20 м2★☆☆☆☆Arduino ↔ Компьютер
I2C400 кбит/с1-2 м128★★☆☆☆Датчики (T, P, IMU)
SPI10+ Мбит/с0.5-1 м10+★★★☆☆Дисплеи, SD-карты
CAN1 Мбит/с1000 м110★★★★☆Большие роботы, авто
Wi-Fi100+ Мбит/с50 мМного★★☆☆☆Видео, управление

Практические примеры

Пример 1: Метеостанция на Arduino

Датчики:
• DHT22 (температура/влажность) → Цифровой пин
• BMP280 (давление) → I2C
• Датчик света → Аналоговый пин

Связь:
• Arduino → Компьютер: UART (вывод в Serial Monitor)
• Можно добавить ESP8266 → Wi-Fi → Интернет

Пример 2: Робот с камерой и манипулятором

Архитектура:
• Raspberry Pi (камера, ИИ) 
  ↔ ESP32 (Wi-Fi, управление)
    ↔ Arduino 1 (манипулятор, I2C сервоприводы)
    ↔ Arduino 2 (шасси, моторы, UART)

Протоколы:
• RPi ↔ ESP32: Wi-Fi (TCP/IP)
• ESP32 ↔ Arduino: UART
• Arduino ↔ сервоприводы: PWM (не протокол, но управление)

Частые проблемы и решения

Проблема 1: “Датчик не отвечает”

Возможные причины:
1. Не те провода (перепутаны SDA/SCL в I2C)
2. Разная земля (GND не соединены)
3. Слишком длинные провода (для I2C > 20 см)

Проблема 2: “Помехи и случайные значения”

Решение:
1. Добавить конденсаторы между питанием и землей
2. Использовать витую пару (для длинных линий)
3. Для I2C — подтягивающие резисторы (4.7 кОм)

Проблема 3: “Всё работает, но медленно”

Для I2C:
• Проверить скорость (стандартная 100 кГц, быстрая 400 кГц)
• Не читать лишние данные

Для UART:
• Увеличить скорость (9600 → 115200 бод)
• Отправлять меньше данных

Эксперимент для понимания

Что нужно: 2 Arduino (или Arduino + компьютер)

Что делать:

  1. Соедините их по UART (TX ↔ RX, RX ↔ TX, GND ↔ GND)
  2. На первом Arduino:
    void setup() { Serial.begin(9600); }
    void loop() { 
      Serial.println("Hello");
      delay(1000);
    }
    
  3. На втором Arduino/компьютере откройте Serial Monitor
  4. Вы увидите “Hello” каждую секунду

Вывод: Вы настроили самый простой протокол связи!


Проверь себя

Смогу ли я:

  1. Объяснить разницу между UART и I2C?
  2. Выбрать протокол для подключения 5 датчиков к Arduino?
  3. Подключить дисплей к Arduino через SPI?
  4. Объяснить, почему в машинах используют CAN, а не I2C?

Если на все вопросы можете ответить — вы понимаете, как электроника общается!


Что дальше?

Разобрались с протоколами? Теперь можно:

Совет: Начните с UART (самого простого). Сделайте обмен данными между двумя Arduino. Потом попробуйте I2C с простым датчиком (например, BMP280). Только потом переходите к SPI и более сложным протоколам.