Рубрики
Проекты на STM32

Носимый кулон-монитор качества воздуха на STM32 и датчике SGP40

Загрязнение воздуха в помещениях и на открытом воздухе оказывает значительное влияние на здоровье человека, вызывая проблемы с дыханием и сокращая продолжительность жизни. Персональный мониторинг качества воздуха стал необходимым для защиты от вредных загрязняющих веществ, содержащихся в воздухе, таких как летучие органические соединения (VOCs), твердые частицы и токсичные газы. Этот самодельный носимый кулон-монитор качества воздуха непрерывно отслеживает уровень общего количества летучих органических соединений (TVOC) с помощью профессионального датчика SGP40. Устройство оснащено интуитивно понятной светодиодной цветовой индикацией и звуковыми оповещениями, что позволяет пользователям всех возрастов мгновенно определять состояние воздуха. При обнаружении опасного уровня загрязнения носимый монитор качества воздуха мгновенно предупреждает, помогая вам переместиться в более безопасное место.

В этом подробном руководстве рассматривается все необходимое для создания собственной носимой системы мониторинга качества воздуха, включая проектирование схем, изготовление печатных плат, 3D-печать и программирование в Arduino IDE для микроконтроллера STM32.

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

Необходимые компоненты

Компоненты, необходимые для монитора качества воздуха

Для создания носимого монитора качества воздуха необходимы тщательно подобранные маломощные компоненты, обеспечивающие работу от батареи в течение всего дня. Каждый компонент в этой системе мониторинга TVOC был выбран с учетом оптимальной энергоэффективности без ущерба для точности определения качества воздуха. Вы также можете ознакомиться со спецификацией компонентов (BOM), схемой, файлами Gerber и прошивкой для этого проекта.

  1. STM32U083KCUx: сверхэкономичный микроконтроллер на базе высокопроизводительного 32-разрядного RISC-ядра Arm® Cortex®-M0+, работающий на частоте до 56 МГц.
  2. SGP40 (купить на AliExpress): цифровой датчик качества воздуха в помещении для измерения летучих органических соединений, обеспечивающий долговременную стабильность, длительный срок службы и очень низкое энергопотребление.
  3. ADPL44002: линейный стабилизатор напряжения на основе КМОП-технологии с низким падением напряжения (LDO), работающий в диапазоне от 2,7 В до 40 В и обеспечивающий выходной ток до 200 мА.
  4. MCP73831/2: высокотехнологичный линейный контроллер управления зарядом для использования в условиях ограниченного пространства и высокой стоимости.
  5. EAST1616RGBA1: RGB-светодиод с общим катодом, используемый для индикации.
  6. SS8550 (купить на AliExpress): универсальный PNP-транзистор для управления зуммером.
  7. PKMCS0909E4000-R1: пьезоэлектрический SMD-датчик звука.
  8. Другие пассивные компоненты.
  9. Разъемы.
  10. Заказная печатная плата.
  11. Детали, напечатанные на 3D-принтере.
  12. Прочие инструменты и расходные материалы.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Обзор проекта

Вы когда-нибудь задумывались о качестве воздуха в вашем доме или офисе? Этот носимый кулон для мониторинга качества воздуха отвечает на этот вопрос, отслеживая уровень летучих органических соединений (TVOC) в течение дня. Используя надежный датчик SGP40, он мгновенно предоставляет обратную связь с помощью светодиодов, меняющих цвет, и нежных музыкальных тонов — никаких сложных показаний для интерпретации. Самое приятное? Плавные переходы светодиодов и приятные звуковые сигналы делают его больше похожим на умное украшение, чем на техническое устройство.

Особенность этого монитора качества воздуха заключается в его интеллектуальном рабочем процессе. Микроконтроллер STM32 безупречно выполняет многозадачные операции, такие как считывание показаний датчиков, обновление дисплеев и воспроизведение оповещений, без каких-либо задержек. Это как иметь на груди крошечного учёного-эколога, постоянно проверяющего качество воздуха и сообщающего вам об изменениях. Независимо от того, готовите ли вы ужин дома, работаете в офисе или посещаете новое здание, вы всегда будете знать, чем дышите.

