[Из песочницы] Прибор для измерения СО2

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

  1. Прибор должен быть с экраном, так как это должен быть переносной девайс.
  2. Прибор не должен зависеть от интернета по той же причине.
  3. Прибор должен уметь логировать значения во времени, которые удобно в любой момент просматривать. А это означает, что он должен иметь собственный веб сервер и свою вайфай току.


Последний пункт неоднозначно привел к вводу, что прибор будет на ESP. Так как большой производительности мне не нужно, то выбираю дешевый вариант — ESP8266, 07 которая. Дома как раз завалялся экземпляр с 1 мб памятью.

Заказал недостающие запчасти на алиэкспресс, а ими были:

  1. Oled display 96×64 SSD1331.
  2. MH-Z19B CO2 sensor.
  3. DS1307 RTC module.


По получении деталей приступил к разработке схемы с помощью KiCad.

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

Схема вышла такой:

image

Модули решил делать съемными, поэтому на схеме самих модулей нет, а только разъёмы под них.
Развел плату:

image

После изготовления печатной платы и пайки вышло следующее:

image

image

В сборе и в работе выглядит так:

image

Теперь о программной части.

Код писался в Arduine IDE, так как я не программист, и разбираться с библиотеками в визуал студии или еще где — не хотелось.

В принципе, код для модулей в приборе я использовал из примеров библиотек и из просторов интернета, так что на нем останавливаться не буду. Кто захочет — запросто разберется в скетче.
А вот реализовать просмотр и вывод статистики по времени получилось не так просто.

Хотелось так: с мобильного телефона или ноутбука как можно проще подключится к прибору, через HTML броузер зайти на страничку с данными и просмотреть из в виде графика по времени.

Первое — на ESP создал точку доступа без паролей и аутентификаций.

Второе — создал массив данных, в которые записываю данные СО2 и время съёма данных (для этого, собственно, в прибор устанавливал часы.

Третье — настроил HTTP сервер и несколько HTML страничек, на одной из которых вывожу данные.

Четвертое — Jawa Script по отрисовке графика на страничке записал в файловую систему ESP.

Так как вывод графика оказался возможным только с помощью Jawa Script, то, после долгих экспериментов, четвертый пункт реализовал так: самый простой скрипт Chart.js в виде файла записал в файловую систему SPIFFS ESP, который, страничка, отображающая результат, и запрашивает.

В общем, включив прибор, на дисплее каждые 10 -15 секунд отображаются новые показания датчика, а каждые 8 минут текущие показания датчика записываются в массив данных.

Спустя какое то время, захотев проанализировать показания во времени, подключаетесь через телефон или ноутбук к вайфай точке «СО2», после подключения стартуете интернет браузер и в строке поиска вводите IP адрес »10.10.10.1». Попадаете на страничку:

image

Тут кнопка перехода на страницу просмотра данных и кнопка перехода на страницу задания времени (так как время иногда сбивается, и точно сбивается при замене батарейки).

Страничка с выводом данных выглядит так:

image

Архив с исходниками тут.

В архиве лежат скетч, Java Script, Kicad проект, печатка в фотошоповском формате в разрешении 600 dpi, на случай если с Kicad возится не захочется.

Как настроить Adruino ide для прошивки ESP и как заливать файлы в SPIFS можно легко найти в интернете.

Для прошивки ESP нужно будет отсоединять датчик СО2, так как он висит на TX0 и RX0, которые нужны для прошивки. Так же, я на плате линии данных подписал наоборот, чтобы TX с прошивальщика подключить к TX на плате и т.д.

© Habrahabr.ru