Подключение датчиков температуры (1-Wire)
Теоретические основы: протокол 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. Он завоевал популярность благодаря своей точности, простоте использования и низкой стоимости.
📋 Ключевые понятия:
- Уникальный 64-битный адрес (ROM ID): Каждый датчик DS18B20 имеет уникальный лазерно-прошитый на заводе адрес. Это позволяет подключать множество датчиков к одной шине без конфликтов адресации. Адрес состоит из 8-битного кода семейства, 48-битного серийного номера и 8-битной контрольной суммы (CRC). Пример адреса: `28-00000FA98765`.
- Цифровой выход: Датчик сам выполняет аналого-цифровое преобразование, передавая на контроллер уже готовое значение температуры. Это устраняет погрешности, связанные с длиной кабеля и аналоговыми наводками.
- Точность и разрешение: Стандартная точность DS18B20 составляет ±0.5°C в диапазоне от -10°C до +85°C. Пользователь может программно настроить разрешение преобразования (9, 10, 11 или 12 бит), что влияет на скорость получения данных и точность. По умолчанию используется 12-битное разрешение (точность до 0.0625°C).
Топологии шины
Правильный выбор топологии является залогом стабильной работы сети 1-Wire.
| Топология | Описание | Преимущества | Недостатки |
| ------------------------ | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| Линейная шина (Bus) | Все датчики подключаются последовательно к одному магистральному кабелю с короткими отводами (не более 3м). | Высокая надежность, предсказуемое поведение сигнала, максимальная длина шины. | Менее гибкая в монтаже, требует прокладки единой магистрали. |
| Звезда (Star) | Все датчики подключаются к одной центральной точке (например, клеммная колодка), расходясь лучами. | Удобство монтажа, особенно когда датчики расположены в разных направлениях от щита. | Не рекомендуется. Создает отражения сигнала, резко снижает максимальную длину и стабильность шины. |
Для профессиональных инсталляций настоятельно рекомендуется использовать линейную топологию.
Ограничения протокола
При проектировании системы необходимо учитывать следующие ограничения:
- Максимальная длина шины: Теоретически до 300 метров, но на практике стабильная работа гарантируется на длинах до 50-100 метров при использовании качественного кабеля ("витая пара"), правильной топологии и внешнего питания.
- Количество устройств: Хотя протокол поддерживает до 2^48 устройств, практически на одну шину не рекомендуется подключать более 20-30 датчиков из-за увеличения общей ёмкости линии и времени сканирования.
- Чувствительность к помехам: Длинные линии 1-Wire без экранирования уязвимы для электромагнитных наводок от силовых кабелей, люминесцентных ламп и импульсных блоков питания.
---
Практика: Физическое подключение датчиков к контроллеру HI
Правильное физическое подключение — это 90% успеха при работе с датчиками 1-Wire. Контроллер HI предоставляет специализированные клеммы на блоке универсальных входов для удобного и надежного монтажа.
> ⚠️ Внимание: Неправильное подключение питания (переполюсовка) к датчику DS18B20 может привести к его немедленному выходу из строя. Всегда проверяйте полярность и соответствие цветов проводников схеме перед подачей питания на контроллер.
Идентификация клемм на контроллере HI
Датчики DS18B20 обычно поставляются в двух вариантах: в виде транзистора TO-92 или в герметичной гильзе с тремя выводами. Цветовая маркировка выводов у датчиков в гильзе стандартизирована:
- Красный: Питание (VDD, +3.3V или +5V)
- Черный: Земля (GND)
- Желтый (или белый): Линия данных (DQ)
На блоке универсальных входов контроллера 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 "Обзор универсальных входов контроллера"`.
Пошаговая процедура настройки
| 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` формирует сообщения в соответствии со стандартным контрактом сообщений нашей платформы.
- `msg.topic`: Содержит уникальный идентификатор источника данных. Для датчиков 1-Wire это будет строка, включающая его ROM ID.
- `msg.payload`: Содержит JSON-объект с данными и метаданными.
{
"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]
* Код для узла `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;
После развертывания этого потока вы начнете получать в панели отладки сообщения вида:
{
"payload": {
"value": 21.5,
"unit": "°C",
"ts": 1678886520000,
"source": "28-00000FB34CD1",
"location": "Гостиная"
},
"topic": "telemetry/temperature/Гостиная",
"_msgid": "..."
}
Эти стандартизованные данные готовы для дальнейшего использования: отображения на дашборде, отправки в MQTT, участия в логике управления климатом и т.д.
---
Итоги и рекомендации
В этом уроке мы прошли полный цикл работы с датчиками температуры DS18B20 по протоколу 1-Wire: от изучения теории и физического монтажа до получения и обработки данных в среде Node-RED. Следование изложенным рекомендациям обеспечивает создание надежной и легко обслуживаемой подсистемы температурного мониторинга на объекте.
Чек-лист для диагностики проблем с 1-Wire
Если датчики не определяются или показывают некорректные данные, последовательно проверьте следующие пункты:
Рекомендации по документированию
Качественная документация — залог быстрой диагностики и простоты обслуживания системы в будущем. При работе с 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мА, что расширит наши возможности по сбору данных с промышленного и специализированного оборудования.