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

kpachbiy
Offline
Зарегистрирован: 08.11.2015

Добрый день!

Взял Arduino UNO и датчик CCS811.

Как написано в магазине, датчик работает на 3.3 вольта, по этому купил преобразователь уровней 5V-3V.

Подключил преобразователь к ардуино:
5V - HV
GND - GND
A4 - HV1
A5 - HV2

Подключил датчик к преобразователю
VCC - LV
GND - GND
SDA - LV1
SCL - LV2

Запустил стандартный скетч (внизу поста), но он всегда выдёт ошибку "Failed to start sensor! Please check your wiring."

Я купил неправильные штуки или соединил неправильно?
Как диагностировать проблему? 

Спасибо!

#include "Adafruit_CCS811.h"

Adafruit_CCS811 ccs;

void setup() {
  Serial.begin(9600);
  
  Serial.println("CCS811 test");
  
  if(!ccs.begin()){
    Serial.println("Failed to start sensor! Please check your wiring.");
    while(1);
  }

  //calibrate temperature sensor
  while(!ccs.available());
  float temp = ccs.calculateTemperature();
  ccs.setTempOffset(temp - 25.0);
}

void loop() {
  if(ccs.available()){
    float temp = ccs.calculateTemperature();
    if(!ccs.readData()){
      Serial.print("CO2: ");
      Serial.print(ccs.geteCO2());
      Serial.print("ppm, TVOC: ");
      Serial.print(ccs.getTVOC());
      Serial.print("ppb   Temp:");
      Serial.println(temp);
    }
    else{
      Serial.println("ERROR!");
      while(1);
    }
  }
  delay(500);
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

смотрим спецификацию

Спецификация:

  • Диапазон измеряемой концентрации eCO2: 400…8192 ppm;
  • Диапазон измеряемых величин TVOC: 0…1187 ppb;
  • Диапазон рабочих температур: -40…+85 °C;
  • Интерфейс: I2C(400 кГц);
  • Напряжение питания: 1,8…3,3 В;
  • Период опроса: 0,25/ 1/10/ 60 с;
  • Потребляемая мощность (1,8 В): 0,034 мВт (Mode 0); 46 мВт (Mode 1 и 4); 7 мВт (Mode 2); 1,2 мВт (Mode 3);
  • Размер: 14мм х 20мм

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Померяйте напряжение на LV - есть ли там 3.3V

Ну и, само-собой, преобразователь может на скоростях I2C не тащить

kpachbiy
Offline
Зарегистрирован: 08.11.2015

Это значит, что мне нужно купить другой преоброзователь?

Будет ли работать через такой дилитель напряжения?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Это значит, что сначала нужно измерения на LV провести.

sds
Offline
Зарегистрирован: 29.10.2012

Я игрался с двумя такими датчиками, купленными у китайцев

Первый умер почти сразу с HEATER_FAULT, не успев дойти до завершения тестов. Второй жив, но выдает иногда не совсем то, что от него ждешь.

Но библиотеку использовал не ардуиновскую, а доработанную отсюда:

  https://github.com/AKstudios/

Оставшийся в живых датчик после включения работает вроде как нормально в течении нескольких часов и меняет показания в результате внешних воздействий (подышать на датчик, открыть/закрыть окна), а потом переводит в режим показаний "мы все уже должны умереть". После переподключения питания снова "ну, в целом, всё ОК". В причинах так и не разобрался, забросив тесты до лучших времен

Пример лога с передергиванием пиитания:

[10010000] [da,08,00,90,02,db,14,52] [10010000] eCO2:5202ppm, TVOC:731ppb
[10010000] [da,08,00,90,02,db,14,52] [10010000] eCO2:5202ppm, TVOC:731ppb
[10010000] [cb,08,00,90,03,95,19,18] [10010000] eCO2:6424ppm, TVOC:917ppb
[10010000] [c0,08,00,90,04,3e,1d,6b] [10010000] eCO2:7531ppm, TVOC:1086ppb
[10010000] [b9,08,00,90,04,84,1f,38] [10010000] eCO2:7992ppm, TVOC:1156ppb
[10010000] [bb,08,00,90,04,5e,1e,41] [10010000] eCO2:7745ppm, TVOC:1118ppb
[10010000] [ce,08,00,90,03,43,16,fc] [10010000] eCO2:5884ppm, TVOC:835ppb
[10010000] [c8,08,00,90,03,95,19,18] [10010000] eCO2:6424ppm, TVOC:917ppb
[10010000] [dc,08,00,90,02,ab,13,14] [10010000] eCO2:4884ppm, TVOC:683ppb
[10010000] [d4,08,00,90,02,fe,15,36] [10010000] eCO2:5430ppm, TVOC:766ppb
[10010000] [d7,08,00,90,02,e0,14,70] [10010000] eCO2:5232ppm, TVOC:736ppb
[10010000] [d8,08,00,90,02,d3,14,20] [10010000] eCO2:5152ppm, TVOC:723ppb
[10010000] [d2,08,00,90,03,17,15,d9] [10010000] eCO2:5593ppm, TVOC:791ppb
[10010000] [c9,08,00,90,03,86,18,b6] [10010000] eCO2:6326ppm, TVOC:902ppb
[10010000] [d0,08,00,90,03,2b,16,61] [10010000] eCO2:5729ppm, TVOC:811ppb
[10010000] [d0,08,00,90,03,2b,16,61] [10010000] eCO2:5729ppm, TVOC:811ppb
[10010000] [ca,08,00,90,03,7a,18,63] [10010000] eCO2:6243ppm, TVOC:890ppb
[10010000] [cf,08,00,90,03,38,16,b7] [10010000] eCO2:5815ppm, TVOC:824ppb
[10010000] [ce,08,00,90,03,43,16,fc] [10010000] eCO2:5884ppm, TVOC:835ppb
[10010000] [c8,08,00,90,03,95,19,18] [10010000] eCO2:6424ppm, TVOC:917ppb
[10010000] [ce,08,00,90,03,43,16,fc] [10010000] eCO2:5884ppm, TVOC:835ppb
[10010000] [ce,08,00,90,03,43,16,fc] [10010000] eCO2:5884ppm, TVOC:835ppb
[10010000] [cd,08,00,90,03,54,17,6d] [10010000] eCO2:5997ppm, TVOC:852ppb
[10010000] [d5,08,00,90,02,f2,14,e9] [10010000] eCO2:5353ppm, TVOC:754ppb
[10010000] [d2,08,00,90,03,17,15,d9] [10010000] eCO2:5593ppm, TVOC:791ppb
[10010000] [c6,08,00,90,03,af,19,bf] [10010000] eCO2:6591ppm, TVOC:943ppb


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CCS811 test
-------------------------------------------------------------------
CCS811 init ok
Hardware ID: 0x81
Hardware version: 0x12
Firmware bootloader version: 0x10
Firmware application version: 0x11
CCS811 open successfully. Status: [10010000] 

[status b] [07 06 05 04 02 03 00 01] [status a]
-------------------------------------------------------------------
[10010000] [a8,0d,00,90,00,00,00,00] [10010000] ERROR 106: ERR_MEASURE_ERROR
[10010000] [9c,0d,00,90,00,00,00,00] [10010000] ERROR 106: ERR_MEASURE_ERROR
[10010000] [97,0d,00,90,00,00,00,00] [10010000] ERROR 106: ERR_MEASURE_ERROR
[10010000] [9b,0d,00,90,00,00,01,90] [10010000] eCO2:400ppm, TVOC:0ppb
[10010000] [9c,0d,00,90,00,00,01,90] [10010000] eCO2:400ppm, TVOC:0ppb
[10010000] [9e,0d,00,90,00,00,01,90] [10010000] eCO2:400ppm, TVOC:0ppb
[10010000] [96,0d,00,90,00,05,01,b1] [10010000] eCO2:433ppm, TVOC:5ppb
[10010000] [98,0d,00,90,00,03,01,a7] [10010000] eCO2:423ppm, TVOC:3ppb
[10010000] [a4,0d,00,90,00,00,01,90] [10010000] eCO2:400ppm, TVOC:0ppb
[10010000] [a2,0d,00,90,00,01,01,99] [10010000] eCO2:409ppm, TVOC:1ppb
[10010000] [9d,0d,00,90,00,04,01,b0] [10010000] eCO2:432ppm, TVOC:4ppb
[10010000] [9e,0d,00,90,00,03,01,aa] [10010000] eCO2:426ppm, TVOC:3ppb
[10010000] [9d,0d,00,90,00,04,01,b0] [10010000] eCO2:432ppm, TVOC:4ppb
[10010000] [9c,0d,00,90,00,05,01,b4] [10010000] eCO2:436ppm, TVOC:5ppb
[10010000] [a3,0d,00,90,00,00,01,93] [10010000] eCO2:403ppm, TVOC:0ppb
[10010000] [a4,0d,00,90,00,00,01,90] [10010000] eCO2:400ppm, TVOC:0ppb
[10010000] [9a,0d,00,90,00,06,01,bc] [10010000] eCO2:444ppm, TVOC:6ppb

 

Посмотрите вышеприведенную ссылку на библиотеку

Инициализация устройства проста:

1. Включаем питание (устройство переходит в boot-mode)

2. Перевод датчика в APP-MODE

3. Проверка, что APP-MODE установился

4. Задание частоты сбора показаний (MEAS-MODE)

На всех этапах можно считывать статусный регистр. STATUS + ERROR_ID должны обо всём рассказать

#define STATUS          0x00
#define MEAS_MODE       0x01
#define ALG_RESULT_DATA 0x02
#define ENV_DATA        0x05
#define APP_START       0xF4
#define HW_ID           0x20
#define HW_VER          0x21
#define BOOTLDR_VER     0x23
#define APP_VER         0x24
#define ERROR_ID        0xE0
#define SW_RESET        0xFF

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

sds пишет:

Я игрался с двумя такими датчиками, купленными у китайцев

Первый умер почти сразу с HEATER_FAULT, не успев дойти до завершения тестов. Второй жив, но выдает иногда не совсем то, что от него ждешь.

Без Level shifter подключали?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

В адафрутовской библиотеке адрес забит 0x5A но у css811 он может быть и 0x5B.

Вы бы сначала сканером поискали ваш I2C модуль, сканер лежит здесь https://playground.arduino.cc/Main/I2cScanner

А вот когда сканер найдет адрес 0x5A или 0x5B тогда и дальше эксперементируйте. У меня модуль подключен через PCA9515 описание тут https://www.nxp.com/docs/en/data-sheet/PCA9515.pdf

 

sds
Offline
Зарегистрирован: 29.10.2012

С адресами такое там:

CCS811_ADDR 0x5A  /* when I2C_ADDR pin is LOW */
CCS811_ADDR 0x5B  /* when I2C_ADDR pin is HIGH */

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Andrey12 пишет:

А вот когда сканер найдет адрес 0x5A или 0x5B тогда и дальше эксперементируйте. У меня модуль подключен через PCA9515 описание тут https://www.nxp.com/docs/en/data-sheet/PCA9515.pdf

Как он в деле?  С MH-Z19B сравнивали?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

sds пишет:

Я игрался с двумя такими датчиками, купленными у китайцев

Первый умер почти сразу с HEATER_FAULT, не успев дойти до завершения тестов. Второй жив, но выдает иногда не совсем то, что от него ждешь.

Оставшийся в живых датчик после включения работает вроде как нормально в течении нескольких часов и меняет показания в результате внешних воздействий (подышать на датчик, открыть/закрыть окна), а потом переводит в режим показаний "мы все уже должны умереть". После переподключения питания снова "ну, в целом, всё ОК". В причинах так и не разобрался, забросив тесты до лучших времен

У меня оба живы, но поведение такое же как ты и описал.

В даташите на 10 странице (https://cdn.sparkfun.com/assets/learn_tutorials/1/4/3/CCS811_Datasheet-D... ) сказано про  Automatic Baseline Correction и Manual Baseline Correction, вобщем не все так просто с датчиком как бы хотелось, я усредняю показания за минуту, тогда результат нормальный. Но за время инкубации (21 день) стабильно 2 раза выдает тревогу на пустом месте :-(

sds
Offline
Зарегистрирован: 29.10.2012

Что-то не разобрался с ссылками на картинки :( 

Здесь "схема". Как раз фиксировал перед разборкой

https://yadi.sk/i/fGrB7BX33YoQkn

https://yadi.sk/i/7snUo7Rf3YoRBL

sds
Offline
Зарегистрирован: 29.10.2012

Да, думал в сторону Baseline Correction, но руки так и не дошли

sadman41
Онлайн
Зарегистрирован: 19.10.2016

https://www.terraelectronica.ru/news/4996

На плате ENS-CCS811-SB кроме датчика CCS811 расположен датчик температуры и влажности ENS210. Эти сенсоры используют общую шину I2C для связи с мостовой микросхемой CP2112 (рис. 9). Используя данные от ENS210, пользователь всегда сможет компенсировать температурную погрешность CCS811.

Мож тут собака порылась?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

sadman41 пишет:

Andrey12 пишет:

А вот когда сканер найдет адрес 0x5A или 0x5B тогда и дальше эксперементируйте. У меня модуль подключен через PCA9515 описание тут https://www.nxp.com/docs/en/data-sheet/PCA9515.pdf

Как он в деле?  С MH-Z19B сравнивали?

Смотря для каких целей, для инкубатора и подобных ему конструкций где надо автоматически измерять CO2 и в зависимости от показаний принмать решение, точно не рекомендую. Показывать качество воздуха и содежание CO2 в помещении может, сенcор в ccs811 такой же как и в датчиках серии MQ.

Показания MH-Z19B и ccs811 не сравнивал, MH-Z19B позже купил. Но может если прикручу к никубатору MH-Z19B  то сравню.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Если как MQ, то вопросов нет. Я MH-Z19B пользуюсь (без курятника) - претензий нет. Правда, первый подозрительно быстро подох, но второй молотит второй год уже.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

sadman41 пишет:

https://www.terraelectronica.ru/news/4996

На плате ENS-CCS811-SB кроме датчика CCS811 расположен датчик температуры и влажности ENS210. Эти сенсоры используют общую шину I2C для связи с мостовой микросхемой CP2112 (рис. 9). Используя данные от ENS210, пользователь всегда сможет компенсировать температурную погрешность CCS811.

Мож тут собака порылась?

На али есть такой вот совмещенный модуль, хотел его прикупить для второго инкубатора. 

https://ru.aliexpress.com/item/CCS811-HDC1080-CO/32867324285.html

ccs811 может работать как с коррекцией используя температуру и влажность так и без нее. У меня сейчас работает связка ccs811 и si7021. Но после того как ccs811 показал себя не с лучшей стороны, решено было следующий инкубатор делать на SHT30 и MH-Z19B

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

sadman41 пишет:

Если как MQ, то вопросов нет. Я MH-Z19B пользуюсь (без курятника) - претензий нет. Правда, первый подозрительно быстро подох, но второй молотит второй год уже.

The CCS811 is an ultra-low power digital gas sensor solution which integrates a metal oxide (MOX) gas sensor