Белый Куб на страже чистоты воздуха, часть 2

Вторая часть публикации о Белом Кубе.В первой части был описан самодельный прибор для измерения параметров окружающей среды. Это вторая часть публикации.

Конструкция Белого Куба

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

image

image

Ардуино Нано, модуль Wi-Fi и модуль с датчиками давления и пр. смонтированы на вертикально установленных планках. На планках сделаны контактные площадки путем прорезывания фольги, с боков припаяны разъемы. Разъемы куплены в Буром Медведе. Модуль Wi-Fi имеет разъем с шагом 2 мм, а не стандартные 2.54. По высоте планки сделаны больше, чем высота модулей, оставшееся место использовано для размещения дискретных элементов (транзистора управления нагревом датчика СО, резисторов подтяжки I2C и 1Wire и т.д. На снимке видно также петельку из провода, ее я использовал при отладке системы для присоединения земляного вывода щупа осциллографа и щупа тестера.

Планки установлены по месту пайкой к основанию. Для надежного расплавления припоя надо использовать мощный паяльник, у меня 100 ваттный с медным жалом в палец толщиной made in USSR.

Питание БК осуществляется от внешнего источника питания номиналом 5в на 2 А. Я использовал источник от неисправного рутера DLINK. БК потребляет несколько меньше 2 А и блок питания имеет запас по току. Встроенный стабилизатор Ардуино не используется. При отладке можно питать БК от компьютера, но аналоговые датчики газов надо вынуть из разъемов, иначе тока от USB не хватит. Одновременное подключение внешнего источника питания и USB не рекомендуется. У меня USB порт в ноутбуке Lenovo X200 не сгорел, но и не работал. Нет никаких гарантий, что и у вас не сгорит, настойчиво не рекомендую так делать.

На корпусе БК закреплено два одинаковых круглых разъема. Один — для подачи питания, другой — для подсоединения шлейфа с температурными датчиками 18B20. Не совсем верное решение с точки зрения дуракоустойчивости (можно перепутать разъемы), возможно в будущем заменю разъем датчиков на другой тип.

image

Для охлаждения и обмена с внешней средой в корпусе просверлены отверстия диаметром 8 мм. Поскольку примененные датчики газов требуют нагрева измерительной поверхности, то внутри Белого Куба выделяется довольно много тепла. При напряжении 5 вольт ток потребления около 2 А, что дает примерно 10 ватт тепла. Внутри Белый Куб нагревается до температуры около 40 градусов, по показаниям датчика температуры из BMP085. Такая высокая внутренняя температура привела к необходимости вынесения датчика влажности и температуры окружающего воздуха за пределы Куба, иначе показания датчика влажности заметно искажаются.После ряда экспериментов в попытке сделать тепловую изоляцию датчика от корпуса без подвижных элементов я остановился на поворотном теплоизолирующем кронштейне. Кронштейн сделан из стандартной деревянной палочки для еды :) Датчик SHT10 закреплен на торце.

image

Датчик имеет точки для пайки с обоих боков, хотя для обмена используются точки только одного бока. Точки со второго бока использованы для крепления — к ним припаяны пара коротких никуда не присоединенных провода. Это позволило надежно прикрепить датчик у торцу кронштейна.

image

В боковой поверхности куба сделано высокое прямоугольное отверстие. В этот паз задвигается кронштейн с датчиком SHT10. Это сделано для предохранения от повреждений кронштейна и датчика при переноске, иначе выступающий на 10 см кронштейн легко сломать. Для легкого извлечения кронштейна сделан лепесток из изоляционной ленты черного цвета. Механизм позволяет убрать чувствительный датчик в корпус при переноске Куба и легко достать датчик поворотом кронштейна при работе системы в стационарном положении.

image

Диаметр отверстий в Кубе для охлаждения, их число и расположение определено из инженерно-интуитивных размышлений и воспоминаний предмета «Тряпки», они же «курс свойства электрорадиоматериалов», в рамках которого рассказывали о проектировании пассивных систем охлаждения РЭА. Основное, что важно — диаметр отверстий, который не должен быть малым, чтобы воздух проходил через них.