Схема носимого кулона для контроля качества воздуха

Полная принципиальная схема носимого кулона для измерения качества воздуха представлена ​​ниже. Ее также можно скачать в формате PDF из репозитория GitHub, ссылка на который приведена в конце статьи.

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

Схема управления питанием

Для начала обсудим раздел управления питанием. В центре раздела управления питанием находится USB-разъем J1, который обеспечивает входное напряжение 5 В как для зарядки, так и для работы. Микросхема MCP73832T (IC1) служит контроллером заряда одноэлементной литий-полимерной батареи, реализуя алгоритм зарядки постоянным током/постоянным напряжением, при этом ток зарядки устанавливается на выводе PROG через внешний резистор, а светодиодный индикатор состояния обеспечивает визуальную индикацию состояния зарядки. Микросхема ADPL6400ZAU12 (IC2) функционирует как стабилизатор напряжения с низким падением напряжения, преобразующий переменное напряжение батареи приблизительно 3,7 В в стабильное напряжение +2,5 В для всей системы, что крайне важно для стабильной работы датчиков и стабильности микроконтроллера.

Интерфейс датчика качества воздуха SGP40

Далее следует датчик качества воздуха SGP40, отвечающий за измерение общего количества летучих органических соединений в окружающем воздухе. Этот профессиональный датчик взаимодействует с микроконтроллером по протоколу I2C, используя выделенные линии SCL (PA7) и SDA (PA6). Датчик работает от стабилизированного источника питания +2,5 В для обеспечения точных и стабильных измерений. Подтягивающие резисторы R5 и R6, оба номиналом 4,7 кОм, подключены к линиям I2C для обеспечения надлежащего уровня сигнала и надежной связи между датчиком и микроконтроллером.

Цифровой выход I2C исключает необходимость аналого-цифрового преобразования, снижая вероятность ошибок и упрощая конструкцию интерфейса. Низкое энергопотребление датчика делает его хорошо подходящим для работы от батарей, сохраняя при этом точность, необходимую для профессионального мониторинга качества воздуха.

Интерфейс программирования микроконтроллера STM32

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

Программный интерфейс включает в себя как UART (J3) для последовательного программирования и отладки, так и контакты интерфейса SWD (SWDIO и SWCLK) (J2) для внутрисхемного программирования и разработки.

Система светодиодной и звуковой обратной связи

Наконец, появилась система визуальной и звуковой обратной связи, отвечающая за оповещение пользователя о качестве воздуха.

Аудиокомпонент основан на PNP-транзисторе SS8550 (Q1), который служит драйвером для пассивного зуммера (BZ1). Такая конфигурация позволяет микроконтроллеру генерировать RTTTL-тона, соответствующие различным уровням качества воздуха, обеспечивая музыкальную звуковую обратную связь, соответствующую срочности каждой ситуации.

Система визуальной обратной связи использует четыре идентичные схемы управления RGB-светодиодами (D2-D5), каждая из которых содержит полный корпус LED_RGBK с выводами для красного, зеленого, синего цветов и катода. Такая компоновка обеспечивает точное управление цветом и его смешивание для создания желаемых визуальных индикаторов. Система реализует сложную схему цветовой кодировки, где зеленый цвет указывает на хорошее качество воздуха (TVOC 0-200), желтый — на предупреждающие уровни (TVOC 201-300), а красный — на аварийные ситуации (TVOC 301-500).

Таким образом, мы рассмотрели принципиальную схему. Далее переходим к печатной плате .

Разработка печатной платы для носимого кулона, определяющего качество воздуха

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

Представленная здесь печатная плата была разработана с помощью KiCad, и все файлы проекта доступны для скачивания из репозитория GitHub, ссылка на который приведена в конце этой статьи. Диаметр печатной платы составляет приблизительно 32,50 мм.

