Датчик CO2 Zigbee

Углекислый газ очень негативно влияет на организм человека и является канцерогеном. Нахождение в помещении с высокой концентрацией СО2 может вызывать слабость, сонливость, головные боли, проблемы с концентрацией внимания. В связи с этим необходимо отслеживать уровень СО2 и принимать меры для его снижения.

На сегодняшний день есть несколько вариантов доступных датчиков для измерения уровня СО2, самым интересным является SenseAir S8. Его показания и будем выводить в сеть zigbee.

Схема выглядит так

Zigbee часть реализована на модуле E18-MS1PA1-PCB, кроме него на плате присутствуют собственно сам сенсор СО2 SenseAir S8 и два варианта датчиков температуры, это DS18b20 и более универсальный датчик BME280, позволяющий измерять температуру, влажность и  атмосферное давление.

Плата спроектирована в популярном форм-факторе «usb stick»можно распаять как micro USB так и USB-A разъем. Со стороны сенсора присутствует кнопка для запуска процесса принудительной калибровки и два светодиода для отображения пороговых значений. С обратной стороны так же находится сервисная кнопка, используется для запуска процесса подключения к сети и для принудительной отправки измеренных значений.

Сборка устройства не должна вызвать затруднений даже у людей с начальными навыками пайки, все элементы достаточно крупные, за исключением BME280.

В собранном виде устройство выглядит так, обратите внимание что между SenseAir S8 и платой необходимо оставить зазор.

Прошивку для этого устройства написал @anonymass, она имеет открытый исходный код и доступна здесь. Датчик поддерживается в z2m через внешний конвертер. Выглядит это так

так же реализована поддержка в SLS GatewayПо результатам теста обнаружилась высокая чувствительность SenseAir S8, сенсор оперативно реагирует на изменение уровня СО2. Для примера, ниже мой суточный график.

@anonymass для сравнения прислал свои графикиНа плату возможна установка сенсора MHZ19B, его поддержка появилась в последней версии прошивки.

Для желающих повторить файлы для заказа плат, ВОМ.

Запись опубликована в рубрике handmade, Железо с метками , , , . Добавьте в закладки постоянную ссылку.

