ГлавнаяАкадемияДатчики и входы: нормализация сигналов → Типы аналоговых датчиков: температуры (NTC), влажности, освещенности, давления

Типы аналоговых датчиков: температуры (NTC), влажности, освещенности, давления

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

Введение в аналоговые датчики и концепция нормализации

В системах автоматизации мы работаем с двумя фундаментальными типами сигналов: дискретными и аналоговыми. Как мы рассматривали ранее, дискретный сигнал имеет всего два состояния — «включено/выключено», «истина/ложь», 0/1. Это идеальный способ определить, открыта ли дверь или нажата ли кнопка. Однако реальный мир редко бывает бинарным. Температура, влажность, уровень освещенности или давление в трубе не могут быть описаны простым «да» или «нет». Для измерения таких плавно изменяющихся физических величин используются аналоговые датчики.

Аналоговый сигнал — это непрерывный сигнал, значение которого в любой момент времени может принимать любое значение в заданном диапазоне. В отличие от дискретного сигнала, который можно сравнить с обычным выключателем света, аналоговый сигнал подобен диммеру, позволяющему плавно регулировать яркость.

В контексте автоматизации и контроллеров, таких как платформа HI, аналоговые величины чаще всего представляются в виде:

Контроллер HI, оснащенный универсальными входами, не может напрямую «понять» градусы Цельсия или Паскали. Его задача — измерить электрический параметр (напряжение, ток или сопротивление) и преобразовать его в цифровой код с помощью аналого-цифрового преобразователя (АЦП). Результатом этого преобразования являются так называемые «сырые» данные (raw values) — целочисленное значение, как правило, в диапазоне от 0 до 1023 (для 10-битного АЦП) или от 0 до 4095 (для 12-битного АЦП).

Например, для входа, настроенного на измерение напряжения 0-10В, значение АЦП `0` будет соответствовать 0В, а `1023` — 10В. Значение `512` будет примерно соответствовать 5В. Эти «сырые» данные сами по себе не несут физического смысла. Инженеру бесполезно знать, что «сырое» значение с датчика влажности равно `734`. Ему нужно знать, что влажность в помещении составляет 71.7%.

Именно здесь на сцену выходит нормализация данных. Это процесс математического преобразования «сырых» значений АЦП в реальные, понятные человеку и другим системам физические величины (°C, %RH, Lux, Па, бар и т.д.). Нормализация — это неотъемлемый и критически важный шаг при работе с любым аналоговым датчиком. Без корректной нормализации вся система автоматизации будет оперировать бессмысленными цифрами, что приведет к неработоспособности всех зависимых сценариев.

---

Датчики температуры: работа с NTC термисторами

Датчики температуры (NTC) являются одними из самых распространенных и доступных сенсоров для измерения температуры в системах автоматизации зданий. NTC (Negative Temperature Coefficient) — это терморезистор, электрическое сопротивление которого уменьшается с ростом температуры. Эта зависимость нелинейна, но предсказуема, что позволяет с высокой точностью вычислять температуру, зная сопротивление.

Принцип работы и схема подключения

