Главная » Статьи » Для самостоятельной сборки » Описание прибора

Анализатор СО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

Категория: Описание прибора | Добавил: Мастер (03.03.2017)
Просмотров: 1453 | Комментарии: 2 | Рейтинг: 5.0/2
Всего комментариев: 2
avatar
1
Этот проект, отлично работает. Спасибо!
avatar
2
В модуле InitModule.lua рекомендовано подтянуть к земле CS на D8.На схеме не указано.Все корректно?(Могу ошибаться..)
avatar