100 комментариев на «Датчик CO2 Zigbee»

  1. Максим М говорит:

    Прошивку самостоятельно собирать 🙂 у меня главный вопрос запустится ли без распаянных элементов BME280 или DS18b20 ? и чем выдерживать зазор между платой и датчиком?

    • Jager говорит:

      Не надо ничего собирать, там есть релизы. Запустится конечно без температурных. Зазоры чем угодно, например с помощью этого

  2. Alex говорит:

    Кто-нить может кратко описать процесс сбора прошивки

  3. Павел говорит:

    Спасибо за ваш труд! Скажите пожалуйста какая толщина платы должна быть?

  4. polsik говорит:

    скачал я AirSense-master.zip и что дальше с ним делать в папке firmwares пусто

  5. lost говорит:

    Назначение SW1, SW2 и LED1, LED2, LED3 подскажите?
    SW1 — для джойна zigbee, предолагаю
    Один из LED для состоянии zigbee видимо.
    Расскажите плиз

    • lost говорит:

      Насколько я понял из кода:
      LED1 моргает при обращении к датчику CO2
      LED2 моргает если значение CO2 выше первой уставки, при этом LED3 отключен.
      LED3 моргает если значение CO2 выше второй уставки, при этом LED2 отключен.
      SW1 сброс и джойн
      А SW2 ?

  6. lost говорит:

    Разобрался:
    LED1 блинкает при обращении к датчику CO2.
    LED2 моргает если значение CO2 выше первой уставки, при этом LED3 отключен.
    LED3 моргает если значение CO2 выше второй уставки, при этом LED2 включен.
    SW2 сброс и джойн E18
    SW1 калибровка CO2

  7. Евгений говорит:

    Спасибо за ваши разработки.

    Появилось несколько вопросов:
    1) Будет ли версия платы под готовый модуль BME280 ? т.к текущий использованный датчик довольно сложно распаивать

    2) Если датчики не распаяны они будут отображаться либо при загрузке прошивка будет их искать и решать показывать или нет.

    3) почему SenseAir S8 решили развернуть стороной сенсора к плате ? это не влияет на показания?

    • Jager говорит:
      1. Нет, размеры платы не позволяют.
      2. Будут отображаться нулевые значения.
      3. Не влияет, зазора в 3-4мм более чем достаточно.
  8. assad говорит:

    Нужно ли что то дополнительно делать, чтобы работало в homeassistant. Со modkam stick v3?

    • Jager говорит:

      У меня нет НА поэтому точно сказать не могу, но если вы пробрасываете из z2m то все должно работать.

      • assad говорит:

        чтобы подключить этот датчик к homeassist нужно установить внешний конвертор:
        1. зайти в конфиг zigbee2mqtt и найти чему равно data_path. это может быть /config/zigbee2mqtt или /share/zigbee2mqtt
        2. зайти в эту директорию и скачать DIYRuZ_AirSense.js (wget https://github.com/diyruz/AirSense/releases/download/2.0.0-0/DIYRuZ_AirSense.js)
        3. прописать конвертер в конфиг, для этого найти external_converters: [] и заменить на
        external_converters:
        — DIYRuZ_AirSense.js
        4. перезапустить Zigbee2mqtt.
        5. спарить устройтсво. чтобы спарить необходимо разместить устройтсво поближе к координатору. в принципе спарить можно и вначале.

        при установке есть подвондрые камни:
        в версии zigbee2mqtt 1.16.1 установка конверторов не работает.
        чтобы исправить эту проблему пришлось перейти на другой репозиторий https://github.com/zigbee2mqtt/hassio-zigbee2mqtt , в котором проблема исправлена
        при переходе спаренные устройства сохраняются, только нужно сохранить полностью старый конфиг. если измениться data_path, то все спаренные устройства пропадут.
        исправить это можно будет если вернуть config в старое значение.

    • Дмитрий говорит:

      чтобы подключить этот датчик к homeassist нужно установить внешний конвертор:
      1. зайти в конфиг zigbee2mqtt и найти чему равно data_path. это может быть /config/zigbee2mqtt или /share/zigbee2mqtt
      2. зайти в эту директорию и скачать DIYRuZ_AirSense.js (wget https://github.com/diyruz/AirSense/releases/download/2.0.0-0/DIYRuZ_AirSense.js)
      3. прописать конвертер в конфиг, для этого найти external_converters: [] и заменить на
      external_converters:
      — DIYRuZ_AirSense.js
      4. перезапустить Zigbee2mqtt.
      5. спарить устройтсво. чтобы спарить необходимо разместить устройтсво поближе к координатору. в принципе спарить можно и вначале.

      • Дмитрий говорит:

        при установке есть подводные камни:
        в версии zigbee2mqtt 1.16.1 установка конверторов не работает.
        чтобы исправить эту проблему пришлось перейти на другой репозиторий https://github.com/zigbee2mqtt/hassio-zigbee2mqtt , в котором проблема исправлена
        при переходе спаренные устройства сохраняются, только нужно сохранить полностью старый конфиг. если измениться data_path, то все спаренные устройства пропадут.
        исправить это можно будет если вернуть config в старое значение.

  9. Геннадий говорит:

    Думали использовать BME680 ? Он по пинам совместим. Имеет датчик содержания ЛОВ. Стоит на $6 дороже, не критично.

    • Jager говорит:

      Не вижу особого смысла измерять VOC, реагирует на все, вплоть до цитрусовых.

      • Геннадий говорит:

        Верно. Но если параметр растет а ты не ел апельсины, то есть повод подумать.
        Носом не все можно уловить. Иначе и СО2 был бы не нужен.

        • Jager говорит:

          С СО2 как раз все понятно, если он растет и его «чует» специализированный сенсор то надо принимать меры. В остальном, сценарии когда в доме может случайно оказаться некое вещество которое возбудит VOC сенсор мне кажется маловероятным.

  10. Alexa говорит:

    Было бы очень желанно получить возможность управлять диодом ws2812 с платки, чтоб самому сделать и настроить индикатор. Как-то реально это впилить в прошивку? Тогда можно парк устройств на ней сильно расширить.

  11. Всеволод говорит:

    А что Вы можете сказать про модули E18-MS1PA2-PCB? Китайца говорит, что это тоже самое, только лучше (обновлённая версия). Можно ли их паять во все проекты на E18-MS1PA1-PCB без каких-либо изменений прошивки?

    • Jager говорит:

      Это не тоже самое, они скрывают какой чип усилителя стоит в этом модуле. Скорее всего китайский клон сс2591, так как прошивка именно для этого чипа нужна для него. Почитать можно здесь.

  12. Alex_ey говорит:

    Поделитесь плиз файлом Pick&Place нужен кроме BOM для заказа на jlcpcb.

    • Jager говорит:

      Это проект что бы вы поработали руками, пайки там немного.

  13. Vitaly говорит:

    Добрый день!
    А проектом формата Easyeda можно поделиться?
    и BME280 такой, я правильно понимаю?
    https://www.electronshik.ru/item/BOSCH/BME280

    • Jager говорит:

      Проектом нет, BME280 да, такой.

      • Vitaly говорит:

        Добрый день!
        а еще вопрос, на шелкографии не видно какой стороной bme паять.
        Можете подсказать?

        • Vitaly говорит:

          спасибо, разобрался)

          • Alexey говорит:

            А расскажите какой стороной ? Не могу понять.
            Первый раз такое мелкое паяю.

          • Jager говорит:

            Увеличьте фото в статье, там видно ключ. Левый нижний угол.

  14. Vitaly говорит:

    Прошу тапками не кидаться, просто не увидел инструкции по прошивке девайса. Где их можно посмотреть?

    • Jager говорит:

      Здесь

      • Vitaly говорит:

        добрый день!
        на гите 2 версии лежит:
        DIYRuZ_AirSense_EndDevice.hex
        DIYRuZ_AirSense_EndDevice_CC2592.hex

        я правильно понимаю, что первая под CC2530?

        • Jager говорит:

          Они обе под сс2530, одна для модуля без усилителя вторая соответственно с усилителем.

          • Kirill говорит:

            Я так понимаю — лучше прошивкой — роутером шить??

          • Jager говорит:

            Это как вам хочется, у меня прошито роутером.

  15. Евгений говорит:

    По ссылке на датчик пишут что товар на картинке 1.14 версии, а присылают датчик 1.00 версии. Имеется ли разница в версии датчика для описываемого устройства?

    • Jager говорит:

      Я покупал именно по той ссылке что указана, какая там внутренняя версия меня мало интересует. Устройство соответствует даташиту и работает в устройстве прекрасно.

  16. Юрий говорит:

    Собрал с датчиками MH-Z19b и BME280 (BME модулем). Все работает в НА через SLS с последней прошивкой. Но иногда (раз в час-полтора) значение давления изменяется ровно на порядки (было 765,1 мм становится 7651. Может и 76510 стать). После перезапуска приходит в норму на какое-то время. Проблема именно в давлении. Остальные показатели норм. С чем может быть связано?

    • Jager говорит:

      Обновите прошивку сенсора СО2 до версии 2.0.0 и слс до последней.

      • Юрий говорит:

        Так и сделано. Прошивка сенсора 2.0.0 SLS Version: 2020.10.12d2. Проблема очень плавающая — может прыгнуть через пол часа, а может через полтора. И всегда кратно 10. И только давление.

        • Jager говорит:

          Свяжитесь с автором SLS и отправьте ему лог.

          • Grigory говорит:

            Проблема известна, она в прошивке датчика. Автор в курсе, но исправлять не спешит, ибо исходники открыты, исправляйте 🙂

        • lost говорит:

          поставьте свежую прошивку в датчик. все решится.

  17. Igor говорит:

    Добрый вечер, хочу сделать управление кранами при утечки воды и подсоединить это к сети ZigBee. Собрал плату https://easyeda.com/editor#id=eb841c7f373e4be78a501e96c7dd1ea4|b67539266afd47689abbb8d006a49ea7 , но у меня не очень со схемотехникой и разводкой самой платы, я больше по софту. Можно ли с Вами автор связаться(телега, почта и т.д.) по поводу помощи в схемотехнике и разводке платы, с меня прошивка?

    P.S.: В основном у меня был опыт работы с STM32/Arduino/ESP32. Сейчас хочу сделать что-нибудь на ZigBee(СС2530)

    • Igor говорит:

      Вот ссылка на сам проект https://easyeda.com/igor.demyanov/control-ball-valves

    • miruff говорит:

      Добрый день! Из личного интереса тоже посмотрел Ваш проект. Мысль отличная. Если проект ожидается быть открытым, то для унификации предложил бы сделать управление не менее 6 кранами, так так 2 крана на гвс и хвс + 2 на полотенчик — это достаточный минимум, но только для маленьких квартир и старых домов. В новостройках сейчас отопление горизонтальной разводки — это +2 крана, в трешках в новостройках сейчас не редко 2 сан.узла — это +2 крана. Итого уже набегает 8 кранов, конечно это не везде и не у всех, но 6 хотя бы уже больше перекрывает потребностей. По входным датчикам — по мне так максимально возможное кол-во (в зависимости от места на плате, свободных ждпио и тд) ибо протечки могут случиться не только у стояка, но и везде где есть «стык» и давление воды. Ни на что не претендую.

      • Igor говорит:

        Ограничение есть на кол-во выводов чипа. Можно подумать как решить эту проблему. Но сам я хочу сделать больше чем одно устройство так как несколько стояков. Второй пункт почему возможно ненужно так много двигателей, стояки обычно разнесены по квартире на достаточно большое расстояние, следовательно один блок управление сделать не получится.

        • fedottt говорит:

          а если нечто типа MCP23017 притулить?
          тогда можно гирлянду собрать — мама не горюй)

  18. Jackson говорит:

    Если нет проекта, можно как-то склеит гербер файлы разных проектов? Чтобы можно было заказать платы размером 10на10 с разными проектами? Не заказывать 5 платок одного проекта потом 5 другого и платить за каждый заказ отдельно.

  19. Serg Sapov (@svsapov) говорит:

    Скачал исходники, думал на базе них можно собрать свое zigbee устройство. Но в хидерах куча файлов, которых нет в исходниках:

    #include «AF.h»
    #include «OSAL.h»
    #include «OSAL_Clock.h»
    #include «OSAL_PwrMgr.h»
    #include «ZComDef.h»
    #include «ZDApp.h»
    #include «ZDObject.h»
    #include «math.h»

    Что это и где брать?

  20. Дмитрий говорит:

    собрал две штуки, но чтото так и не понял, как они настроиваются
    co2 на одной 360, и иногда поднимается до 600.
    на другой 1800 и меньше чем на до 1300 не опускается.
    и не работает bme280 на обоих. тут, конечно, может распаял неправильно… непонятно, как проверить. внешнюю плату припаять?
    есть подозрение, что не работает из-за отсутсвия подтяжки i2c…

    • Jager говорит:

      С senseAir не нуждаются в настройке, если вам не нравятся данные вынесите сенсор на улицу и на 5 сек нажмите кнопку на плате со стороны сенсора. Для i2c подтяжка внешняя не нужна, pull up включен в прошивке.

      • Дмитрий говорит:

        разобрался. с bme280. я их наоборот запаял.не очень понятно на картинке как должно быть. а вызванивая путаешься.
        https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf
        вот сенсор изображен на рисунке. вентиляционное отверстие в верхней части корпуса должно быть с внутренней стороны платы.

        и вторая проблема: если заказываешь модули ebyte из ссылки в статье, то нужно прошивку выбирать с cc2592! обычная прошивка тоже делает вид что работает, но очень неустойчиво, на гране приема. поэтому трудно разобраться это проблемы в общем или конкретно с прошивкой.

        а вот с Co2 пока печаль.
        есть два таких модуля и для сравнения китайский датчик co2,pm2,5 тоже на senseair, последний чтото разумное показывает.
        а эти два один завышает в два раза другой занижает также.
        но вроде какие-то подвижки за два дня работы есть. жду автокалибровки.
        по поводу выноса на улицу — пробовал и один и другой — не срабатывает. в общем-то ничего не меняется для того, что завышает.

        • Jager говорит:

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

          • Дмитрий говорит:

            Там две прошивки лежит. Посмотрите

          • Jager говорит:

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

  21. Евгений говорит:

    Какую из прошивок необходимо прошивать для работы E18-MS1PA1-PCB ?

    DIYRuZ_AirSense_EndDevice.hex
    DIYRuZ_AirSense_EndDevice_CC2592.hex

  22. igrampe говорит:

    Здравствуйте, есть ли возможность заказать готовый модуль с доставкой?

  23. Карбос говорит:

    Добрый день! Я правильно понимаю, что датчик можно запитать от, например, телефонного зарядника на 5В и он будет работать?

  24. netweaver2009 говорит:

    Sorry for my English: I still have a few E18-MS1 modues (so without the Power Amplifier. Will your firmware still work, as it includes code to enable(maybe expecting feedback from) the PA? Of course the E18-MS1 will have a reduced range compared to the E18-MS1PA1. Thanks.

  25. Виктор говорит:

    If I understand you correctly, you need to use the firmware
    DIYRuZ_AirSense_EndDevice.hex

  26. Уведомление: Корпус для датчика CO2 – SaNDR.ru

  27. Уведомление: Корпус для датчика CO2 USB micro — SaNDR.ru

  28. SandrRu говорит:

    Очередная попытка сделать корпус для этого датчика 🙂
    http://sandr.ru/tag/co2/

  29. Илья Смирнов говорит:

    Здравствуйте.

    А с E18-MS1-PCB будет работать?
    Функционал роутера не нужен.

    • Jager говорит:

      Будет.

    • Павел К. говорит:

      Подскажите, я правильно понимаю, что вы хотите собрать датчик на батарейках? Тоже заинтересовался возможностью реализации с автономным питанием без роутера. Если получилось, было бы интересно узнать об автономности такой сборки.

      • Jager говорит:

        Не получится. Потребление сенсора СО2 слишком велико для батарейного питания.

        • Павел К. говорит:

          Получается по документам в среднем 70-100ма потребление (senseair + zigbee). Согласен, даже если 10000ма powerbank всего 100 часов. А по времени никак не зарезать, снимать показания раз в минуту, например?

          • Jager говорит:

            Вы какие то не те документы смотрите. Только у senseair s8 до 300мА, + сенсору еще нужно время на разогрев, т.е. выход в рабочий режим. В общем не батарейная тема.

  30. Kirill говорит:

    Вообще не могу понять как подключить к программеру и как прошить! Хотя до этого прошивал 2538! Кто-то может внятную инструкцию выложить — какие контакты куда и какой прогой шить??

  31. Kirill говорит:

    Вроде все ОК, но не могу понять — в Домотикзе не появляется новое устройство — только есть в логе, что «Starting interview of ‘0x00124b001ec6c625′»}
    И все 🙁 В чем может быть проблема?

    • Jager говорит:

      Так никто и не заявлял поддержку в нем. Точно работаетс в SLS, z2m, ioBroker.

      • Kirill говорит:

        а z2m — это не zigbee2mqtt?? У меня в Домотикзе плагин стоит и zigbee2mqtt свежий — не подскажитекуда копать?

        • Kirill говорит:

          2021-03-07 09:23:51.624 (CC2538) Device DIYRuZ_AirSense 0x00124b001ec6c625 (0x00124b001ec6c625)

          MQTT message: zigbee2mqtt/bridge/logging {‘level’: ‘info’, ‘message’: ‘MQTT publish: topic \’zigbee2mqtt/0x00124b001ec6c625\’, payload \'{«linkquality»:42,»pressure»:null,»temperature»:0}\»} — у меня не распаяны датчики температуры и давления, а где СО2 показания??

          и потом так

          MQTT message: zigbee2mqtt/bridge/log {‘message’: ‘left_network’, ‘meta’: {‘friendly_name’: ‘0x00124b001ec6c625’}, ‘type’: ‘device_removed’} 🙁

  32. Дмитрий Муляр говорит:

    Подскажите пожалуйста эта прошивка будет работать с E18-MS1PA2-PCB и MHZ19B? Заранее спасибо.
    https://github.com/diyruz/AirSense/releases/download/4.0.2/DIYRuZ_AirSense_Router_CC2591.hex

    • Jager говорит:

      Я не проверял работу с этим модулем, поэтому однозначного ответа дать не могу.

Добавить комментарий