20 мая 2016 в 15:08

Контроль качества воздуха (со2 и температуры) в офисе и дома, своими руками из песочницы

Все началось с того что я работаю в офисе, где как водится нет нормальной вентиляции. Зато есть много народу, кому-то все время жарко, другим постоянно дует.

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

image

Цена конечно тоже не маленькая, но все-таки близко к разумным пределам. И руки давно чесались по паяльнику. В качестве контролера использовать решил ESP8266. Во первых дешево, во вторых что бы передавать информацию на компьютер, свой и любого желающего в комнате. После того как собрал и оттестировал первый вариант, с программой-монитором на компьютере, решил добавить экран. Во первых это красиво. Во вторых, во многих случаях удобно.

Устройство построено на модуле ESP8266 NodeMcu Lua wi-fi. Для него была написана программа на скриптовом языке LUA. Прошивку для интерпретатора Lua под мое устройство сгенерил на on-line сервере nodemcu-build.com. Выбрал там только те модули, которые мне были необходимы для создания проекта.

Дальше я взялся за сборку устройства. Подключил датчики температуры. ds18b20. Они работают по интерфейсу 1-wire:

image

Затем собственно датчик углекислого газа MH-Z19. Он может использовать два интерфейса ШИМ и UART. Я решил сперва попробовать ШИМ, и в результате он меня удовлетворил по надежности и точности показаний.

image

И подключил дисплей по шине ISP:

image

Была написана вот такая программа под Windows. На Delphi XE8:

image

Используемый мной контролер имеет встроенный модуль WIFI, который рассылает полученную с датчиков информации как UDP broadcast пакеты по всей сети офиса. И пользователи у которых стоит программа монитор, получают информацию о состоянии воздуха в помещении и предупреждения, если ситуация становится критической.

А теперь собственно впечатления.

Прибор оказался намного полезней и интереснее чем я ожидал. Во первых больше нет проблем с проветриванием, никто не возмущается, так как у всех выскакивает предупреждение и они довольно хорошо согласуются с личными ощущениями. Ну и просто наблюдения показали что в солнечный день уровень со2 значительно ниже чем в пасмурный и дождливый, утром загрязненность воздуха выше чем днем. С первого взгляда можно понять что делать, проветривать, если зашкаливает со2, или включить кондиционер, если повышенная температура. Датчик температуры на улице хорошо показывает получится ли охладить проветриванием, или только кондиционер. Стало очевидным и понятным, что творится в комнате и как в этом жить. Был случай когда решили проветрить, открыли окно, и тут же закрыли его, датчик буквально зашкалило, И дома прибор оказался очень полезным, особенно в детской комнате, тем более что за показаниями можно следить удаленно через WiFi.

В результате все это выглядит примерно так:



Тут ссылки на исходники и все что необходимо для повторения данной конструкции
USB драйвер для Windows: www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
Программа для прошивки ESP8266: github.com/nodemcu/nodemcu-flasher
Прошивка MCU lua: drive.google.com/file/d/0B4KYGXb6-nxpOUdXdTFpcjlFZXM/view

Тут можно взять скрипты lua: drive.google.com/file/d/0B4KYGXb6-nxpeGNNbGM0U2g2dEU/view
ESPlorer для загрузки скриптов на esp8266 и отладки: esp8266.ru/esplorer/#download

Windows приложение написано на Delphi XE8. Тут исходники: drive.google.com/file/d/0B4KYGXb6-nxpei1RUWhHVXV5aTQ/view

Необходимы дополнительные компоненты:

JEDI:

wiki.delphi-jedi.org/index.php?title=JEDI_Code_Library
sourceforge.net/projects/jvcl/files

SDL Delphi Component Suite:

www.lohninger.com/sdlindex.html

Скомпилированная программа для windows: drive.google.com/file/d/0B4KYGXb6-nxpUmVXcElLektOQXM/view

На моем сайте можно получить дополнительную информацию по этому прибору и более расширенной версии
Константин @Migrator
карма
24,0
рейтинг 0,0
Программист
Похожие публикации
Самое читаемое Разработка

