====== Датчик качества воздуха CCS811: инструкция по использованию и примеры ======
Используйте [[amp>product/sensor-co2-ccs811-with-case?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|сенсор CO2 CCS811]] для проверки качества воздуха в вашей квартире или офисе.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case.5.jpg?nolink |}}
===== Подробности про датчики качества воздуха =====
Окружающий нас воздух в атмосфере состоит из:
* 78% азота (N2)
* 21% кислорода (O2)
* 1% приходится на долю различных примесей, например инертные газы, углекислый газ, угарный газ и другие органические летучие вещества ЛОВ (от англ. total volatile organic compounds, TVOC).
Несмотря на то, что в процентном соотношении количества примесей мало, изменение их концентрации может оказаться очень неприятным и даже опасным для человека.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-work-process.1.png?nolink |}}
Ранее для оценки качества воздуха TOVC применяли датчики CO2: сначала вычисляли концентрацию углекислого газа CO2, а далее высчитывали TVOC. Но традиционные датчики CO2 нечувствительны на курение, бытовую химию, чистящие средства, лакокрасочные материалы и другую парфюмерию.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-work-process.2.png?nolink |}}
Датчик качества воздуха CCS811 высчитывает концентрацию летучих органических веществ (TVOC), а затем только вычисляет эквивалентное значения углекислого газа (eCO2): эквивалентное, т.к. количество углекислого газа (CO2) считается расчётным путём из концентрации летучих органических веществ (TVOC).
===== Пример работы для Arduino и XOD =====
В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии [[amp>collection/arduino?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Arduino]], например [[amp>product/arduino-uno?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Uno]].
* [[amp>page/arduino-ide?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Как начать работу с Arduino?]]
* [[amp>page/xod-ide?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Как начать работу с XOD?]]
==== Схема устройства ====
Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Arduino Uno. Для коммуникации используйте выходной провод от сенсора совместно с
[[amp>product/wire-mm?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|соединительными проводами «папа-папа»]].
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-example-arduino.png?nolink |}}
Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Troyka Shield]], которая надевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте выходной провод от сенсора.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-example-arduino-troyka-shield.png?nolink |}}
==== Код для Arduino IDE ====
Для упрощения работы с датчиком скачайте и установите библиотеку [[https://github.com/adafruit/Adafruit_CCS811|Adafruit_CCS811]], а затем прошейте платформу Arduino скетчем, приведённым ниже.
// библиотека для работы с датчиком качества воздуха 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 =====
В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии [[amp>collection/espruino?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Espruino]], например [[amp>product/iskra-js?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Iskra JS]].
[[:js:ide|Как начать работу с Espruino?]]
==== Схема устройства ====
Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Iskra JS. Для коммуникации используйте выходной провод от сенсора совместно с
[[amp>product/wire-mm?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|соединительными проводами «папа-папа»]].
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-example-espruino.png?nolink |}}
Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Troyka Shield]], которая надевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте выходной провод от сенсора.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-example-espruino-troyka-shield.png?nolink |}}
==== Исходный код ====
Прошейте платформу Iskra JS скриптом, приведённым ниже. Для считывания данных используется [[https://www.espruino.com/CCS811|библиотека для Espruino CCS811]].
// настраиваем шину 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 =====
В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Raspberry Pi]], например [[amp>product/raspberry-pi-4-model-b-4-gb?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Raspberry Pi 4]].
[[articles:rpi-guide|Подготовка к работе с Raspberry Pi]]
==== Схема устройства ====
Подключите датчик CO2 к пинам ''SDA'' и ''SCL'' шины I²C компьютера Raspberry Pi.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-example-raspberry-pi.png?nolink |}}
Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/raspberry-troyka-cap?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Troyka Cap]], которая надевается сверху на малину методом бутерброда.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-example-raspberry-pi-troyka-cap.png?nolink |}}
==== Программная настройка ====
- [[articles:rpi-guide|Подготовьте Raspberry Pi]]
- [[articles:rpi-interfaces#интерфейс_i_c|Включите шину I²C]]
- Для стабильной работы сенсора, понизьте скорость I²C:
- Запустите терминал.
- Откройте файл настроек системы.sudo nano /boot/config.txt
- Добавьте параметр скорости I²C со значением 10 кГц.dtparam=i2c_baudrate=10000
- Сохраните файл и перезагрузите малину.
- Установите библиотеку [[https://pypi.org/project/adafruit-circuitpython-ccs811/|Adafruit CircuitPython CCS811]] через менеджер пакетов PIP.
==== Исходный код ====
Запустите на малине скрипт, приведённый ниже.
# подключаем необходимые библиотеки
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''.
===== Элементы платы =====
Приоткроем занавес и заглянем на внутренности датчика, а точнее, извлечем плату с элетронными компонентами из корпуса.
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-annotation.png?nolink |}}
==== Датчик качества воздуха CCS811 ====
Датчик качества воздуха выполнен на чувствительном элементе {{ :products:sensor-co2-ccs811-with-case:ccs811-datasheet.pdf |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 ====
Линейный понижающий регулятор напряжения {{ :products:sensor-co2-ccs811-with-case:ncp582lsq33-datasheet.pdf |NCP582LSQ33}} обеспечивает питание чипа CCS811 и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.
==== Преобразователь логических уровней ====
Преобразователь логических уровней {{ :products:sensor-co2-ccs811-with-case:pca9306-datasheet.pdf |PCA9306}} необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.
==== Смена адреса модуля ====
Иногда в проекте необходимо использовать несколько сенсоров. Для смена адреса капните каплей припоя на отведённую контактную площадку на обратной стороне модуля. После чего адрес датчика сменится с ''0x5A'' на ''0x5B''.
===== Принципиальная и монтажная схемы =====
{{:products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-schematic.png?direct&550 |}}
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-layout-top.png?direct&120|}}
{{ :products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-layout-bottom.png?direct&120|}}
===== Габаритный чертёж =====
[[this>_media/products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-dimensions.pdf|{{:products:sensor-co2-ccs811-with-case:sensor-co2-ccs811-with-case-dimensions.png}}]]
===== Характеристики =====
* Чип: 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 мм
===== Ресурсы =====
* [[amp>product/sensor-co2-ccs811-with-case?utm_source=man&utm_campaign=sensor-co2-ccs811-with-case&utm_medium=wiki|Датчик CO2 CCS811]] в магазине.
* [[https://github.com/amperka/hardware-drawings/blob/master/sensor-co2-ccs811-with-case.svg|Векторное изображение датчика]]
* {{ :products:sensor-co2-ccs811-with-case:ccs811-datasheet.pdf |Datasheet на датчик CCS811}}
* {{ :products:sensor-co2-ccs811-with-case:ncp582lsq33-datasheet.pdf |Datasheet на регулятор напряжения 3V3}}
* {{ :products:sensor-co2-ccs811-with-case:pca9306-datasheet.pdf |Datasheet на преобразователь логический уровней PCA9306}}
* [[https://github.com/adafruit/Adafruit_CCS811|Библиотека для Arduino]]
* [[https://www.espruino.com/CCS811|Библиотека для Espruino]]
* [[https://github.com/adafruit/Adafruit_CircuitPython_CCS811|Библиотека для Raspberry Pi]]