Руководство по сборке и пайке печатных плат

Первым шагом при сборке печатной платы была сортировка всех необходимых компонентов в соответствии со спецификацией материалов (BOM). После сортировки мы разместили компоненты на печатной плате и припаяли их по одному.

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

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

Конструкция корпуса, напечатанная на 3D-принтере

Мы также разработали корпус для печатной платы, напечатанный на 3D-принтере, с крючком для ношения устройства в качестве кулона. STL-файлы этого корпуса доступны по ссылке на GitHub ниже.

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

Полная инструкция по сборке

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

Сборка проста, так как количество компонентов минимально. После установки батареи в батарейный отсек поместите печатную плату в верхний корпус, совместив ее с вырезом для разъема USB Type-C. Затем с помощью нижней крышки защелкните корпус, обеспечив надежную фиксацию.

Как показано выше, эти шаги завершают физическую сборку. Далее перейдём к этапу программирования.

Код Arduino для мониторинга качества воздуха

Программирование этого монитора качества воздуха на базе STM32 отличается от стандартных плат Arduino и требует использования программатора ST-Link для загрузки прошивки. Код Arduino IDE для этого носимого датчика TVOC сочетает в себе мониторинг качества воздуха в реальном времени с интеллектуальными системами оповещения, что делает его идеальным для приложений непрерывного мониторинга окружающей среды. 

Настройка библиотек и конфигурация контактов

Код начинается с включения необходимых библиотек для системы мониторинга качества воздуха. Библиотека DFRobot_SGP40 обеспечивает интерфейс связи с датчиком TVOC SGP40, а HardwareSerial позволяет осуществлять связь по UART для регистрации данных. Библиотека PlayRtttl обрабатывает генерацию музыкальных тонов из текстовых строк RTTTL, а ptScheduler реализует неблокирующее планирование задач для управления несколькими параллельными операциями без зависания системы. Все эти библиотеки доступны во встроенном менеджере библиотек Arduino.

В настройках контактов задается аппаратное соединение: контакты RED_PIN и GREEN_PIN управляют визуальными индикаторами на PB3 и PB4 соответственно, а контакт BUZZER_PIN на PB0 отвечает за звуковые оповещения. Для приема данных и отладки настроен пользовательский последовательный интерфейс LPUART с использованием PA3 для приема и PA2 для передачи, что позволяет осуществлять связь с внешними устройствами или компьютерами.

Глобальные переменные управляют состоянием системы и операциями синхронизации. Переменная tvoc хранит текущее значение общего количества летучих органических соединений, считываемое датчиком, а toneRequest выступает в качестве флага, указывающего, какое аудиовизуальное оповещение следует активировать. Переменная fadeStep отслеживает прогресс анимации затухания светодиода, а переменные синхронизации prevLedTime и prevToneTime реализуют неблокирующие задержки для периодических операций.

Пять строк тонов RTTTL определяют музыкальные последовательности для различных состояний системы. Тон softTone обеспечивает мягкую одиночную ноту соль для хорошего качества воздуха, warnTone воспроизводит восходящую последовательность CEG для предупреждений, а alarmTone генерирует быстрые тройные сигналы для срочных ситуаций. Дополнительные тоны включают startTone для инициализации системы и errorTone для неисправностей. Перечисление ToneType умело связывает каждый тон с интервалом воспроизведения в миллисекундах, создавая единую систему синхронизации, где TONE_SOFT повторяется каждые 5 секунд, TONE_WARN каждые 2 секунды, TONE_ALARM каждые 500 миллисекунд и TONE_ERROR каждые 200 миллисекунд для максимальной срочности.

Три объекта ptScheduler управляют синхронизацией различных системных задач, не блокируя выполнение программы. Задача readSensorTask запускает считывание показаний датчиков каждую секунду, задача lightTask обновляет светодиодные эффекты каждые 100 миллисекунд для плавного затухания, а задача soundTask обрабатывает синхронизацию воспроизведения звука с интервалом в 100 миллисекунд.