Комментарии (25)

  • +1
    Около месяца назад подозрительно похожа статья была на MySku: http://mysku.ru/blog/aliexpress/40219.html
    • +1
      Да, это моя статья, и она действительно похожа.
  • 0
    Хотелось бы по подробнее узнать как вы реализовали считывание СО2 уровня с этого датчика, так как по моим опытам показания от последующих считываний скачут значительно и следует усреднять показания за н-ное количество циклов.
    • +2
      Это есть в исходных скриптах.
      Примерно так:
      local function pin1cb(level) -- Функция обработки прерывания
      local tt = tmr.now()/1000; -- получаем текущее время
      if level == 1 then Если уровень высокий
      h = tt;
      tl = h - l; -- вычисляем промежуток времени прошедший с предыдущего цикла
      ppm = 5000 * (th - 2) / (th + tl - 4) -- вычисляем значение со2 по формуле из даташита.
      if ppm>300 then ListTime[3]={time=tmr.time(), data=ppm} end; -- Если данные похожи на правду записываем их в глобальную переменную
      else -- если низкий фронт
      l = tt; -- сохраняем текущее время
      th = l - h; -- вычисляем прошедшее время с предыдущего цикла
      end
      if c>3 then gpio.mode(1,gpio.INPUT) print('pp1',ppm) return ppm end -- если прошло больше 3 циклов считаем что значение получено
      c=c+1
      if level == 1 then gpio.trig(1, "down") else gpio.trig(1, "up") end -- переключаем прерывание с повышающегося фронта на понижающий и обратно.
      end

      gpio.mode(1,gpio.INT) -- устанавливаем 1 пин в режим прерывания
      gpio.trig(1, "up",pin1cb) -- настройка прерывания на 1 пине. Если фронт сигнала возрастает вызываем функцию pin1cb


      У меня нет проблем с скачущими значениями. Считываю все подряд. Даже когда прибор стоит у окна и вокруг него неспокойная воздушная обстановка. Значения конечно скачут. Но плюс/минус 150 — 250 ppm за 10 минут. И это похоже на реальную картину.
    • +1
      Проверьте у себя питание, на всякий случай, осциллографом. Вполне вероятно что с ним что-то не так ибо совсем скачкообразных значений там быть не должно.
      • +1
        Да думаю я зря волнуюсь на счет скачкообразности, в моем случае они в пределах 50 ppm в пустой квартире и 100ppm когда кто-то присутствует при измерениях каждые 10 минут (при этом каждый замер это 5 усредненных PWM циклов) Просто на графике народмон такие скачки не очень эстетично выглядят. Питаю кстати от китайского БП на 5 вольт, который на самом деле дает 5,6в, а вся схема напичкана конденсаторами. Сам CO2 датчик во время «мигания» потребляет ~45мА.

        Кстати, самое крутое что я наблюдал этим датчиком было дыхание маленького деревца которое живет у меня в гостиной. Когда я уезжал из дома на несколько дней, по ночам CO2 медленно поднимался до самого утра, а потом резко падал с наполнением комнаты светом.

        В моем случае я собрал погодную станцию в связке Atmega328+ESP8266+BMP180+MH-Z19 и наружный датчик с автономным питанием на Atmega328+light sensor+DHT22 отправляющий данные по 433mhz каналу.
  • +2
    Писал прошивку для подобного устройства, с тем же СО2-датчиком и тем же дисплеем — на lua постоянно получал ошибку про нехватку памяти для прошивки. Плюнул — и написал все в Arduino IDE. Получилось компактнее и понятнее, а lua — забыл как страшный сон.
    • 0
      Не соглашусь. Это довольно простой проект, и очень не критичный к ресурсам.
      У меня есть другой проект где несколько десятков программных модулей, десяток датчиков, управление оборудованием, обработка связи по WIFI.
      И все нормально работает.
      Да о памяти конечно приходится задумываться, но не настолько критично.
      Лично мне нравится lua своим изяществом, универсальностью, и очень быстрой отладкой.
    • +2
      Если речь о NodeMCU, то тоже столкнулся с проблемой нехватки памяти, причём на довольно простом скрипте. Позже оказалось, что есть какой то лимит на размер одного файла, поэтому скрипт нужно разбивать на модули, иначе будет ошибка нехватки памяти. Но, по-моему, писать на Си не сильно сложнее, чем на Lua, особенно когда стоит задача поморгать светодиодом с использованием готового модуля.
      • +1
        Для меня в Lua есть одна совершенно замечательная особенность. Можно в готовое, работающее устройство добавлять и изменять скрипты на ходу. Через USB или WiFi. Мне нравится что можно добавлять и менять функциональность в живую, просто пересылая из управляющей программы на PC скрипты. Проблема с памятью решается разбиением на модули и правильным их оформлением. В том числе широким использованием локальных переменных и функций.
  • +1
    На делфи еще пишут?! Расскажите пожалуйста современное применение данного языка.
    Последний раз встречал делфи года три назад на производственной фирме где люди со стажем по 5-10 лет на нем работают и банально нет времени и средств переучиваться и переводить процесс на что-то поновее.
    Есть какие-то перспективы или отрасли конкретно под этот язык?
    • 0
      Вроде пишут, по идее даже десктопный AIMP на нём написан. Хотя я сам не особо в теме.
    • +1
      Я (и не только я) на работе пишу клинские места в клиент-серверных проектах на delphi. И да, контора работает уже 15 лет.
      Delphi универсальный язык, какая в сущности разница, что на нем писать, если это не сказывается на результат?
    • 0
      > На делфи еще пишут?! Расскажите пожалуйста современное применение данного языка.
      Total Commander — достаточно современное применение? 32-битная версия до сих пор компилируется в очень старой версии Delphi. 64-битная — в Lazarus.
  • 0
    И во сколько времени/денег обошёлся прибор с софтом?
    • +1
      По деньгам примерно 3000р за детали + корпус от 200р до 1500р Мне корпус достался бесплатно.
      По времени — сейчас могу повторить за 1 день. Когда делал, экспериментировал, переделывал, думал…
      Месяц наверное.
  • +1
    Мне понравилось, как получилось! Вы — молодец. Такое бы в каждый офис.
    • 0
      Спасибо!
  • 0
    Скажите, а где контроль влажности? Это вообще-то важный показатель для самочувствия. А если есть дети — очень важный показатель (от которого зависит, например, ваш сон по ночам).
    • 0
      В офисе не актуально. Там влажностью нет ни какого способа управлять. Для дома несомненно актуально. Прикрутить датчик влажности не проблема, надо придумать как вписать показания в интерфейс. Есть такие заявки, я над этим думаю.
    • 0
      Насчет сна у меня нет такой информации. Знаю что вреден сухой воздух при длительном воздействии, как для человека, так и для некоторого оборудования и книг. Сухой воздух вызывает пересыхание слизистых оболочек и повышает вероятность заболеть ОРЗ. Зимой, без увлажнения, типично 40% влажности всего. Зимой, вентилируя помещение, снижаем влажность, так что ориентация на СО2 без учета влажности может быть вредна. Получим низкое содержание СО2, но при пересушенном воздухе.
  • 0
    Спасибо за материал, интересно. Подскажите плз, а какой из датчиков лучше брать?
    В описании на ебее написано:
    Measuring Range
    0~2000 ppm
    0~5000 ppm
    Please let us know the measuring range you need in the Remarks. If no remarks, we will ship 0~5000ppm by default.

    И кстати, $29.58+free shipping за датчик это адекватная цена?
    • +1
      По ссылкам на статьи автора можно найти как он подбирал компоненты:
      drive.google.com/file/d/0B4KYGXb6-nxpZVc0Z2trU2VHRUE/view

      Там приведена ссылка на датчик MH-Z19 за 24$ (1700 Р)
      ru.aliexpress.com/item/1PCS-module-MH-Z19-infrared-co2-sensor-for-co2-monitor-Free-shipping-new-stock-best-quality/32643995676.html

      — Migrator, было бы не плохо добавить информацию о детальках в статью, для полноценной, так сказать, инструкции.
      Также, если посмотреть Ваше видео о приборе без корпуса, можно увидеть не указанный блок питания для макетирования MB102 (3,3В 5В)

      Спасибо
      • 0
        Собственно Вы дали исчерпывающую информацию:) Блок питания оказался лишним, от микро USB питания вполне достаточно.
  • 0
    Дороговато будет. На Алли, С платной доставкой получается US $25.93. Трудно сказать. С одной стороны 2000 это уже ахтунг. С другой, точность у них одинаковая. У меня 5000. Меня устраивает.

    Это был ответ для DmitrySpb79

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