Для измерения сопротивления NTC-термистора универсальный аналоговый вход контроллера HI конфигурируется в режим измерения сопротивления. Часто используется схема делителя напряжения, где NTC-датчик подключается последовательно с прецизионным (точным) резистором известного номинала. Контроллер измеряет напряжение в средней точке и на основе этого вычисляет сопротивление термистора. При прямом подключении к универсальным входам контроллера HI, поддерживающим измерение сопротивления, эта логика реализуется внутри самого контроллера.

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

  • Один вывод NTC-датчика подключается к аналоговому входу (например, `UI-05`).
  • Второй вывод NTC-датчика подключается к клемме «земля» (`GND`) того же контроллера.
  • После этого в программной части необходимо прочитать значение сопротивления, которое измерил контроллер на данном входе.

    Методы нормализации и практический пример

    Для преобразования значения сопротивления в градусы Цельсия используется формула Стейнхарта-Харта или ее упрощенная версия, основанная на β-коэффициенте. Этого коэффициента, наряду с номинальным сопротивлением при 25°C (например, 10 кОм), обычно достаточно для большинства задач автоматизации.

    > ⚠️ Внимание: Для точных измерений критически важно использовать правильный β-коэффициент, указанный в документации производителя (datasheet) вашего NTC-датчика. Ошибка в коэффициенте приведет к значительным погрешностям в итоговых значениях температуры, особенно на краях измеряемого диапазона.

    Упрощенная формула Стейнхарта-Харта:

    `T = 1 / ( (1/T₀) + (1/β) * ln(R/R₀) )`

    Где:

    Чтобы получить температуру в градусах Цельсия, нужно из результата `T` вычесть 273.15.

    Практический пример в Node-RED:

    Предположим, с универсального входа контроллера мы получаем сообщение, содержащее измеренное сопротивление.

    Входящее сообщение `msg.payload`:

    {
    

    "rawValue": 8312,

    "unit": "Ohm"

    }

    Мы можем использовать узел `Function` для выполнения преобразования.

    // Параметры нашего NTC-датчика из datasheet
    

    const R0 = 10000; // Номинальное сопротивление 10 кОм при 25°C

    const B = 3950; // β-коэффициент

    const T0 = 298.15; // Номинальная температура в Кельвинах (25°C)

    // Извлекаем измеренное сопротивление из входящего сообщения

    const R = msg.payload.rawValue;

    // Проверяем, что значение корректно

    if (typeof R !== 'number' || R <= 0) {

    node.status({ fill: "red", shape: "dot", text: "Invalid resistance value" });

    node.error("Некорректное значение сопротивления: " + R, msg);

    return null;

    }

    // 1. Вычисляем температуру в Кельвинах по формуле

    let tempK = 1 / ( (1/T0) + (1/B) * Math.log(R / R0) );

    // 2. Переводим температуру из Кельвинов в градусы Цельсия

    let tempC = tempK - 273.15;

    // 3. Формируем новое сообщение, соответствующее контракту

    // Округляем до одного знака после запятой для удобства

    msg.payload = {

    value: parseFloat(tempC.toFixed(1)),

    unit: "°C",

    source: "ntc-sensor-living-room",

    ts: Date.now()

    };

    // 4. Обновляем статус узла для быстрой диагностики

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

    return msg;

    На выходе узла `Function` мы получим стандартизированное сообщение, готовое к отправке в MQTT или дальнейшей обработке в сценариях автоматизации.

    Исходящее сообщение `msg.payload`:

    {
    

    "value": 28.5,

    "unit": "°C",

    "source": "ntc-sensor-living-room",

    "ts": 1678886400000

    }

    ---

    Измерение влажности: емкостные и резистивные датчики

    Для измерения относительной влажности воздуха (RH) в автоматизации зданий широкое распространение получили датчики влажности на емкостном или резистивном принципе. Они часто поставляются в виде готовых модулей с интегрированной электроникой, которая преобразует изменение емкости или сопротивления в стандартизированный аналоговый сигнал:

    > 💡 Подсказка: Размещайте комбинированные датчики температуры и влажности вдали от прямых потоков воздуха из систем вентиляции и кондиционирования, чтобы избежать искажения показаний локальными микроклиматическими условиями. Также следует избегать установки вблизи источников тепла (радиаторов) или влаги (кухонная плита, душевая).

    Физическое подключение и нормализация

    Рассмотрим подключение популярного датчика влажности с выходом 0–10В.

  • Питание: Датчику требуется питание, обычно 24В DC. Подключаем его клеммы `+V` и `GND` к соответствующему блоку питания (`PSU:24VDC`). Важно, чтобы «земля» (GND) этого блока питания была соединена с «землей» (GND) контроллера HI для создания общего опорного потенциала.
  • Сигнал: Выходную клемму датчика `Vout` (или аналогичную) подключаем к универсальному входу контроллера (например, `UI-07`), предварительно сконфигурированному на измерение напряжения 0–10В.
  • Зависимость выходного напряжения от влажности у таких датчиков, как правило, линейная. Например, производитель указывает, что 0В соответствует 0% RH, а 10В — 100% RH.

    Наш 10-битный АЦП преобразует этот диапазон напряжений в «сырые» значения от 0 до 1023. Таким образом, задача нормализации сводится к простому линейному масштабированию.

    Для этой задачи идеально подходит стандартный узел Node-RED `range`.

    Пример использования узла `range`:

    Предположим, контроллер считывает значение АЦП и отправляет его в виде `msg.payload`.

    Входящее сообщение `msg`:

    {
    

    "payload": 665,

    "topic": "raw/ui-07/adc_value"

    }

    Настраиваем узел `range` следующим образом:

    После прохождения через этот узел, `msg.payload` будет автоматически преобразован. Значение `665` будет отмасштабировано в `65.0`.

    Далее, мы можем использовать узел `Change` или `Function` для приведения сообщения к нашему стандартному контракту.

    Пример `msg` на выходе из узла `range`:

    {
    

    "payload": 65.00488758553275, // Результат масштабирования

    "topic": "raw/ui-07/adc_value"

    }

    Финальное, отформатированное сообщение после узла `Function`:

    {
    

    "value": 65.0,

    "unit": "%RH",

    "source": "humidity-sensor-bathroom",

    "ts": 1678887000000

    }

    Такой подход с использованием узла `range` является предпочтительным для всех датчиков с линейной характеристикой, так как он нагляден и не требует написания кода.

    ---

    Датчики освещенности: фоторезисторы (LDR) и их применение

    Датчик освещенности, или фоторезистор (LDR - Light Dependent Resistor), — это простой и недорогой компонент, сопротивление которого зависит от интенсивности падающего на него света. В полной темноте его сопротивление может достигать нескольких мегаом (МОм), а при ярком свете — падать до сотен или десятков ом.

    Принцип действия и подключение

    Как и NTC-термистор, фоторезистор сам по себе не генерирует напряжение. Чтобы получить с него аналоговый сигнал, используется схема делителя напряжения. LDR соединяется последовательно с постоянным резистором (например, на 10 кОм), и напряжение снимается с их общей точки. Эта точка подключается к аналоговому входу контроллера HI.

    Когда на улице темно, сопротивление LDR велико, и напряжение на входе контроллера будет стремиться к напряжению питания. Когда светло, сопротивление LDR падает, и напряжение на входе контроллера уменьшается. Таким образом, мы получаем аналоговый сигнал, обратно пропорциональный освещенности.

    Проблемы нелинейности и аппроксимация

    Основной недостаток фоторезисторов — их высокая нелинейность и большой разброс параметров даже в пределах одной партии. Получить точное значение освещенности в люксах (Lux) с помощью LDR — нетривиальная задача, требующая индивидуальной калибровки.

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

    Эти пороги подбираются эмпирически (опытным путем) для каждого конкретного объекта и места установки датчика.

    Пример логики в Node-RED для управления освещением:

    Предположим, «сырое» значение с АЦП (от 0 до 1023) поступает в `msg.payload`. Чем больше значение, тем темнее.

  • Узел `Inject` раз в минуту инициирует чтение с датчика.
  • Узел `Analog In` (условный) считывает значение с АЦП.
  • Узел `Switch` выполняет роль классификатора:
  • * `Property`: `msg.payload`

    * Правило 1: `is greater than` `800` -> Выход 1 («Темно»)

    * Правило 2: `is between` `500` and `800` -> Выход 2 («Сумерки»)

    * Правило 3: `is less than` `500` -> Выход 3 («Светло»)

  • Узлы `Change` на каждом выходе формируют команды для управления светом:
  • * На выходе 1 («Темно»): `Set msg.payload to "ON"`

    * На выходе 3 («Светло»): `Set msg.payload to "OFF"`

  • Узел `RBE` ("Report by Exception") пропускает сообщение дальше, только если оно изменилось (например, с "ON" на "OFF"). Это предотвращает отправку дублирующихся команд каждую минуту.
  • Узел `Relay Out` (условный) отправляет команду на физическое реле, управляющее уличным фонарем.
  • Такая логика проста, надежна и решает 90% задач, связанных с автоматическим управлением светом по уровню естественной освещенности.

    ---

    Датчики давления: обзор и примеры использования

    Датчики давления — это устройства, преобразующие величину давления среды (жидкости или газа) в электрический сигнал. Они находят широкое применение в системах автоматизации для мониторинга и управления инженерными системами.

    Классификация и применение

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

    Стандартные сигналы и нормализация

    В профессиональной автоматике для датчиков давления, как и для многих других промышленных сенсоров, преобладает стандартный сигнал 4–20мА («токовая петля»). Его преимущества, как уже упоминалось, заключаются в высокой помехоустойчивости и возможности передавать сигнал на большие расстояния без потерь.

    Для подключения такого датчика к контроллеру HI требуется либо специальный вход, рассчитанный на сигнал 4-20мА, либо использование внешнего прецизионного резистора (обычно 250 Ом или 500 Ом), который преобразует ток в напряжение (по закону Ома: `U = I * R`). Например, ток 4-20мА на резисторе 500 Ом создаст падение напряжения 2-10В, которое уже можно измерить стандартным аналоговым входом.

    Подход к нормализации данных с датчика давления аналогичен работе с датчиком влажности, так как характеристика у сенсоров давления почти всегда линейная.

    Общий подход к нормализации:
  • Изучить документацию (datasheet) на датчик, чтобы узнать:
  • * Диапазон измеряемого давления (например, 0 – 6 бар).

    * Диапазон выходного сигнала (например, 4 – 20мА или 0 – 10В).

  • Подключить датчик и настроить вход контроллера на соответствующий тип сигнала.
  • Использовать узел `range` в Node-RED для линейного масштабирования.
  • * Input range: Диапазон «сырых» значений АЦП, соответствующий сигналу (например, `205` – `1023` для сигнала 2-10В).

    * Result range: Диапазон давления в физических единицах (например, `0` – `6`).

    Таким образом, сырое значение, полученное с АЦП, будет корректно преобразовано в бары или Паскали, после чего его можно использовать в логике (например, для отключения насоса при превышении давления) или для отображения на панели оператора.

    ---

    Сводка и лучшие практики подключения

    В этом уроке мы рассмотрели четыре основных типа аналоговых датчиков, которые составляют основу сбора данных о физическом мире в любой современной системе автоматизации.

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

    Обобщенный алгоритм работы с любым аналоговым датчиком на платформе HI можно представить в виде следующих шагов:

  • Физическое подключение: Корректно соединить датчик с входом контроллера и, при необходимости, с источником питания.
  • Конфигурация входа: Настроить универсальный вход контроллера на нужный режим (измерение напряжения, тока или сопротивления).
  • Чтение сырого значения: В Node-RED получить «сырое» значение с АЦП.
  • Нормализация данных: С помощью узлов `Function` (для нелинейных зависимостей) или `range` (для линейных) преобразовать «сырое» значение в физическую величину.
  • Форматирование и отправка: Привести сообщение к стандартному контракту (value, unit, source, ts) и опубликовать в MQTT или использовать в сценариях.
  • Центральным элементом успешной интеграции является техническая документация (datasheet) на датчик. Только в ней содержатся все необходимые параметры для корректной нормализации: β-коэффициент, диапазон измерения, тип выходного сигнала, схема подключения. Игнорирование документации — прямой путь к неверным данным и неработоспособной системе.

    Для обеспечения целостности сигнала и минимизации влияния ЭМИ/РЧИ, особенно при прокладке кабеля на большие расстояния (более 10-15 метров), настоятельно рекомендуется использовать экранированный кабель типа «витая пара». Экран кабеля следует заземлять только со стороны контроллера, чтобы избежать образования земляных петель, которые были подробно рассмотрены ранее.

    > 🔗 Связанный материал: Подробные сведения о физическом конфигурировании универсальных входов (UI) контроллера HI для работы в режимах измерения напряжения, сопротивления или тока см. в уроке `COURSE-04-M03-L02`.

    Что дальше?

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