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

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

Урок 2 · Датчики и входы: нормализация сигналов · 30 мин · theory

Введение в 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 нам понадобится:

    ---

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

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

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

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

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

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

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

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

    | |

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

    |

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

    Преимущества 3-проводной схемы:

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

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

    Принцип работы: Когда на линии DATA нет обмена информацией, контроллер поддерживает на ней высокий уровень (+5V). Встроенный в датчик конденсатор заряжается от этого напряжения. В момент, когда датчику нужно выполнить энергозатратную операцию (например, преобразование температуры), он использует накопленный в конденсаторе заряд. Недостатки 'паразитного' питания:

    ---

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

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

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

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

    Принцип: От контроллера идет один кабель, и датчики подключаются к нему последовательно. Короткие отводы (не более 1-2 метров) от магистрали допустимы. ASCII-схема топологии 'Линия':
    [CTRL]---------------- ... ----
    
    Преимущества:

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

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

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

    /

    [CTRL]-----

    \

    \----

    Проблемы и риски:

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

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

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

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

    ---

    Практика: Проверка датчиков в консоли контроллера 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` будет иметь следующую структуру:

    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"

    }

    ---

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

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

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

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

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

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

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

    | Датчики не определяются в `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. В следующих уроках мы будем использовать полученные данные для построения сложной логики автоматизации, например, для управления климатом.