Главная → Академия → Датчики и входы: нормализация сигналов → Подключение датчиков температуры DS18B20: схема и топология шины

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

Введение в DS18B20 и варианты исполнения

Цифровой датчик температуры DS18B20 является одним из самых распространенных и универсальных компонентов в системах автоматизации. Его популярность обусловлена сочетанием высокой точности, простоты подключения по шине 1-Wire и доступности. В отличие от аналоговых датчиков, DS18B20 передает температуру в цифровом виде, что исключает потери точности на длинных линиях и снижает влияние электромагнитных помех, о которых мы говорили в предыдущих уроках.

Каждый датчик DS18B20 обладает уникальным 64-битным идентификатором (Уникальный ID (адрес) датчика), который "прошит" в него на заводе. Это позволяет подключать множество таких датчиков к одной трехпроводной шине, а контроллер сможет обращаться к каждому из них индивидуально, зная его адрес.

> 💡 Подсказка: Для измерений температуры в стяжке пола, на улице или в бойлерной всегда используйте датчики в герметичной гильзе из нержавеющей стали (IP67/IP68). Это предотвратит коррозию и обеспечит долгий срок службы.

Ключевые характеристики DS18B20

| Параметр | Значение | Примечание |

| :--- | :--- | :--- |

| Интерфейс | 1-Wire | Позволяет подключать множество датчиков на одну шину. |

| Диапазон измеряемых температур | от -55°C до +125°C | Покрывает большинство бытовых и промышленных задач. |

| Точность | ±0.5°C | В диапазоне от -10°C до +85°C. |

| Разрешение | Настраиваемое: 9, 10, 11, 12 бит | Влияет на время преобразования (от 93.75 мс до 750 мс). |

| Уникальный адрес | 64-битный ROM-код | Нет необходимости в ручной адресации. |

| Питание | от 3.0В до 5.5В | Совместимо с логическими уровнями контроллера HI. |

Варианты исполнения (форм-факторы)

  • Корпус TO-92: Стандартный транзисторный корпус. Предназначен для монтажа на печатные платы или для измерения температуры воздуха в сухих помещениях. Из-за открытых выводов уязвим к влаге и коррозии.
  • Герметичная гильза из нержавеющей стали: Наиболее предпочтительный вариант для профессиональных инсталляций. Сам датчик и место пайки кабеля залиты компаундом внутри металлической гильзы, обеспечивая класс защиты IP67/IP68. Идеально подходит для измерения температуры теплоносителя (накладной монтаж на трубу), уличного воздуха, стяжки теплого пола, воды в бойлере.
  • Для подключения датчиков к контроллеру HI нам понадобится:

    • Сам датчик DS18B20.
    • Контроллер HI с поддержкой 1-Wire (имеет соответствующие клеммы).
    • Кабель для прокладки шины. Рекомендуется использовать витую пару (UTP/FTP Cat 5e) из-за хорошей помехозащищенности и стандартного цветового кодирования.
    • Подтягивающий резистор (pull-up) номиналом 4.7 кОм. Это критически важный компонент, без которого шина 1-Wire работать не будет.

    ---

    Схемы подключения: стандартное (3-wire) и 'паразитное' (2-wire) питание

    Существует два способа подключения датчиков DS18B20: стандартный трехпроводной и двухпроводной с так называемым "паразитным" питанием. Выбор схемы подключения напрямую влияет на надежность и стабильность всей системы.

    > ⚠️ Внимание: Использование 'паразитного' питания значительно снижает надежность шины 1-Wire и не рекомендуется для профессиональных инсталляций. В 99% случаев следует использовать стандартную 3-проводную схему.

    Стандартная 3-проводная схема (рекомендуется)

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

    • VCC: Питание датчика (подключается к клемме +5V на контроллере HI).
    • GND: Общий провод, "земля" (подключается к клемме GND на контроллере).
    • DATA: Линия данных (подключается к сигнальной клемме 1-Wire на контроллере).
    Принцип работы: Датчик получает постоянное и стабильное питание по выделенной линии VCC. Линия DATA используется исключительно для обмена информацией. Между линиями VCC и DATA обязательно устанавливается подтягивающий резистор 4.7 кОм. ASCII-схема подключения одного датчика:
                      [CTRL:HI-Core]
    

    +5V |--------- (Красный) ----- VCC [DS18B20]

    DATA |---+-------(Желтый)------ DATA [DS18B20]

    | |

    [4.7kΩ] (Pull-up резистор)

    |

    GND |---------(Черный)------ GND [DS18B20]

    Преимущества 3-проводной схемы:
    • Высокая надежность: Стабильное питание гарантирует корректную работу датчика в любых условиях.
    • Максимальная длина шины: Позволяет строить длинные шины (до 100-200 метров при использовании качественного кабеля).
    • Большое количество датчиков: Можно подключать до 15-20 датчиков на одну шину без потери стабильности.
    • Предсказуемость: Система ведет себя стабильно и предсказуемо, что критически важно для объектов автоматизации.

    'Паразитное' питание (2-проводная схема)

    В этом режиме используются только два провода: DATA и GND. Датчик "ворует" энергию для работы с линии данных.

    Принцип работы: Когда на линии DATA нет обмена информацией, контроллер поддерживает на ней высокий уровень (+5V). Встроенный в датчик конденсатор заряжается от этого напряжения. В момент, когда датчику нужно выполнить энергозатратную операцию (например, преобразование температуры), он использует накопленный в конденсаторе заряд. Недостатки 'паразитного' питания:
    • Низкая надежность: При большом количестве датчиков или на длинной линии напряжение на шине может "проседать", и датчики не смогут накопить достаточно энергии. Это приводит к сбоям, ошибкам чтения и "отваливанию" датчиков от шины.
    • Ограничение на длину и количество: Шина с 'паразитным' питанием существенно короче и может обслуживать гораздо меньше датчиков по сравнению с 3-проводной схемой.
    • Проблемы при одновременном опросе: Контроллер должен использовать специальную команду "strong pull-up" для подачи дополнительного питания во время преобразования, что усложняет логику и не всегда надежно работает.
    • Недопустимость применения: Как было упомянуто в уроке `LESSON-04-M06-L01`, использование такой схемы в системах, где показания датчиков критически важны (защита от протечек, контроль температуры в котельных), категорически запрещено.

    ---

    Топология шины 1-Wire: 'линия', 'звезда' и их ограничения

    Топология шины — это физический способ расположения кабелей и подключения устройств. Для протокола 1-Wire правильный выбор топологии является залогом стабильной работы. Неправильно спроектированная топология — одна из главных причин нестабильности показаний и ошибок CRC.

    Рекомендованная топология: 'Линия' (Bus/Linear)

    Это самая надежная и предпочтительная топология. Все датчики подключаются к одному магистральному кабелю.

    Принцип: От контроллера идет один кабель, и датчики подключаются к нему последовательно. Короткие отводы (не более 1-2 метров) от магистрали допустимы. ASCII-схема топологии 'Линия':
    [CTRL]---------------- ... ----
    
    • `[CTRL]` — Контроллер HI
    • `` — Датчик DS18B20
    • `---` — Магистральный кабель
    Преимущества:
    • Минимизирует отражение сигнала, обеспечивая наилучшую целостность сигнала.
    • Позволяет достичь максимальной длины шины и максимального количества датчиков.
    • Проста в монтаже и диагностике.

    Топология 'Звезда' (Star) - НЕ РЕКОМЕНДУЕТСЯ

    При этой топологии несколько "лучей" кабеля расходятся из одной точки (обычно от клеммника рядом с контроллером).

    ASCII-схема топологии 'Звезда':
           /----
    

    /

    [CTRL]-----

    \

    \----

    Проблемы и риски:
    • Отражение сигнала: Каждый "луч" звезды является длинным отводом (stub). На конце каждого луча и в точке их соединения сигнал отражается, что приводит к искажению формы сигнала. Эти отраженные сигналы накладываются друг на друга и на основной сигнал, мешая контроллеру и датчикам корректно распознавать данные.
    • Жесткие ограничения: В топологии "звезда" общая длина всех лучей и длина каждого отдельного луча очень ограничены. Практика показывает, что стабильная работа возможна только при длине лучей не более 10-15 метров.
    • Непредсказуемость: Стабильность шины становится сильно зависимой от длины и качества каждого луча, что делает систему трудно диагностируемой и ненадежной.

    Гибридные топологии

    Иногда на объектах встречаются смешанные топологии. Например, длинная магистраль с несколькими короткими звездчатыми ответвлениями. Такие схемы допустимы, но требуют тщательного проектирования. Общее правило: отводы (stubs) от основной магистрали должны быть как можно короче. В идеале, датчик врезается прямо в магистральный кабель.

    Практические ограничения шины 1-Wire

    Даже при идеальной топологии и схеме подключения существуют физические ограничения:

    • Максимальная длина: Зависит от качества кабеля. Для кабеля UTP Cat 5e/6 можно рассчитывать на стабильную работу на длинах до 100 метров, в некоторых случаях до 200 метров.
    • Максимальное количество датчиков: Рекомендуется ограничивать количество датчиков на одном порту контроллера до 15-20 штук. Хотя протокол теоретически поддерживает больше, на практике большое количество датчиков увеличивает общую емкость шины, что "заваливает" фронты сигнала и приводит к сбоям.
    • Подтягивающий резистор: Номинал 4.7 кОм является стандартным. Для очень длинных шин (>100м) его номинал может потребоваться уменьшить до 2.2-3.3 кОм для ускорения нарастания фронта сигнала.

    ---

    Практика: Проверка датчиков в консоли контроллера HI

    Прежде чем настраивать логику в Node-RED, крайне важно убедиться, что датчики корректно определяются на физическом и системном уровне. Диагностика в консоли Linux — это первый и самый надежный шаг.

    1. Физическое подключение

  • Обесточьте контроллер HI.
  • Возьмите датчик DS18B20 в герметичной гильзе. Он имеет три провода. Стандартная расцветка:
  • * Красный: VCC (+5V)

    * Черный: GND

    * Желтый: DATA

  • Подключите провода к соответствующим клеммам на контроллере HI: красный к `+5V`, черный к `GND`, желтый к `1-Wire DATA`.
  • Возьмите подтягивающий резистор на 4.7 кОм. Установите его между клеммами `+5V` и `1-Wire DATA`. Без этого резистора контроллер не увидит датчики.
  • 2. Проверка в консоли Linux

  • Подайте питание на контроллер и дождитесь его загрузки.
  • Подключитесь к контроллеру по SSH, используя учетные данные администратора.
  • Перейдите в системный каталог, где ядро Linux представляет устройства 1-Wire:
  •     cd /sys/bus/w1/devices/

  • Выведите список содержимого этого каталога:
  •     ls -l

    Вы должны увидеть примерно следующий вывод:

        total 0

    lrwxrwxrwx 1 root root 0 Jan 1 00:01 28-0120522a3698 -> ../../../devices/w1_bus_master1/28-0120522a3698

    lrwxrwxrwx 1 root root 0 Jan 1 00:01 w1_bus_master1 -> ../../../devices/w1_bus_master1

    * `w1_bus_master1` — это сам порт 1-Wire на контроллере.

    * `28-0120522a3698` — это каталог, соответствующий вашему датчику. `28-` — это префикс семейства датчиков DS18B20, а `0120522a3698` — его уникальный серийный номер. Если вы видите этот каталог, значит, датчик успешно определился на шине.

  • Теперь прочитаем сырые данные с датчика. Для этого нужно выполнить команду `cat` для файла `w1_slave` внутри каталога датчика:
  •     cat 28-0120522a3698/w1_slave

  • В ответ вы получите две строки:
  •     79 01 4b 46 7f ff 0c 10 33 : crc=33 YES

    79 01 4b 46 7f ff 0c 10 33 t=23562

    * Первая строка: Содержит сырые данные из памяти датчика и результат проверки контрольной суммы (CRC). `crc=33 YES` — это самое важное. `YES` означает, что данные были получены без ошибок. Если вы видите `NO`, это говорит о проблемах на шине (плохой контакт, длинная линия, помехи).

    * Вторая строка: Дублирует данные и содержит значение температуры после `t=`. В данном примере `t=23562` означает 23.562 °C.

    Если вы успешно выполнили эти шаги, вы можете быть уверены, что физическое подключение исправно, и можно переходить к настройке в Node-RED.

    ---

    Практика: Опрос датчиков в Node-RED

    После проверки в консоли, получение данных в Node-RED становится простой задачей. Мы будем использовать специальный узел, который напрямую работает с файловой системой `/sys/bus/w1/devices/`.

    1. Установка палитры

  • Откройте интерфейс Node-RED вашего контроллера HI.
  • В правом верхнем меню выберите "Manage palette".
  • Перейдите на вкладку "Install".
  • В строке поиска введите `node-red-contrib-ds18b20-sensor`.
  • Нажмите кнопку "Install" рядом с найденным модулем.
  • 2. Создание потока для опроса

  • Перетащите на поле узел `ds18b20` из левой палитры (находится в категории "raspberry pi").
  • Дважды кликните по узлу, чтобы открыть его настройки.
  • * 1-Wire sensor id: Сюда нужно вставить полный ID вашего датчика, который вы узнали на предыдущем шаге (например, `28-0120522a3698`).

    * Interval (sec): Укажите интервал опроса в секундах. Для температуры воздуха достаточно `30` или `60` секунд. Не стоит ставить слишком частый опрос без необходимости.

    * Name: Дайте узлу осмысленное имя, например, "Температура в гостиной".

  • Сохраните настройки.
  • Перетащите на поле узел `Debug` и соедините выход узла `ds18b20` с его входом.
  • Нажмите красную кнопку "Deploy" для развертывания потока.
  • 3. Анализ результата

    Через указанный вами интервал времени под узлом `ds18b20` появится его статус (текущая температура), а в панели отладки (Debug) вы увидите входящие сообщения `msg`.

    Объект `msg` будет иметь следующую структуру:

    • `msg.payload`: числовое значение температуры (например, `23.5`).
    • `msg.topic`: содержит ID датчика (например, `28-0120522a3698`).

    4. Форматирование для отправки в MQTT

    Для интеграции с другими системами и следования "Контракту сообщения", принятому в нашей академии, преобразуем эти данные в стандартный JSON-формат.

  • Добавьте узел `Function` после узла `ds18b20` и перед узлом `MQTT Out`.
  • В код узла `Function` вставьте следующий JavaScript:
  • // Получаем температуру и ID источника
    

    let temperature = msg.payload;

    let sensor_id = msg.topic;

    // Формируем новый msg.payload в соответствии со стандартом

    msg.payload = {

    "value": temperature,

    "source": sensor_id,

    "ts": Date.now(),

    "unit": "°C"

    };

    // Формируем осмысленный топик для MQTT

    // Например, 'telemetry/living_room/temperature'

    msg.topic = 'telemetry/living_room/temperature';

    return msg;

  • Теперь вы можете подключить к выходу этого узла `Function` узел `mqtt out`, настроенный на ваш MQTT-брокер. Таким образом, стандартизированные данные о температуре будут публиковаться в системе. Пример итогового JSON в MQTT:
  • {
    

    "value": 23.5,

    "source": "28-0120522a3698",

    "ts": 1678886400000,

    "unit": "°C"

    }

    ---

    Рекомендации по монтажу и решение проблем

    Правильный монтаж — залог долгой и бесперебойной работы системы.

    > ⚠️ Внимание: Никогда не используйте 'паразитное' питание для критически важных датчиков, таких как датчики защиты от протечек или датчики температуры в котельной/серверной.

    Сводка лучших практик

    • Кабель: Всегда используйте кабель типа "витая пара" (UTP/FTP категории 5e или выше). Для линии данных (DATA) и земли (GND) используйте одну из витых пар (например, зеленую и бело-зеленую). Это значительно повышает помехозащищенность.
    • Соединения: Избегайте скруток. Используйте пайку с последующей изоляцией термоусадочной трубкой или качественные клеммники (например, WAGO).
    • Схема: Всегда используйте 3-проводную схему подключения (VCC, GND, DATA).
    • Топология: Придерживайтесь топологии "линия" (bus). Минимизируйте длину отводов от основной магистрали.
    • Резистор: Не забывайте про подтягивающий резистор 4.7 кОм. Он должен быть один на всю шину и устанавливаться у контроллера.

    Типовые проблемы и их диагностика

    | Проблема | Возможная причина | Решение |

    | :--- | :--- | :--- |

    | Датчики не определяются в `ls /sys/bus/w1/devices/` | 1. Забыли установить подтягивающий резистор 4.7 кОм.
    2. Перепутаны провода подключения (особенно DATA и GND).
    3. Плохой контакт в клеммнике или обрыв кабеля.
    4. Датчик неисправен. | 1. Установить резистор между DATA и +5V.
    2. Проверить схему подключения и распиновку.
    3. "Прозвонить" кабель мультиметром, переобжать клеммы.
    4. Попробовать подключить заведомо исправный датчик. |

    | Нестабильные/нулевые показания, ошибка `CRC=... NO` | 1. Слишком длинная шина или неправильная топология ("звезда").
    2. Сильные электромагнитные помехи (кабель 1-Wire проложен рядом с силовым).
    3. Проблемы с питанием (актуально для 'паразитной' схемы). | 1. Перестроить шину в линейную топологию, уменьшить длину.
    2. Перепроложить кабель вдали от силовых линий или использовать экранированную витую пару (FTP), заземлив экран со стороны контроллера.
    3. Перейти на 3-проводную схему. |

    | Один датчик "вешает" всю шину | Неисправность конкретного датчика, который создает короткое замыкание или шум на линии. | Методом исключения отключать датчики по одному, чтобы выявить неисправный и заменить его. |

    Всегда начинайте диагностику с самого нижнего уровня — с проверки в консоли Linux. Если датчик корректно отдает температуру по команде `cat`, но проблемы возникают в Node-RED, значит, ошибка находится на прикладном уровне (в настройке узлов), а не на физическом.

    Что дальше

    В этом уроке мы детально разобрали физическое и программное подключение одного из самых популярных датчиков — DS18B20. Мы научились выбирать правильную схему и топологию, а также выполнять первичную диагностику на уровне операционной системы и настраивать опрос в Node-RED. В следующих уроках мы будем использовать полученные данные для построения сложной логики автоматизации, например, для управления климатом.