Датчик качества воздуха CCS811: инструкция по использованию и примеры

Используйте сенсор CO2 CCS811 для проверки качества воздуха в вашей квартире или офисе.

Подробности про датчики качества воздуха

Окружающий нас воздух в атмосфере состоит из:

  • 78% азота (N2)
  • 21% кислорода (O2)
  • 1% приходится на долю различных примесей, например инертные газы, углекислый газ, угарный газ и другие органические летучие вещества ЛОВ (от англ. total volatile organic compounds, TVOC).

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

Ранее для оценки качества воздуха TOVC применяли датчики CO2: сначала вычисляли концентрацию углекислого газа CO2, а далее высчитывали TVOC. Но традиционные датчики CO2 нечувствительны на курение, бытовую химию, чистящие средства, лакокрасочные материалы и другую парфюмерию.

Датчик качества воздуха CCS811 высчитывает концентрацию летучих органических веществ (TVOC), а затем только вычисляет эквивалентное значения углекислого газа (eCO2): эквивалентное, т.к. количество углекислого газа (CO2) считается расчётным путём из концентрации летучих органических веществ (TVOC).

Пример работы для Arduino и XOD

В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например Uno.

Схема устройства

Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Arduino Uno. Для коммуникации используйте выходной провод от сенсора совместно с соединительными проводами «папа-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая надевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте выходной провод от сенсора.

Код для Arduino IDE

Для упрощения работы с датчиком скачайте и установите библиотеку Adafruit_CCS811, а затем прошейте платформу Arduino скетчем, приведённым ниже.

sensor-co2-ccs811-with-case-arduino-read-data.ino
// библиотека для работы с датчиком качества воздуха CCS811
#include "Adafruit_CCS811.h"
 
// создаём объект для работы с датчиком
Adafruit_CCS811 ccs;
 
void setup() {
  // открываем Serial-порт
  Serial.begin(9600);
  Serial.println("Amperka CCS811 test...");
  // если датчик не прошел проверку, дальше не идем и крутимся в цикле
  if(!ccs.begin()){
    Serial.println("Failed to start sensor! Please check your wiring.");
    while(1);
  }
}
 
void loop() {
  // если пришли новые данные
  if(ccs.available()) {
    // считываем данные
    if(!ccs.readData()) {
      // выводим в Serial-порт показания концентрации CO2
      // и количество летучих органических веществ
      Serial.print("CO2: ");
      Serial.print(ccs.geteCO2());
      Serial.print("ppm, TVOC: ");
      Serial.println(ccs.getTVOC());
    } else {
      Serial.println("ERROR...");
      while(1);
    }
  }
  delay(500);
}

После загрузки скетча, в Serial-порт будет выводиться количество углекислого газа в ppm и летучих органических веществ в ppb.

Патч для XOD

Пример для Espruino

В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии Espruino, например Iskra JS.

Схема устройства

Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Iskra JS. Для коммуникации используйте выходной провод от сенсора совместно с соединительными проводами «папа-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая надевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте выходной провод от сенсора.

Исходный код

Прошейте платформу Iskra JS скриптом, приведённым ниже. Для считывания данных используется библиотека для Espruino CCS811.

sensor-co2-ccs811-with-case-espruino-read-data.js
// настраиваем шину I²C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// подключаем библиотеку CCS811 для работы с датчиком качества воздуха
var gas = require("CCS811").connectI2C(PrimaryI2C);
// каждую секунду выводим показания качества воздуха:
// количество углекислого газа и летучих органических веществ в воздухе
setInterval(function() {
  print(gas.get());
}, 1000);

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

Пример для Raspberry Pi

В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры Raspberry Pi, например Raspberry Pi 4.

Схема устройства

Подключите датчик CO2 к пинам SDA и SCL шины I²C компьютера Raspberry Pi.

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Cap, которая надевается сверху на малину методом бутерброда.

Программная настройка

  1. Для стабильной работы сенсора, понизьте скорость I²C:
    1. Запустите терминал.
    2. Откройте файл настроек системы.
      sudo nano /boot/config.txt
    3. Добавьте параметр скорости I²C со значением 10 кГц.
      dtparam=i2c_baudrate=10000
    4. Сохраните файл и перезагрузите малину.
  2. Установите библиотеку Adafruit CircuitPython CCS811 через менеджер пакетов PIP.

Исходный код

Запустите на малине скрипт, приведённый ниже.

sensor-co2-ccs811-with-case-raspberry-pi-read-data.py
# подключаем необходимые библиотеки
import time
import board
import busio
import adafruit_ccs811
 
 # инициализируем шину I²C
i2c = busio.I2C(board.SCL, board.SDA)
# создаём объект для работы с датчиком CCS811
ccs811 = adafruit_ccs811.CCS811(i2c)
 
# ждём данные с датчика
while not ccs811.data_ready:
    pass
 
# если данные пришли
while True:
    # выводим в консоль количество CO2 и летучих органически веществ
    print("CO2: {} PPM, TVOC: {} PPB".format(ccs811.eco2, ccs811.tvoc))
    time.sleep(0.5)

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

Элементы платы

Приоткроем занавес и заглянем на внутренности датчика, а точнее, извлечем плату с элетронными компонентами из корпуса.

Датчик качества воздуха CCS811

Датчик качества воздуха выполнен на чувствительном элементе CCS811. Структурно чип CCS811 состоит из двух основных блоков: датчика MOX (Metal Oxide Semiconductor) и встроенного микроконтроллера с АЦП, который считывает показания внутреннего MOX-сенсора и выдаёт готовые внешнему миру по шине I²C.

Выходные данные:

  • Концентрация летучих органических веществ в воздухе (TVOC) в диапазоне 0…1187 ppb;
  • Концентрация эквивалент углекислого газа (eCO2) в диапазоне 400…8192 ppm.

Выходные контакты

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

  • Питание (V) — красный провод. Соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — чёрный провод. Соедините с землёй микроконтроллера.
  • Сигнальный (D) — оранжевый провод, пин данных шины I²C. Подключите к пину SDA микроконтроллера.
  • Сигнальный (C) — коричневый провод, пин тактирования шины I²C. Подключите к пину SCL микроконтроллера.

Регулятор напряжения 3V3

Линейный понижающий регулятор напряжения NCP582LSQ33 обеспечивает питание чипа CCS811 и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.

Преобразователь логических уровней

Преобразователь логических уровней PCA9306 необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.

Смена адреса модуля

Иногда в проекте необходимо использовать несколько сенсоров. Для смена адреса капните каплей припоя на отведённую контактную площадку на обратной стороне модуля. После чего адрес датчика сменится с 0x5A на 0x5B.

Принципиальная и монтажная схемы

Габаритный чертёж

Характеристики

  • Чип: Sciosense AMS CCS811
  • Диапазон измеряемой концентрации eCO2: 400–8192 ppm (миллионные доли);
  • Диапазон измеряемых величин TVOC: 0–1187 ppb (миллиардные доли);
  • Интерфейс: I²C
  • Адрес модуля: 0x5A (по умолчанию) / 0x5B
  • Напряжение питания: 3,3–5 В
  • Потребляемый ток: до 30 мА
  • Частот опроса: 0,25 / 1 / 10 / 60 с;
  • Длина кабеля: 0,5 м
  • Габариты: 60×30×18 мм

Ресурсы