Модуль Wi-Fi пришел из Китая без внутренней антенны, только с разъемом под внешнюю типа U-FL. Я был вынужден купить дополнительно в DESSY.RU антенны для монтажа внутри корпуса (ANT 2.4 ESG-2400–12 UFL-F, цена около 150 р). Знал бы заранее — заказал бы точно такие же антенны вместе с модулями. К сожалению, на сайте продавца (DX.COM) фото модуля с внутренней антенной и в описании упоминается наличие и внутренней и внешней антенны. Впрочем, я открыл тикет и мне вернули деньги за антенны. Как я уже упоминал, модуль этот представляет собой усеченную версию рутера, к которому можно подключить дополнительно до четырех разъемов RJ45. Внутри имеется Линукс. По умолчанию модуль после включения настроен на режим точки доступа с паролем »12345678» (а не »0000000», как ошибочно указано в его описании). Для запуска модуля надо подключить антенну и подать питание 5 вольт на вывод 1 и землю на вывод 2.

Через примерно минуту в вай-фай окружении появится устройство типа HI-LINK_A3B8, где последние символы соответствуют МАС адресу модуля, написанному у него на панели.

image

Подключаемся, вводим пароль (12345678), настраиваем у машины TCP\IP протокол в сеть 192.168.16.ХХХ. Адрес модуля по умолчанию — 192.168.16.254, логин-пароль admin\admin. Я изменил режим работы модуля на WiFi Client Serial. Это режим, в котором модуль коннектится к домашней точке доступа и обеспечивает прозрачную передачу сериал данных:

image

Первый сериал порт сконфигурирован на скорость 38400 и поставлен в режим server. Остальные настройки без изменений.

image

Второй сериал порт также поставлен в режим сервер, остальное без изменений. С тестовыми целями сигнал Tx (вывод 22) подан на вход Rx (вывод 26).В результате получилось, что при обращении по адресу 192.168.1.155:8080 доступен первый сериал порт, по адресу 192.168.1.155:8081 — второй, а сам рутер — по адресу 192.168.1.155:80.Модуль так же умеет показывать уровень сигнала. Можно сравнить работу двух внешних антенн в одинаковых условиях. По моим данным получилось, что купленные плоские антенны работают лучше, чем штыревые антенны от старой WiFi PCI карты.

image

Проверить работу модуля можно программой PUTTY в режиме соединения telnet.Первый сериал порт работает со скоростями до 115200, второй — до 57600. В Белом Кубе второй сериал порт не используется.

Еще несколько фото внутреннего устройства БК:

e6f5e633aca943478564a4a51028c9f2.JPG

60aa5d804b134c2f8d8cb0475ea4ca89.JPG

67674a93438941e6aabce10e4a3c24b1.JPG

Пересчет показаний аналоговых датчиков газов в цифровое значение в ppm (parts per million, частей на миллион).

Из медицинской литературы я извлек следующие данные:

Острые эффекты отравления окисью углеродапо отношению к окружающей концентрации в частях на миллион (концентрация, ppm):35 ppm (0,0035%) — головная боль и головокружение в течение шести-восьми часов постоянной экспозиции100 ppm (0,01%) — незначительная головная боль после двух-трех часов экспозиции200 ppm (0,02%) — незначительная головная боль после двух-трех часов экспозиции, потеря критики400 ppm (0,04%) — фронтальная головная боль после одного-двух часов экспозиции800 ppm (0,08%) — головокружение, тошнота и судороги после 45 минут экспозиции; потеря чувств через 2 часов1600 ppm (0,16%) — головная боль, тахикардия, головокружение, тошнота после 20 минут экспозиции; смерть менее чем за 2 часа3200 ppm (0,32%) — головная боль, головокружение, тошнота после 5–10 минут экспозиции; смерть через 30 минут6400 ppm (0,64%) — головная боль, головокружение через 1–2 минуты экспозиции; судороги, остановка дыхания и смерть через 20 минут12800 ppm (1,28%) — бессознательное после 2–3 вдохов, смерть менее чем за три минутыКонцентрация0,1 ppm — естественный уровень атмосферы (MOPITT)0,5 — 5 ppm — средний уровень в домах5 — 15 ppm — рядом с правильно отрегулированой газовой плитой в доме100 — 200 ppm — от выхлопных газов от автомобилей5000 ppm — в дыме от дровяной печи7000 ppm — в теплых выхлопных газах автомобилей без катализатора

Из этих данных следует, что имеет смысл измерять значения уровня СО в диапазоне от единиц ppm до 100 ppm, а все значения выше этого уровня считать смертельно опасными. Это также подтверждается тем фактом, что первый порог в промышленных датчиках устанавливается в 20 ppm, второй — 100 ppm.

Производитель датчика MQ7 предоставляет в своем мануале все необходимые данные для создания алгоритма пересчета показаний аналогового вольтметра в цифры ppm. Внимательное изучение этого документа дает следующие исходные данные:

Сопротивление датчика в чистом воздухе может быть в диапазоне 2–20 КОм.Сопротивление нагрузки рекомендуется в районе 10 к. Изучение деталей на печатной плате датчика показало, что в готовом модуле установлен резистор 1 КОм. Как будет показано далее, такой нагрузочный резистор дает выходное напряжения датчика в диапазоне от примерно 400 мВ в чистом воздухе до 5 вольт при значении CO около 1000 ppm. Этот диапазон на порядок перекрывает потребность измерения СО. Опасное значение СО в 100 ppm дает примерно 3.6 вольта на выходе датчика.

График зависимости соотношения сопротивления датчика от уровня газа в смеси:

453dd508d1284545b01fe18b808b996f.png

Жирные черные линии добавлены мной для проверки формальной корректности данных. Я проверял, сойдутся ли в точке 0 три линии — вертикальная ось у, горизонтальная прямая зависимости сопротивления датчика в чистом воздухе и линия зависимости сопротивления датчика от уровня примеси детектируемого газа в смеси. Как видно — имеется практическое попадание в одну точку с учетом погрешностей.

Используя этот график можно составить таблицу зависимости соотношения сопротивления датчика в измеряемой смеси и чистом воздухе от количества примеси детектируемого газа. Я применил технический прием — записывал в табличку в Экселе показания положения курсора, наводя его на нужные точки на графике. Нужные мне значения попадают между измеренными значениями. Я применил метод линейной аппроксимации для вычисления промежуточных значений. Таким образом я получил значения соотношения для значений ppm в диапазоне 10, 20, 30… 100, 200, 300, … 1000

Эти значения изменения сопротивления я пересчитал в значения напряжения и далее в показания ADC в диапазоне 0 — 1023. Построив график и аппроксимирующую кривую, я использовал эти данные для вывода формулы преобразования значений ADC в значения ppm для СО.

Вот таблица:

908402af9acc4f42844392171b558168.png

Колонка pop — это значения ADC от слова «попугаи». Exp — расчетные значения ppm по формуле =ОКРУГЛ (10*EXP ((pop-339)/175);0)

Формул выводить надо две, одну для диапазона 0–100 ppm и вторую для диапазона 100–1000 ppm. Я вывел первую и решил все выше 100 ppm (более 3,6В) считать смертельно опасным.

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

Скетч можно скачать тут

Программа WhiteBox для приема данных от БК, логирования и графического отображения данных написана на языке Visual Basic в среде Visual Studio Express 2012.

Архив с проектом можно скачать тут

В программе реализован механизм восстановления соединения в случае пропадания сигнала. Если канал упал и данных нет после истечения заданного таймаута–то программа закроет канал, почистит «хвосты» и опять откроет канал. И так будет делать, пока соединение не восстановится. В случае whitebox таймаут задан 10 секунд при нормальном интервале между посылками 3 секунды. Программа правильно отрабатывает и отключение — включение передающего модуля, Wi-Fi точки доступа или любого связного оборудования по пути прохождения потока данных.События открытия канала и закрытия пишутся в лог. Также отмечается событие запуска и остановки программы.Данные и события отдельно пишутся в два отдельных текстовых файла.По срабатыванию таймера раз в минуту выполняется программа записи статистики в лог-файл.

После запуска программа открывает канал на прием от Белого Куба и в фоновом канале ожидает прихода данных.По приходу данных из канала они помещаются в буфер и по достижению определенных условий этот буфер отправляется в программу обработки входных данных. В данной программе условие — последние байты строки равны vbCrLf (т.е.Hex (0D0A) они же символы «перевод каретки» «возврат строки»).

Подпрограмма обработки проверяет входную строку на формальную допустимость, используя механизм регулярных выражений. Если строка имеет недопустимый формат — об этом оставляется пометка в лог-файле. Если строка имеет допустимый формат — программа разделяет строку на элементы механизмом регулярных выражений, получая в результате массив элементов.

Дальнейшая обработка заключается в занесении нужных элементов в массивы типа «очередь FIFO» (QUEUE).

Я выбрал два типа отображения данных — условно Low и Fast. Точки на Fast графиках идут через 3 секунды, а на Low — через минуту.

Длина очереди для Fast данных выбрана равной 1200 элементов, что при интервале поступления данных в три секунды дает примерно 1 час назад.

Длина очереди для Low данных выбрана равной 1440 элементов, что при интервале поступления данных в одну минуту дает картину на 1 сутки назад.

В этой программе для преобразования данных по измерению CO из единиц АЦП в значения в ppm применено расчетное выражение.

Графики:

c81b2a7888894950a2936543f3495ca2.png

Реакция датчиков на использование лака для волос. Видно, что все датчики отреагировали, к сожалению избирательность датчиков невелика.

d02aaa700ed747e99b90daa5a427444b.png

Верхний график — уровень СО2 в квартире за сутки. Максимумы утром и вечером, каждый человек дает примерно +200 ррм к уровню фона в 450 ррм. Очень большой уровень СО2 дает газовая плита. При работе газовой плиты уровень СО2 подскакивает до 2000 — 2500 ррм. Эти значения уже за пределами гигиенических норм и требуют активного проветривания помещения.

Любопытный эффект дает измерение СО2 в комнате студента. Когда ребенок занимается — уровень СО2 составляет примерно 1200 ррм. А когда ребенок играет в бродилку\стрелялку — доходит до 2000 ррм. Получился косвенный метод измерения усердия в занятиях. Уровень СО2 коррелирует с активностью мозга и позволяет сделать определенные выводы о прилежании студента :)

Вот скриншот другой программы, которая общается с датчиком СО2, подключенным к управляющему компьютеру через конвертор USB-Serial:

b2bc4e1999a34bea9f608165afe8d517.png

Пик СО2 в районе 19 часов — приход домой и развлечения. Утренний пик в районе 8 часов. Фоновое значение днем — около 400 ррм, ночью 450 ррм.

Очевидно, что уровень СО2 прямо коррелирует с интенсивностью работы головного мозга. Получается, что по уровню СО2 можно объективно судить об интенсивности занятий. И появляется возможность аргументированно возразить на фразу «я учил!» :)

Еще один любопытный эффект (не мной открытый, используется в продвинутых охранных системах) — уровень СО2 говорит о количестве людей в помещении. Ну или вообще о наличии людей. Когда я только запустил эту систему и мне было интересно анализировать данные, как-то вечером смотрю на график — уровень СО2 падает только после часу дня. А сын говорит, что пошел в институт ко 2-ой паре. Не сходится :))) показал сыну график и ребенок грустно сказал: «ну вот, теперь и не прогуляешь, не дышать-то я не могу!»

Это конечно шутка и неожиданный вторичный эффект, система создавалась не для контроля за ребенком.Хотя сын приспособил систему для своих нужд — я сделал вывод уровня СО2 на его ноут и добавил голосовое оповещение о превышении уровня СО2 в его комнате.

© Habrahabr.ru