Функция setup инициализирует все компоненты системы и устанавливает интерфейсы связи. Последовательная связь начинается со скоростью 115200 бод через пользовательский интерфейс LPUART, обеспечивая высокоскоростную передачу данных для мониторинга в реальном времени. Все выходные контакты настраиваются с помощью pinMode для обеспечения надлежащего управления светодиодами и зуммером, гарантируя корректную реакцию оборудования на программные команды.

При запуске системы появляется сообщение, информирующее пользователей о том, что датчику SGP40 требуется 10 секунд на прогрев, прежде чем он начнет выдавать точные показания. Это типично для газовых датчиков, которым необходимо время для стабилизации внутреннего химического состава. Система немедленно предоставляет визуальную и звуковую обратную связь с помощью функций updateLedFade и playTone, вселяя в пользователей уверенность в работоспособности устройства и правильной инициализации.

Инициализация датчика SGP40 осуществляется с помощью функции begin с параметром тайм-аута в 10 секунд, что дает датчику достаточно времени для установления связи и завершения внутренней калибровки. В случае неудачи инициализации система немедленно переходит в состояние ошибки с непрерывными звуковыми сигналами и миганием светодиода, а затем приостанавливает выполнение для предотвращения ненадежной работы. В случае успеха выводится подтверждающее сообщение, и система переходит к нормальному режиму мониторинга.

Система считывания показаний датчиков TVOC и оповещения

Основной цикл реализует сложную неблокирующую архитектуру, использующую систему ptScheduler для управления множеством параллельных задач без взаимного влияния. Планировщик readSensorTask запускает функцию readAndEvaluateAir каждую секунду, обеспечивая стабильный мониторинг качества воздуха и позволяя другим операциям бесперебойно продолжаться между измерениями.

Функция readAndEvaluateAir получает текущий индекс TVOC от датчика SGP40 и немедленно регистрирует это значение по последовательной связи для внешнего мониторинга или анализа данных. Затем функция сравнивает показания с предопределенными пороговыми значениями, чтобы классифицировать качество воздуха по четырем категориям. Значения TVOC от 0 до 200 указывают на хорошее качество воздуха и вызывают тихий звуковой сигнал с индикацией зеленым светодиодом. Значения от 201 до 300 представляют собой предупреждающие ситуации с желтым светодиодом, созданным путем объединения красного и зеленого светодиодов. Показания от 301 до 500 активируют режим тревоги с красными светодиодами и срочными звуковыми оповещениями. Любое показание выше 500 или сбой связи с датчиком вызывает состояние ошибки с быстрым миганием и звуковым сигналом.

Визуальная обратная связь управляется функцией updateLedFade, которая реализует сложный алгоритм затухания на основе ШИМ , создающий плавные цветовые переходы вместо резких переключений. Функция рассчитывает целевые уровни яркости для красных и зеленых светодиодов на основе текущего состояния качества воздуха, а затем постепенно плавно включает и выключает светодиоды с помощью вложенных циклов с точным контролем времени. Это создает эстетически привлекательный и притягивающий внимание дисплей, который четко отображает состояние качества воздуха, не вызывая резких или отвлекающих моментов.

Звуковые оповещения обрабатываются функцией playTone, которая использует управление временем для обеспечения воспроизведения тонов через соответствующие интервалы, не блокируя другие операции. Функция использует библиотеку PlayRtttl для преобразования текстовой музыкальной нотации в ШИМ-сигналы, управляющие зуммером, создавая четкие музыкальные паттерны, которые пользователи могут легко ассоциировать с различными уровнями качества воздуха. Система интеллектуально пропускает тихие тоны при хорошем качестве воздуха, чтобы избежать лишнего шума, сохраняя при этом бдительность для предупреждающих и тревожных ситуаций.

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

Скачать полные файлы проекта

В репозитории GitHub содержится полный код Arduino для носимого кулона, определяющего качество воздуха.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *