ГлавнаяАкадемияМонтаж и пусконаладка контроллера → Подключение датчиков температуры (1-Wire)

Подключение датчиков температуры (1-Wire)

Урок 2 · Монтаж и пусконаладка контроллера · 15 мин · theory

Теоретические основы: протокол 1-Wire и датчики DS18B20

Протокол 1-Wire — это технология последовательной шины данных, разработанная компанией Dallas Semiconductor (в настоящее время Maxim Integrated), которая позволяет осуществлять обмен данными и, в некоторых случаях, передавать питание по одному единственному проводнику (плюс общий провод GND). Эта особенность делает протокол чрезвычайно удобным для построения распределенных сетей датчиков на объектах, где прокладка большого количества кабелей нежелательна или затруднена.

> 💡 Подсказка: Для стабильной работы шины 1-Wire на длинах более 20 метров рекомендуется использовать кабель типа "витая пара" (UTP/FTP) и выделенную пару для питания и данных. Экран кабеля следует заземлять только со стороны контроллера для защиты от электромагнитных помех.

Принцип работы протокола

Ключевая идея 1-Wire заключается в том, что все устройства на шине (Master, то есть контроллер, и Slaves, то есть датчики) подключаются параллельно к одной линии данных (DQ). Контроллер управляет состоянием линии, притягивая ее к низкому уровню (логический '0') или отпуская, позволяя подтягивающему резистору вернуть ее к высокому уровню (логическая '1'). Каждый датчик на шине имеет уникальный, неизменяемый 64-битный адрес, который используется для индивидуального обращения к нему.

Обзор цифрового датчика DS18B20

Самым распространенным устройством на шине 1-Wire является цифровой датчик температуры DS18B20. Он завоевал популярность благодаря своей точности, простоте использования и низкой стоимости.

📋 Ключевые понятия:

Топологии шины

Правильный выбор топологии является залогом стабильной работы сети 1-Wire.

| Топология | Описание | Преимущества | Недостатки |

| ------------------------ | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |

| Линейная шина (Bus) | Все датчики подключаются последовательно к одному магистральному кабелю с короткими отводами (не более 3м). | Высокая надежность, предсказуемое поведение сигнала, максимальная длина шины. | Менее гибкая в монтаже, требует прокладки единой магистрали. |

| Звезда (Star) | Все датчики подключаются к одной центральной точке (например, клеммная колодка), расходясь лучами. | Удобство монтажа, особенно когда датчики расположены в разных направлениях от щита. | Не рекомендуется. Создает отражения сигнала, резко снижает максимальную длину и стабильность шины. |

Для профессиональных инсталляций настоятельно рекомендуется использовать линейную топологию.

Ограничения протокола

При проектировании системы необходимо учитывать следующие ограничения:

---

Практика: Физическое подключение датчиков к контроллеру HI

Правильное физическое подключение — это 90% успеха при работе с датчиками 1-Wire. Контроллер HI предоставляет специализированные клеммы на блоке универсальных входов для удобного и надежного монтажа.

> ⚠️ Внимание: Неправильное подключение питания (переполюсовка) к датчику DS18B20 может привести к его немедленному выходу из строя. Всегда проверяйте полярность и соответствие цветов проводников схеме перед подачей питания на контроллер.

Идентификация клемм на контроллере HI

Датчики DS18B20 обычно поставляются в двух вариантах: в виде транзистора TO-92 или в герметичной гильзе с тремя выводами. Цветовая маркировка выводов у датчиков в гильзе стандартизирована:

На блоке универсальных входов контроллера HI найдите группу клемм, предназначенную для 1-Wire, которая обычно маркируется как `GND`, `DQ`, `VDD`.

Схема подключения с использованием внешнего питания (Normal Power Mode)

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

               [CTRL:HI-Core]                (SENS:Temp:DS18B20-01)

(1-Wire Port)

Клемма Цвет провода Вывод датчика

VDD (+3.3V) ------ (Красный) -------------------- VDD

DQ ---------- (Желтый) -------------------- DQ

GND ---------- (Черный) -------------------- GND

(SENS:Temp:DS18B20-02)

/

VDD (+3.3V) ------ (Красный) ------------------ VDD

DQ ---------- (Желтый) ------------------ DQ

GND ---------- (Черный) ------------------ GND

Все датчики на шине подключаются параллельно: все красные провода к VDD, все желтые к DQ, все черные к GND.

Схема подключения с использованием паразитного питания (Parasitic Power Mode)

Этот режим позволяет датчику получать питание непосредственно от линии данных DQ, что дает возможность использовать только два провода (DQ и GND).

> ℹ️ Информация: Режим паразитного питания подходит только для очень коротких линий (до 5-10 метров) с 1-2 датчиками. Он более требователен к программной реализации и менее стабилен, поэтому его использование в коммерческих объектах не рекомендуется.

Для подключения в этом режиме и вывод VDD, и вывод GND датчика подключаются к клемме GND контроллера.

               [CTRL:HI-Core]                (SENS:Temp:DS18B20)

(1-Wire Port)

Клемма Цвет провода Вывод датчика

DQ ---------- (Желтый) -------------------- DQ

GND ---------- (Черный) -------------------- GND

(Красный) -------------------- VDD (также на GND)

Использование подтягивающего резистора (pull-up resistor)

Для корректной работы шины 1-Wire линия данных DQ должна быть "подтянута" к линии питания через резистор. Этот подтягивающий резистор обеспечивает высокий логический уровень на шине, когда ни одно из устройств не передает данные. Типичный номинал резистора — 4.7 кОм.

Хорошая новость заключается в том, что инженеру не нужно беспокоиться о его установке. Контроллер HI имеет встроенный, программно управляемый подтягивающий резистор. При активации интерфейса 1-Wire в настройках контроллера он включается автоматически. Это значительно упрощает монтаж и исключает класс ошибок, связанных с неправильным выбором или отсутствием pull-up резистора.

---

Практика: Настройка шины 1-Wire в веб-интерфейсе контроллера

После физического подключения датчиков необходимо настроить контроллер для работы с ними. Этот процесс выполняется через веб-интерфейс и заключается в активации интерфейса и сканировании шины для обнаружения устройств.

> 🔗 Связанный материал: Подробное описание универсальных входов/выходов (GPIO) и их назначения, а также основы работы с веб-интерфейсом контроллера рассмотрены в уроке `COURSE-03-M05-L01 "Обзор универсальных входов контроллера"`.

Пошаговая процедура настройки

  • Доступ к веб-интерфейсу: Откройте браузер и введите IP-адрес вашего контроллера HI. Авторизуйтесь с учетными данными инсталлятора.
  • Переход в раздел конфигурации: В главном меню навигации выберите `Настройки системы` (System Settings), а затем перейдите во вкладку `Аппаратная конфигурация` (Hardware Configuration).
  • Активация интерфейса 1-Wire: В списке доступных периферийных интерфейсов найдите `1-Wire Bus`. Система предложит вам выбрать, на каком из универсальных портов (GPIO) вы хотите активировать данную шину. Выберите номер порта, к которому вы физически подключили линию данных `DQ` от ваших датчиков. Сохраните изменения. Контроллер применит настройки, активировав внутренний подтягивающий резистор на выбранном порту.
  • Сканирование шины: После активации интерфейса на той же странице появится новый раздел, посвященный управлению шиной 1-Wire. Найдите и нажмите кнопку `Сканировать шину` (Scan Bus) или `Найти устройства` (Discover Devices).
  • Просмотр списка обнаруженных устройств: Контроллер инициирует процедуру поиска на шине. Этот процесс может занять от нескольких секунд до минуты, в зависимости от количества подключенных датчиков. По завершении на экране появится таблица со списком всех обнаруженных устройств.
  • Пример таблицы обнаруженных устройств:

    | ROM ID (Уникальный адрес) | Тип устройства | Статус | Псевдоним (Alias) |

    | ------------------------- | -------------- | ------- | ------------------ |

    | `28-00000FB34CD1` | DS18B20 | `OK` | `Не назначено` |

    | `28-00000FA98765` | DS18B20 | `OK` | `Не назначено` |

    | `28-00000FC21EF0` | DS18B20 | `Error` | `Не назначено` |

    В этой таблице вы видите уникальные ROM ID каждого датчика. На этом этапе крайне важно составить карту соответствия, записав, какой ID какому физическому датчику на объекте принадлежит (например, «`28-00000FB34CD1` — это датчик температуры в спальне №1»). Эта карта станет основой для дальнейшей настройки в Node-RED. Статус `Error` может указывать на плохое соединение или неисправность датчика.

    ---

    Пример: Получение и обработка данных от датчиков в Node-RED

    После того как контроллер "увидел" датчики, финальный шаг — это получение и использование их показаний в логике автоматизации. На платформе HI это делается с помощью среды визуального программирования Node-RED.

    Наш контроллер поставляется со специальной палитрой узлов, упрощающих взаимодействие с аппаратной частью. Для работы с 1-Wire используется узел `hi-1wire-in`.

    Использование узла `hi-1wire-in`

    Этот узел автоматически и с заданной периодичностью опрашивает все обнаруженные на шине 1-Wire датчики и отправляет их показания в виде отдельных сообщений (`msg`) в поток Node-RED. Вам не нужно вручную инициировать чтение каждого датчика.

    Структура объекта `msg`

    Понимание структуры сообщения является ключом к работе с данными. Узел `hi-1wire-in` формирует сообщения в соответствии со стандартным контрактом сообщений нашей платформы.

    `"1wire/28-00000FA98765"`
        {
    

    "value": 23.75,

    "unit": "°C",

    "ts": 1678886400000,

    "source": "28-00000FA98765"

    }

    * `value`: Непосредственно измеренное значение температуры.

    * `unit`: Единица измерения.

    * `ts`: Временная метка (timestamp) в формате Unix epoch (ms), когда было произведено измерение.

    * `source`: Дублирует ROM ID датчика для удобства обработки.

    Пример потока Node-RED

    Задача: Считывать показания со всех датчиков 1-Wire, преобразовывать их ROM ID в понятное имя и выводить результат в панель отладки. Схема потока (ASCII):
    // Flow: Чтение датчиков температуры 1-Wire
    

    // ID: FLOW-TEMP-READ-001

    [hi-1wire-in] ----> [Function: Map ID to Name] ----> [Debug]

  • `hi-1wire-in` (Чтение 1-Wire): Просто добавьте этот узел на холст. Он не требует дополнительной настройки и начнет работать автоматически.
  • `Function` (Map ID to Name): Этот узел будет выполнять роль "переводчика" с машинного языка ROM ID на человеческий.
  • * Код для узла `Function`:

        // Карта соответствия ROM ID и физического расположения датчиков.

    // Эту карту необходимо заполнить на этапе пусконаладки!

    const sensorMap = {

    "28-00000FB34CD1": "Гостиная",

    "28-00000FA98765": "Спальня",

    "28-00000FC21EF0": "Улица (север)"

    };

    // Получаем ROM ID из топика сообщения

    const romId = msg.topic.split('/')[1];

    // Находим понятное имя в нашей карте

    const locationName = sensorMap[romId];

    // Если имя найдено, добавляем его в payload.

    // Если датчик не найден в карте, присваиваем ему имя "Неизвестный датчик".

    if (locationName) {

    msg.payload.location = locationName;

    } else {

    msg.payload.location = "Неизвестный датчик";

    }

    // Для удобства дальнейшей маршрутизации, можно изменить топик

    // Например, для последующей отправки в MQTT

    if(locationName) {

    msg.topic = `telemetry/temperature/${locationName}`;

    }

    // Выводим информативный статус на сам узел

    node.status({ fill: "green", shape: "dot", text: `${locationName}: ${msg.payload.value}°C` });

    return msg;

  • `Debug` (Отладка): Подключите этот узел к выходу `Function`. В настройках узла установите `Output` в `complete msg object`. Теперь при поступлении данных от любого датчика вы увидите в панели отладки полный объект `msg` с добавленным полем `location`.
  • После развертывания этого потока вы начнете получать в панели отладки сообщения вида:

    {
    

    "payload": {

    "value": 21.5,

    "unit": "°C",

    "ts": 1678886520000,

    "source": "28-00000FB34CD1",

    "location": "Гостиная"

    },

    "topic": "telemetry/temperature/Гостиная",

    "_msgid": "..."

    }

    Эти стандартизованные данные готовы для дальнейшего использования: отображения на дашборде, отправки в MQTT, участия в логике управления климатом и т.д.

    ---

    Итоги и рекомендации

    В этом уроке мы прошли полный цикл работы с датчиками температуры DS18B20 по протоколу 1-Wire: от изучения теории и физического монтажа до получения и обработки данных в среде Node-RED. Следование изложенным рекомендациям обеспечивает создание надежной и легко обслуживаемой подсистемы температурного мониторинга на объекте.

    Чек-лист для диагностики проблем с 1-Wire

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

  • [ ] Физическое подключение: Проверьте правильность подключения проводов (GND, DQ, VDD). Убедитесь в отсутствии переполюсовки.
  • [ ] Надежность контактов: Убедитесь, что все провода надежно зажаты в клеммах контроллера и в местах соединений на трассе. Плохой контакт — самая частая причина проблем.
  • [ ] Питание: Убедитесь, что на клемму VDD контроллера подается напряжение.
  • [ ] Настройки в веб-интерфейсе: Проверьте, что интерфейс 1-Wire активирован и назначен на правильный GPIO-порт.
  • [ ] Повторное сканирование: После любых изменений в физическом подключении выполните повторное сканирование шины в веб-интерфейсе.
  • [ ] Целостность датчика: Попробуйте подключить заведомо исправный датчик напрямую к клеммам контроллера, чтобы исключить неисправность датчика или проблемы с кабельной линией.
  • [ ] Длина и топология: Если проблемы возникают на длинной линии, убедитесь, что используется линейная топология и качественный кабель.
  • Рекомендации по документированию

    Качественная документация — залог быстрой диагностики и простоты обслуживания системы в будущем. При работе с 1-Wire обязательно создайте и сохраните в проектной документации таблицу соответствия:

    | ROM ID (Уникальный адрес) | Физическое расположение на объекте |

    | ------------------------- | ----------------------------------- |

    | `28-00000FB34CD1` | Гостиная, у окна, высота 1.5м |

    | `28-00000FA98765` | Спальня №1, у кровати, высота 0.8м |

    | `28-00000FC21EF0` | Улица, северная стена дома, 2.5м |

    | `28-00000FD56ABC` | Подача теплого пола, коллектор |

    Эта таблица (ваш "I/O Map" для датчиков температуры) является бесценным инструментом при пусконаладке и последующей эксплуатации объекта.

    Что дальше?

    Мы успешно освоили подключение цифровых датчиков, которые являются одним из самых распространенных типов сенсоров. В следующем уроке мы перейдем к работе с аналоговыми входами и научимся подключать датчики, формирующие сигнал 0-10В или 4-20мА, что расширит наши возможности по сбору данных с промышленного и специализированного оборудования.