Sensirion SCD30 — лучший из доступных CO2 сенсоров

  • Цена: 30.78
  • После написания MatrixClock и tthRelay зачесались у меня руки сделать измеритель качества воздуха. Выбор пал на двухлучевой CO2 сенсор SCD30 от фирмы Sensirion. В этой статье вы узнаете все о SCD30 и научитесь пользоваться моей библиотекой, которая поддерживает все плюшки сенсора и даже больше. Если интересно прошу под cut…

    Основные характеристики SCD30:

    — двухлучевой оптический NDIR CO2 датчик

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

    — напряжение питания +3.3в..+5.5в

    — средний ток потребления 19мА, пиковый ток 75мА

    — рабочий диапазон температур 0°C..+50°C

    — диапазон измерения CO2 0ppm..40000ppm (I²C, UART) и 0..5000ppm (PWM)

    — точность измерения CO2 ±(30ppm + 3% от ИВ) в диапазоне 400ppm..10000ppm

    — повторяемость измерений ±10ppm в диапазоне 400ppm..10000ppm

    — температурная стабильность ±2.5ppm/°C в диапазоне 0°C..+50°C

    — диапазон измерения влажности 0%..100%

    — точность измерения влажности ±3%

    — диапазон измерения температуры -40°C..+70°C

    — точность измерения температуры ±0.1°C

    — время загрузки < 2сек

    — интерфейсы I²C, UART, Modbus или PWM

    — срок службы 15 лет

    Принцип работы двухлучевых оптических NDIR (Non-Dispersive Infrared Detection) CO2 датчиков очень прост. Молекулы CO2 непрозрачны для ИК волны длинной 4.26 микрон, в то время как остальная часть газов проходит через него без препятствий. Первый фотодетектор измеряет интенсивность инфракрасного излучения после прохождения через воздух. Второй детектор является эталонным и закрыт оптическим фильтром с длинной волны, при котором поглощение CO2 отсутствует. Примерно раз в сутки датчик снимает показания c эталона. Любое изменение интенсивности во втором канале указывает на деградацию источника инфракрасного излучения. Датчик автоматически корректирует показания CO2 первого канала, чтобы предотвратить дрейф.

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    Датчик SCD30 имеет аж три интерфейса, мне для проекта был интересен только I²C. Чтобы его активировать нужно контакт «SEL» никуда не подключать или соединить с «GND». Бонусом идет внутренняя подтяжка 45кОм к 3в. Это значит, что скорее всего SCL и SDA не толерантны к 5в, будьте осторожны.

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    У сенсора SCD30 очень хрупкая оптическая система. Для получения паспортной точности его двухлучевая камера не должна соприкасаться с посторонними предметами и подвергаться сильным механическим воздействиям. Если по какой-то причине этого избежать не удалось, нужно перекалибровать сенсор (о том как это сделать читай ниже).

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоровSensirion SCD30 - лучший из доступных CO2 сенсоров

    При размещении сенсора в корпусе нужно учитывать несколько факторов:

    1. Для уменьшения время отклика на изменение CO2, датчик лучше располагать как можно ближе к вентиляционному отверстию. Если это не возможно, то внутренний открытый объем устройства должен быть как можно меньше.

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    2. Датчик нужно располагать как можно дальше от источников тепла. Если это не возможно вводим коррекцию температуры (об этом смотрите ниже).

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

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

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

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

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    Команды сенсору можно передавать в любой последовательности, но если хотите немного сэкономить на электричестве, то делать это надо строго по инструкции:

    1. установить желаемый интервал измерения, если нужно

    2. установить тип калибровки, если нужно

    3. установить коррекцию температуры, если нужно

    4. включить режим непрерывного измерения

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    1. Длительные интервалы измерения снижают энергопотребление, но делают датчик не способным отслеживать быстро изменяющихся концентраций CO2. На графике показана ситуация когда концентрация CO2 мгновенно увеличилась с 4000ppm до 10000ppm. Датчики с интервалами измерения 2сек и 5сек увидят это изменение меньше чем за 2 минуты. Датчик с интервалом 60сек аж за 7 минут и дальше только хуже. Это экстремальный пример, в реальной жизни CO2 меняется медленно и отклик сенсора намного быстрее.

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    С завода в датчик зашит интервал 2сек. Нам доступен диапазон 2сек..1800сек. Фирма Sensirion рекомендует избегать больших значений и не выходить за рамки 2сек..60сек.

    sensorCO2.setMeasurementInterval(5);

    2a. У сенсора предусмотренно два типа калибровки: ASC (automatic self-calibration) и FRC (forced re-calibration). Оба метода дают одинаковую точность измерения. Главное отличие в том, что для FRC нужен газ с известной концентраций CO2, а ASC находит эталонное значение CO2 сам. Обычно автоматическая самокалибровка ASC используется в зданиях где демонтаж датчика, для последующей калибровки с помощью FRC, затруднен. Идея метода в том, что если вентиляционная система здания спроектирована правильно, то хотя бы на 1 час в день уровень CO2 в комнате, где установлен сенсор, опускается до 400ppm. Датчик достаточно умён и может игнорировать высокие концентрации за последние пару дней. Однако высокий уровень CO2 в течении недель рано или поздно приведёт к дрейфу и искажению измерений с активной ASC. В этом случае выход только один — FRC калибровка. Фирма Sensirion не указывает интервалы FRC, но в других источниках пишут от 6 месяцев до 1 года. Насколько это правда не знаю, статистики пока нет. Вот так выглядит строчка вызова ASC в библиотеке:

    sensorCO2.setAutoCalibration(true);

    2b. Калибровку FRC можно проводить неограниченное число раз и она вступает в силу немедленно. Диапазон коррекции 400ppm..2000ppm. Последовательность действий следующая:

    — активировать режим непрерывного измерения с интервалом измерения 2сек..5сек

    — поместить сенсор в закрытую среду с известной концентрацией CO2. Самый доступный способ — вынести сенсор на свежий воздух, концентрация которого в нормальных условиях колеблется в диапазоне 350ppm…480ppm.

    — убедится, что температура окружающей среды в пределах 0°C..+50°C, на сенсор не светит солнце и не дует ветер.

    — после 2-х минут акклиматизации, установить значение FRC равное 400ppm.

    sensorCO2.setManualCalibration(400);

    3. Датчик SCD30 компенсирует само нагрев измерительной камеры с помощью встроенного сенсора SHT31. В случае когда в приборе рядом с сенсором присутствует дополнительный источник тепла одного SHT31 уже не достаточно для измерения CO2 с паспортной точностью. Для этого в сенсоре предусмотренна корректировка температуры. Последовательность действий следующая:

    — включаем прибор, устанавливаем требуемую частоту измерения и даём прогреться всем компонентам в течении 10 минут.

    — берём эталонный термометр и измеряем температуру окружающего воздуха возле прибора.

    — находим разность температур снаружи и внутри и вводим коррекцию. Диапазон значений 0°C..+70°C с шагом +0.01°C.

    sensorCO2.setTemperatureOffset(0.01);

    4. Одним из недостатков измерения CO2 на основе принципа NDIR — зависимость от давления окружающей среды. Для этого в сенсоре предусмотрен механизм ее компенсации. Диапазон коррекции 700mBar..1400mBar или 0mBar если коррекция не нужна. Среднегодичное давление в моей местности 1013mBar. Постоянно увлекаться новыми значениями не стоит тк сенсор сохраняет все на флеш память, а она имеет ограниченный ресурс циклов записи.

    sensorCO2.startContinuousMeasurement(1013);

    В тех случаях когда данных по давлению нет, можно применить менее точную коррекцию по высоте над уровнем моря (altitude). Диапазон значений -3100m..+3300m. Для этого сначала отключаем коррекцию по давлению посылая 0mBar и шлем значение высоты над уровнем моря. Вот так это выглядит:

    sensorCO2.startContinuousMeasurement(0);
    
    sensorCO2.setAltitude(150);

    Библиотека умеет читать версию прошивки. Мне прислали с 3.66

    String version = sensorCO2.readFirmwareVersion();

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

    sensorCO2.reset();

    Библиотека написана так, что при любой ошибке на шине I²C или не совпадении контрольной суммы во время обмена, вместо CO2, T, RH выдается значение 99999. Как бы намекая вам о проблемах. Дальше вы сами решаете выводить вам 99999, старое значение или код ошибки последней команды:

    uint8_t error = sensorCO2.getCommandStatus();

    Забирать библиотеку можно тут.

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров

    Теперь вы сами можете написать себе измеритель качества воздуха ну или подождать пока это сделаю я.

    Дополнительная информация
    Sensirion SCD30 - лучший из доступных CO2 сенсоров
Оцените статью
Добавить комментарий