Вы когда-нибудь задумывались о качестве воздуха, которым вы дышите, или, может быть, почему вы иногда чувствуете сонливость в офисе или усталость утром, даже если вы спали всю ночь? Плохое качество воздуха может привести ко многим негативным последствиям для здоровья, а также может вызвать усталость, головные боли, потерю концентрации, учащенное сердцебиение и так далее. Мониторинг качества воздуха на самом деле может быть важнее, чем вы думаете. Итак, в этом уроке мы узнаем, как создать собственный монитор качества воздуха на основе платы Arduino, который способен измерять PM2.5, CO2, VOC, озон, а также температуру и влажность.
Ранее на нашем сайте мы рассматривали достаточно много проектов анализаторов качества воздуха на основе платы Arduino:
- анализатор качества воздуха с определением частиц PM2.5 и PM10 на Arduino и датчике SDS011;
- измерение TVOC (летучих соединений) и CO2 с помощью Arduino и датчика качества воздуха CCS811;
- детектор алкоголя (алкотестер) на Arduino;
- измерение уровня аммиака в воздухе с помощью датчика газа MQ-137 и Arduino;
- детектор дыма на Arduino и датчике газа MQ2.
Но этот проект отличается тем, что он позволяет контролировать сразу несколько параметров качества воздуха и окружающей среды, оказывающих существенное влияние на жизнедеятельность человека.
Обзор проекта
Я объясню, как каждый из параметров качества воздуха влияет на нас и как работают датчики в нем. Мозгом этого проекта является плата Arduino Pro Mini, которая в сочетании с 2,8-дюймовым сенсорным дисплеем Nextion обеспечивает достойный пользовательский интерфейс.
Мы можем видеть измерения со всех датчиков в режиме реального времени, и если мы нажмем на определенный датчик, мы получим значения за последние 24 часа с этого датчика. Также есть функция затемнения, с помощью которой мы можем уменьшить яркость дисплея или даже полностью его выключить. Это удобно, например, если мы хотим отслеживать качество воздуха в нашей спальне ночью.
Мы можем выключить экран на ночь, а на следующий день проверить значения каждого датчика по отдельности.
Тем не менее, сейчас я проведу вас через весь процесс его создания и объясню, как все работает. В конце этого видео вы сможете построить его самостоятельно. Итак, начнем.
Датчик PM2.5 – PMS5003
Это устройство имеет четыре основных компонента или датчика качества воздуха. Мы используем датчик PMS5003 для измерения PM2.5 или твердых частиц в воздухе диаметром около 2,5 микрон. Твердые частицы являются наиболее вредной формой загрязнения воздуха, поскольку они могут проникать глубоко в легкие, кровеносные сосуды и мозг, вызывая множество проблем со здоровьем.
Этот датчик работает по принципу лазерного рассеивания. Датчик имеет вентилятор, который создает контролируемый поток воздуха, так что частицы окружающей среды проходят через сфокусированный лазерный луч.
Частицы вызывают рассеивание света, которое обнаруживается фотодиодом, а затем преобразуется в концентрацию PM с помощью его микропроцессора. Я обнаружил, что результаты этого датчика достаточно надежны, и наряду с PM2.5 он также может выводить значения PM1 и PM10.
Более подробно о принципе работы датчиков подобного типа вы можете прочитать в этой статье.
Датчик CO2 – MH-Z19
Далее мы используем датчик MH-Z19 для измерения концентрации CO2 (углекислого газа). Поскольку люди выделяют углекислый газ при дыхании, концентрация CO2 в помещении может легко стать очень высокой. CO2 не только опасен в высоких концентрациях, но и может вызывать сонливость, усталость, снижать уровень нашей производительности и так далее.
Датчик использует недисперсионный инфракрасный принцип для измерения CO2 в воздухе. Инфракрасный источник направляет свет через трубку, заполненную воздухом, который мы измеряем. С другой стороны инфракрасного источника находится оптический фильтр и ИК-детектор, который измеряет количество проходящего ИК-света.
Молекулы газа CO2, присутствующие в воздухе, который мы измеряем, поглощают определенную полосу ИК-света, пропуская при этом некоторые длины волн. Таким образом, уровень CO2 рассчитывается по разнице между количеством излучаемого света и количеством ИК-света, полученного детектором. Результаты этого датчика также довольно точны.
Также концентрацию CO2 можно измерять с помощью датчика качества воздуха CCS811.
Датчики VOC и озона – MP503 и MQ-131
Для измерения VOC (Volatile Organic Compounds – летучих органических соединений) и озона мы будем использовать газовые датчики MP503 и MQ131. Это нагреваемые датчики оксида металла, принцип работы которых основан на обнаружении изменения сопротивления в присутствии целевых газов.
Через металлическую подложку проходит определенный электрический ток, и сопротивление изменяется в зависимости от количества присутствующего газа.
Целевым газом датчика MQ131 является озон, который в обычном домашнем хозяйстве может вырабатываться такими устройствами, как некоторые очистители воздуха, паровые ингаляторы для лица, бактерицидные лампы, излучающие ультрафиолетовый свет, и т. д.
С другой стороны, датчик MP503 имеет несколько целевых газов, включая спирт, дым, изобутан, метаналь и другие. VOC означает летучие органические соединения, и это органические выбросы из продуктов, которые мы используем ежедневно, таких как стиральные порошки, чистящие средства, освежители воздуха, краски, косметика и т. д. VOC могут вызывать множество негативных последствий для здоровья, включая головные боли, раздражение глаз, кожные реакции, головокружение и т. д.
Принципиальная схема монитора качества воздуха на базе Arduino
Тем не менее, давайте теперь взглянем на принципиальную схему и объясним, как все должно быть подключено в нашем мониторе качества воздуха.
Правильные значения резисторов: R1 = 1K, R2 = 2K, R6=100K или 1M, R7=1K
Датчик PM2.5 взаимодействует с Arduino через последовательный интерфейс. Он работает при 5 В, но логический уровень приема RX работает при 3,3 В, поэтому нам нужен делитель напряжения для него. Датчик CO2 и дисплей Nextion также используют последовательную связь. Для считывания датчиков VOC и Ozone мы используем аналоговые входы Arduino, в то время как датчик температуры и влажности DHT22 использует для этой цели цифровой вывод.
Два транзистора используются для активации нагревателей датчиков. Мы также используем модуль часов реального времени для отслеживания времени при сохранении значений датчиков, и он использует связь I2C. Все устройство питается от 5 В через разъем Mini USB.
Теперь, если мы попытаемся все соединить вместе, то получим настоящую неразбериху из-за множества связей.
Итак, для этого проекта нам определенно понадобится печатная плата.
Необходимые компоненты
- Плата Arduino Pro Mini (купить на AliExpress).
- Датчик температуры и влажности DHT22 (купить на AliExpress).
- Датчик PM PMS5003.
- Датчик CO2 MH-Z19.
- Датчик озона MQ-131.
- Датчик VOC MP503.
- Дисплей Nextion 2.8″.
- Модуль часов реального времени DS3231 RTC (купить на AliExpress).
- Дистанционные / распорные гайки M3.
- Мини-USB-разъем.
- Переключатель на 2 положения.
- Номиналы конденсаторов: 0,1 мкФ керамические и 10 мкФ электролитические.
- Транзисторы – 2N3904.
- Выключатель.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Изготовление печатной платы для монитора качества воздуха
Для создания печатной платы для этого проекта я собираюсь использовать программу Altium Designer.
Altium Designer представляет десятилетия инноваций и разработок, направленных на создание действительно унифицированной среды проектирования. Достигнув идеального баланса между мощностью и простотой использования, Altium Designer закрепил за собой позицию наиболее широко используемого решения для проектирования печатных плат на рынке.
Я начал с создания схемы для проекта. Altium Designer имеет встроенные библиотеки с базовыми электронными компонентами, но что еще лучше, вы можете искать компоненты напрямую у производителей, что делает поиск компонентов для вашего проекта очень удобным.
В качестве примера я нашел разъем Mini USB с помощью этой функции поиска производителя деталей. Отсюда вы также можете легко получить доступ к данным, связанным с компонентами, таким как 3D-модели, посадочные места, размеры и т. д.
Вы также можете создавать собственные библиотеки компонентов. Я создал большинство компонентов для этого проекта самостоятельно, так как хотел создать собственные 3D-компоновки для каждой детали, чтобы в итоге получить всю печатную плату в 3D. Для создания 3D-моделей для печатных плат можно использовать любое программное обеспечение CAD, сохранять файлы как файлы .STEP и импортировать их в Altium Designer.
Закончив схему, я сгенерировал печатную плату. Я расположил компоненты так, как хотел, и одним простым щелчком мыши с использованием функции Auto Route программное обеспечение автоматически сгенерировало все трассы.
При необходимости мы можем вручную создать или настроить их. Также мы можем задать правила проектирования, как автоматическая трассировка будет делать трассировки, задать различную ширину для каждой сети и т. д. На этом этапе мы также видим печатную плату в 3D и экспортируем 3D-файл всей сборки печатной платы, который будет использоваться для проектирования корпуса для нее позже.
Файлы Altium Designer, включая файл проекта, библиотеки и файлы .STEP 3D-моделей электронных компонентов вы можете скачать по следующим ссылкам:
- Монитор качества воздуха своими руками - файлы Altium Designer;
- DIY Air Quality Monitor Gerber - файл для изготовления печатной платы.
Вы можете изготовить печатную плату для этого проекта в любом месте, в котором вы привыкли это делать.
Сборка печатной платы
Через несколько дней печатные платы прибыли. Качество печатных плат отличное, все точно такое же, как в проекте.
Итак, теперь мы готовы начать сборку печатной платы. Я начал с того, что вставил и припаял сначала более мелкие компоненты, резисторы и два транзистора.
Затем мы можем припаять плату Arduino Pro Mini на место. Однако сначала нам нужно припаять к ней штыревые разъемы. Обратите внимание, что нам не нужны все ее штырьки, но убедитесь, что вы не пропустили нужный нам штырь, например, A4, A5 и штырь DTR. Также убедитесь, что у вас точно такая же плата Arduino Pro Mini с этой компоновкой штырьков, потому что иногда они могут отличаться.
Далее мы можем вставить датчик DHT22 на место. Для этого нам сначала нужно согнуть его штырьки на 90 градусов. Иногда я также использую клей Blu-tack, чтобы удерживать компоненты на месте при пайке.
Два конденсатора, используемые в этом проекте, предназначены для стабилизации питания. Питание платы будет поступать от разъема mini-USB, к которому мы можем подключить 5 В.
Прямо над разъемом питания нам нужно припаять два переключателя. Один для включения и выключения устройства, а другой используется, когда мы хотим загрузить скетч на плату Arduino. Затем мы можем вставить на место штыревые разъемы для интерфейса USB-UART, дисплея и датчика PM2.5, а также датчиков VOC, озона и CO2.
Далее, для повторной пайки модуля часов реального времени DS3231, сначала нам нужно согнуть штырьки на 90 градусов. После пайки мы можем вставить батарею, которая отслеживает время, даже когда основная плата теряет питание. На этом печатная плата фактически готова, и теперь осталось подготовить кабели, которые мы будем использовать для подключения датчика PM2.5 и дисплея к печатной плате. Я припаял штыревые разъемы к кабелю, который идет в комплекте с датчиком, и поэтому я смог легко подключить его к печатной плате. Для подключения дисплея к печатной плате я припаял четыре провода к задней стороне разъема дисплея, а затем подключил их к печатной плате.
И все, наш монитор качества воздуха фактически готов. Конечно, теперь нам нужно сделать для него какую-то коробку или корпус. Поскольку у нас есть 3D-модель всей сборки печатной платы из Altium Designer, мы можем импортировать ее в программное обеспечение CAD и спроектировать для нее корпус.
Для этой цели я использовал SOLIDWORKS и сделал максимально простой корпус, состоящий всего из двух частей и нескольких болтов и гаек. Я решил сделать корпус из прозрачного акрила, потому что мне нравится, как печатная плата и компоненты выглядят открытыми, и это также отличный способ продемонстрировать свой проект DIY.
Вы можете загрузить эту 3D-модель монитора качества воздуха, а также изучить ее в своем браузере на сайте Thangs.
Загрузите 3D-модель на Thangs.
Сборка корпуса для нашего проекта
Акрил, который я буду использовать, имеет толщину 4 мм, что идеально подходит для дисплея. Поскольку у меня сейчас нет станка с ЧПУ, я вырезаю формы вручную с помощью простой ножовки по металлу.
Для изготовления отверстия для дисплея я сначала сделал два отверстия дрелью. Затем я продел лезвие от мини-ножовки и аккуратно вырезал форму. Используя простой рашпиль, я сгладил форму. Затем, используя 3-миллиметровое сверло, я сделал все отверстия для крепления печатных плат и соединения двух акриловых пластин вместе.
На этом этапе я снял защитную фольгу с акрила, что, честно говоря, является довольно удовлетворяющим процессом. Для крепления печатной платы к базовой пластине я использовал несколько болтов и гаек M3. Для крепления датчика PM2.5 к пластине нам понадобятся болты M2.
Далее, используя несколько дистанционных гаек, мы можем соединить две пластины вместе. Используя одну "женскую" и одну "мужскую" дистанционную гайку, я смог легко получить желаемое расстояние между двумя пластинами.
Мне лично очень нравится, как получился этот чехол, плюс он функциональный, поскольку воздух может легко циркулировать вокруг датчиков.
Программирование платы Arduino
Хорошо, теперь мы можем включить устройство и загрузить программу. Мы можем запитать монитор качества воздуха через разъем Mini USB, а 5 вольт мы можем получить от 5-вольтового USB-адаптера, 5-вольтового зарядного устройства для телефона или внешнего аккумулятора.
Для загрузки программы на плату Arduino Pro Mini нам понадобится интерфейс USB-последовательный UART, который можно подключить к программному разъему. Перед подключением к USB компьютера сначала необходимо включить основное питание устройства, иначе мощности, поступающей с USB компьютера, которая составляет всего 500 мА, может быть недостаточно для правильной работы. При загрузке скетча Arduino нам также необходимо переключить переключатель загрузки на печатной плате.
Здесь вы можете скачать код Arduino и программу отображения Nextion:
- Монитор качества воздуха своими руками - код Arduino;
- Монитор качества воздуха своими руками - программа Nextion.
Для загрузки скетча на плату Arduino Pro Mini в среде Arduino IDE сначала необходимо выбрать эту плату, выбрать нужную версию процессора, выбрать порт и выбрать метод программирования «USBAsp».
После загрузки кода в Arduino нам также необходимо загрузить код в дисплей Nextion. Дисплеи Nextion имеют встроенный контроллер ARM, который фактически управляет дисплеем самостоятельно.
Вся графика, такая как кнопки, текст, изображения, переменные и т. д., генерируется и контролируется самим дисплеем. Дисплей Nextion имеет специальный редактор Nextion , в котором мы можем создавать все эти вещи. Связь дисплея и Arduino осуществляется всего двумя проводами с использованием последовательной связи. Arduino просто отправляет значения с датчика на дисплей и наоборот, дисплей отправляет данные на Arduino, когда это необходимо.
Для загрузки программы отображения нам понадобится карта microSD, на которую мы сможем сохранить выходной файл .TFT из редактора Nextion.
Дисплей оснащен кардридером, куда мы можем вставить карту microSD, пока питание выключено. Затем мы можем включить устройство, и программа будет загружена на дисплей. Теперь нам просто нужно извлечь карту, снова включить питание, и наш монитор качества воздуха начнет работать.
Объяснение кода программы
Итак, мы используем библиотеки для каждого датчика, которые можно найти по следующим ссылкам: MHZ19 , PMS , MQ131 , DHT , DS3231. Чтобы лучше понять, как мы считываем данные с каждого датчика, я рекомендую прочитать документацию библиотек и попробовать их примеры.
Мы также используем библиотеку SoftwareSerial, поскольку и датчики MH-Z19, и датчики PMS5003 используют последовательную связь. Arduino и дисплей Nextion также используют последовательный порт для связи, и в этом случае мы используем аппаратный последовательный порт по умолчанию.
Итак, Arduino считывает данные с датчиков и отправляет их на дисплей Nextion. Вот пример.
1 2 3 4 5 |
Serial.print("tempV.val="); Serial.print(temp); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); |
Итак, у нас есть переменная на дисплее Nextion под названием «tempV», и для того, чтобы обновить ее значение, нам нужно отправить команду Nextion следующим образом: «tempV.val=22». Итак, имя переменной, затем «.val», затем значение, скажем, 22. Первые две строки кода делают это, и для того, чтобы дисплей Nextion принял эту команду или любую другую команду, нам нужно отправить три уникальные команды «write».
В программе отображения Nextion есть таймер, который работает в цикле, как и цикл кода Arduino, и он постоянно обновляет числа на дисплее.
В этом событии таймера у нас также есть код для изменения цвета фона для каждого датчика в зависимости от его значения.
На второй странице у нас есть waveform, который получает значения из сохраненных значений от Arduino. Обратите внимание, что вы можете найти больше информации об этом в самом коде Arduino, так как в комментариях к коду есть пояснения.
Значения часов и оси Y также берутся из Arduino.
Поверх формы волны, а также чисел на главном экране, вы можете заметить, что у нас есть как бы прозрачные объекты, называемые «Hotstops» в редакторе Nextion, и они действуют как кнопки. Если мы нажмем на hotstop на форме волны, мы увидим в разделе Event, что он отправляет нас обратно на «страницу 0».
Чтобы полностью понять, как работает программа для нашего монитора качества воздуха, нужно изучить и знать, как работает каждый датчик со своими библиотеками, а также как работает дисплей Nextion.
Обратите внимание, что для датчика VOC мы считываем только необработанные данные с этого датчика, а не значения ppm или ppb. Только аналоговые значения от 0 до 1024. Более высокие значения означают наличие VOC.
Что касается датчика озона, для получения более точных выходных данных мы должны правильно установить значения setTimeToRead() и setR0() в соответствии с примером калибровки библиотеки. Однако более длительное значение setTimeToRead означает, что программа будет заблокирована во время выборки, а все остальное будет заморожено. Конечно, есть способы обойти это. Я бы даже посоветовал вообще не использовать датчик озона, если он вам действительно не нужен.