Category: компьютеры

Category was added automatically. Read all entries about "компьютеры".

Монитор качества воздуха в помещении


    • Цена: запчастей около 7000р


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


    В прибор было добавлено еще 2 датчика. Датчик пыли PMS5003 и датчик формальдегида ZE08-CH20. Так же прибор обзавелся часами DS3231 и научился подавать звуки MP3-TF-16P. Были выкинуты датчик температуры и влажности. От них было мало толку. Из-за того, что начинка нагревается показания этих датчиков сильно отличались от реальности.

    Основа прибора как и прежде контроллер ESP8266 dev kit 1 и датчик СО2 MH-Z19. Так же как в первой версии прибора датчик подключен по ШИМ. Для подключения остальных датчиков, экрана(все это висит на одних контактах) и модуля издающего звуки был использован аналоговый коммутатор 74HC4052. Контроллер последовательно подключается к датчику формальдегида и пыли. После этого переключается на экран и выводит информацию. Если наступает необходимость подать звуки, контроллер переключает коммутатор на звуковой модуль.

    Датчики пыли, формальдегида и звуковой модуль общаются с контроллером посредством UART. В момент опроса датчиков, или воспроизведения звуков, UART контроллера переключается на альтернативные контакты и в этот момент невозможно общение по USB с компьютером.

    В данной модели я использовал большой 2,8” экран, разрешением 240x320 точек. С интерфейсом ISP на базе контроллера ILI9341.
    Никакого управления, кроме кнопки включения на приборе нет. Просто включаешь в розетку( в приборе встроен блок питания на 5v) и можно наблюдать за показаниями.



    На экран выводится следующая информация: В верхнем левом углу часы с датой и месяцем. С право от часов выводится показания датчика формальдегида в µg/mᶟ. Следующий ряд, это показания датчика пыли. Тут 3 значения. Первое пыль диаметром меньше 1мкм, дальше частицы меньще 2,5 мкм и справа частицы до 10 мкм. Значения выводятся в µg/mᶟ. Под показаниями датчика пыли выведена строчка мелких цифр. Это для особо любознательных, тут перечислены значения счетчика частиц пыли разных фракций. Данные даны — количество частиц на 1л воздуха.
    Ниже график измерений содержания в воздухе углекислого газа СО2, приблизительно за последние полчаса.
    В самом низу текущее значение концентрации СО2 в ppm. Справа светофорчик, сигнализирующий о опасности, или безопасности данной концентрации СО2. Зеленый сигнал говорит о том что концентрация меньше 900 ppm и хорошем качестве воздуха, желтый о душной обстановке и концентрации от 900 до 1500 ppm. Красный сигнал показывает что концентрация углекислого газа выше 1500ppm и это опасно для здоровья и плохо сказывается на самочувствии.
    Когда уровень концентрации СО2 достигает 900ppm из прибора раздается чихание. Если уровень поднимается выше 1500ppm прибор «кашляет».
    На лицевой стороне прибора имеется наклейка, на которой расписаны какие параметры прибора что обозначают и каковы нормальные, высоки и опасные концентрации газов и пыли.

    Датчики:

    Датчик СО2 MH-Z19 — Недиспергирую- инфракрасный датчик (или датчик NDIR) представляет собой простой спектроскопического датчик используемый в качестве детектора углекислого газа. Предел измерений до 5000ppm нижний предел около 400ppm(естественный уровень СО2 в атмосфере). Паспортная точность 50ppm. Время отклика около 30 секунд. При подаче питания первую минуту полторы выдает максимальные, или минимальные показания, потом включается и выдает реальные данные. Информация с датчика получается по ШИМ. В момент считывания контроллер измеряет скважность сигнала на выхоже датчика и по формуле преобразует его в уровень СО2.

    Датчик пыли PMS5003. NDIR датчик пыли измеряющий концентрацию пыли с разбиением отдельно на 3 фракции 1, 2.5 и 10 микрон. Так же имеет счетчик частиц пыли разделенный на 6 фракций. Точность заявлена 10%. Датчик используется в активном режиме. Это значит что он сам автоматически через установленные промежутки времени посылает информацию в UART. Когда необходимо получить информацию с датчика, контроллер подключается к нему по средствам коммутатора и ожидает очередной посылки данных.

    Датчик формальдегида ZE08-CH2O Электрохимический датчик термостабилизированный. Этот датчик так же используется в активном режиме. Он самостоятельно, каждую секунду посылает данные в UART и когда контроллер переключает на него коммутатор, происходит считывание данных.

    Для извлечения различных звуков и звуковой сигнализации о состоянии воздуха используется миниатюрный mp3 плеер управляемый по UART — MP3-TF-16P. Данная плата имеет на борту считыватель микро SD карты, на которую записываются звуковые файлы в mp3 формате. Также имеется усилитель мощности и может быть подключен динамик на 8ом. Выбор и воспроизведение файлов записанных на sd карточку управляется по UART с контроллера устройства. В программу встроена защита от оповещения в ночное время. После 22:00 и до 8:00 звуковой сигнал не подается.

    Для вывода на экран времени и даты используется модуль часов DS3231, который работает по протоколу I2C. Заявленная точность 2 минуты в год.

    Для переключения основного контроллера ESP8266 между датчиками, экраном и звуковым модулем используется аналоговый коммутатор 74HC4052. Это сдвоенный коммутатор на 4 линии. ESP8266 использует для UART выводы D9, D10 но мы не можем использовать эти выводы, так как они подключены к встроенному на плату контроллера адаптеру USB. К счастью есть возможность переключать выходы UART на альтернативные контакты D7, D8. Но эти же контакты использует шина ISP по которой контроллер подключен к дисплею. Для того, что бы разобраться с этим зоопарком и используется коммутатор. Он имеет 2 входа и по 4 выхода. В один момент каждый вход может быть подключен к одному из 4 выходов. К каждому выходу подключен датчик, или дисплей, или звуковой модуль. По управляющим пинам контроллер выбирает к какому устройству нужно подключиться в данный момент. При выводе на экран контроллер подключается к дисплею, при считывании данных к датчику, а при воспроизведении звуков к mp3 плееру.

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

    Монтажная схема

    Электрическая схема:


    Все необходимое для прошивки контроллера
    прошивка
    скрипты lua

    Программа для прошивки ESP8266 github.com/nodemcu/nodemcu-flasher

    ESPlorer для загрузки скриптов на esp8266 esp8266.ru/esplorer/#download

    USB драйвер для Windows www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

    Наклейка на морде
    Зачасти
    ZE08-CH2O

    ESP8266
    Плата
    DS3231 AT24C32
    Дисплей
    Блок питания
    вентилятор
    Звуковой модуль
    коммутатор
    динамик
    MH-Z19
    Датчик пыли

    Корпус

    Анализатор СО2 для дома и офиса.

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

    (без названия)

    тут видео о том как это выглядит: https://www.youtube.com/watch?v=tXq7SQ3Haz0

    Основа ESP8266 devkit 1v
    Использован 2.4" TFT SPI дисплей http://ru.aliexpress.com/item/2-4-240x320-SPI-TFT-LCD-Serial-Port-Module-5V-3-3V-PBC-Adapter-Micro-SD/2031285535.html?detailNewVersion=2
    Подключение TFT дисплея

    Включение, выключение подсветки дисплея и управление яркостью производится через GPIO0(D3) При включении питания по умолчанию на этом выводе устанавливается высокое значение +3v и экран вспыхивает белым светом. В модуле init.lua программно устанавливаем низкое значение и экран выключается на время инициализации. После полной инициализации яркость дисплея постепенно увеличивается с использованием ШИМ управления в модуле start.lua
    Инициализация дисплея производится в модуле InitModule.lua в функции init_spi_display()
    Рисование на дисплее и вывод всей информации производится в модуле start.lua. Все графическое оформление и подписи рисуется в функции printLCD1(). Рисование подложки для графика вынесено в отдельную функцию drawGraf(). Эта функция вызывается отдельно, когда график дошел до правой границы и надо перерисовать только фон графика.
    Данные по температуре со2 и график выводятся на дисплей при вызове функции printLCD(). График выводится короткими отрезками и когда достигает правой границы, фон графика перерисовывается и линия графика заново рисуется начиная с левого края. Значения температуры и со2, сперва выводится цветом фона предыдущее значение, что бы его стереть, и после уже выводится текущее. Значения перерисовываются только в том случае, если они изменились. Линия графика и светофор в правом нижнем углу рисуются в функции graph().
    Датчики температуры DS18b20

    В качестве датчиков температуры использованы цифровые датчики ds18b20.
    При подключении питания вызывается модуль InitModule.lua из которого вызывается модуль настройки
    local ds18 = dofile('ds18Init.lua')(2,2) ds18=nil
    Который производит поиск датчиков и определение их адресов. Функция addrs(pin,cd) производит определение адресов датчиков и сохранения их в глобальной переменной DS18_ADDR. Первый параметр функции, это пин к которому подключена шина 1 wire, через которую работают датчики. Второй параметр количество датчиков.
    Получаем температуру с датчиков вызовом модуля
    local ds18 = dofile('ds18run.lua')(2,0) ds18=nil
    Первый параметр пин 1 wire, второй должен быть ноль. При вызове функция сперва пытается прочитать параметры с датчиков, так что при первом вызове будет не актуальные данные, после этого функция посылает общую команду на вычисление для всех датчиков. Это сделано для того что бы убрать лишние задержки времени. В следующем цикле, когда функция определения температуры будет вновь вызвана, она вернет уже вычисленные значения температур и снова пошлет команду на вычисление уже для следующего цикла.
    Вычисленные значения сохраняются в глобальной переменной ListTime[1].data и ListTime[2].data.
    Модуль измерения CO2 MH-Z19.

    Данные считываются с помощью формируемого модулем сигнала ШИМ. Считывание данных запускается из модуля start.lua загрузкой и выполнением модуля
    local ppm= dofile('ppmrun.lua')() ppm=nil
    После включения питания, некоторое время, около минуты, модуль возвращает не корректные данные, слишком высокие, или низкие показания. Полученные данные записываются в глобальную переменную ListTime[3].data.
    Я условно разделил уровень со2 на 3 зоны зеленая – до 900 ppm, желтая – до 1500, и красная – все что выше 1500 ppm. В соответствии с этим проведены 2 контрольные линии в области графика и светофор в правом нижнем углу.
    Основной цикл программы, это функция time_loop() в модуле start.lua. Первый шаг 1 сек, остальные каждые 10 сек.
    В модуле initdatasensor.lua происходит создание основной таблицы данных ListTime и ее инициализация.


    Модуль filedata.lua используется для отправки UDP сообщения в сеть WIFI для работы программы на PC которая отображает данные с датчиков устройства. В данных скриптах нет настройки модуля ESP8266 на вашу домашнюю сеть WIFI Вам придется это сделать самим. В дальнейшем настройки сохраняются, и модуль автоматически подключается к сети.

    Сконфигурировать как точку доступа:
    wifi.setmode (wifi.SOFTAP)
    Подключиться к домашней сети WIFI:
    wifi.setmode(wifi.STATION)
    tmr.delay(1000000)
    wifi.sta.config(SSID, PASSWORD)
    tmr.delay(1000000)


    Так же данная программа может работать с модулем по USB. Настройки для этого подключения находятся в нижнем левом углу программы.

    Все необходимое программное обеспечение:

    Программа для прошивки ESP8266
    https://github.com/nodemcu/nodemcu-flasher
    Прошивка MCU lua   https://drive.google.com/open?id=0B4KYGXb6-nxpOUdXdTFpcjlFZXM

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

    Программа для windows PC https://drive.google.com/open?id=0B4KYGXb6-nxpUmVXcElLektOQXM
    USB драйвер для Windows https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx