====== Датчик качества воздуха 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]]