Да, метеостанция — это нечто, что измеряет огромное количество параметров, от направления и силы ветра до уровня солнечной радиации, но более подходящего термина не нашлось, так что он, должно быть, вводит в заблуждение.
А вот по поводу размера все честно.
Особой коммерческой ценности устройство, пожалуй, не имеет, потому что.
даже по количеству комплектующих оно уступает многим китайским, и не только, товары , которые имеют аналогичную функциональность.
Назвать это DIY сложно еще и из-за таких вещей, как необходимость заказа печатных плат с последующей пайкой мелких/безвыводных компонентов, что значительно снижает количество желающих тиражировать устройство.
Сама метеостанция создавалась как нечто, хотелось бы думать, эстетичное, компактное и способное быстро оценить температуру+влажность вокруг, а раз выбранный датчик может рассказать еще и о давлении, то и это тоже.
Выглядит всё примерно так (кликабельно):
В сравнении:
Об аппаратном обеспечении.
В качестве датчика был выбран BOSCH BME280, выдающий необходимые параметры окружающей среды либо через I2C, либо через SPI, восемь ножек в безвыводном корпусе LGA размером 2,5 х 2,5 мм — относительно недорого, миниатюрно.
Изначально планировался более совершенный датчик из той же серии BME680, который помимо температуры, влажности и атмосферного давления, согласно даташиту, может также оценивать качество воздуха по так называемому Индексу качества воздуха (IAQ).
Вроде бы хорошо, но на деле оказалось, что IAQ можно получить только с помощью BSEC: Bosch Software Environmental Cluster, который рассчитывает IAQ на основе показаний датчиков и изменений этих показаний.
Казалось бы, можно самому снять показания и все посчитать; Не совсем так.
Когда его просят измерить качество воздуха, датчик выдает сопротивление в Омах.
Он нагревает внутри себя небольшую чувствительную область, которая реагирует проводимостью на присутствие летучих органических соединений – Летучих органических соединений (ЛОС), и дает результат – сопротивление в этой области.
По сути, некоторые мастера предлагают свои алгоритмы интерпретации этих показаний без BSEC, но, помимо прочего, кратная стоимость по сравнению с BME280 не оставляла выбора.
Дисплей состоит из двух TOS-F2101, это обычные семисегментные индикаторы зеленого цвета с общим катодом.
Что примечательно, так это размер и корпус для поверхностного монтажа, позволяющий нестандартное размещение.
Кстати, это самые маленькие планарные индикаторы, которые можно было найти в продаже, и именно они, по большей части, определяют размер всего устройства.
Управляет всем STM32F072 в 48-контактном корпусе QFPN. Выбран он был, опять же, исходя из размеров, наличия периферии и необходимого количества контактов для управления индикаторами, которых в сдвоенном варианте почему-то нет и контактов нужно изрядное количество.
Остальное — резисторы, конденсаторы, преобразователь напряжения 3,3 В, чем меньше, тем лучше, в разумных пределах и ТТХ компонентов, конечно.
Разъем USB находится на плате.
Для надежного контакта толщина печатной платы должна быть примерно 2 мм.
Если идти по рисунку для USB Type-A, то там немного больше, но если учесть маску с обеих сторон, то получается вполне сносно.
Конечно, такой формат разъема оставляет больше шансов на механическое повреждение USB-гнезда, но, по большому счету, с этим можно справиться с помощью обычной флешки.
Сенсорная кнопка представляет собой круглый многоугольник под картинкой на доске; кнопка реагирует на короткие и длинные касания.
Также, помимо дисплея, на плате расположены три светодиода, которые указывают, какое из показаний в данный момент отображается на индикаторе.
Что касается программного обеспечения.
Программа написана с использованием CMSIS, рабочая частота 48 МГц и внутренний источник; Здесь есть такой, с ним можно даже USB использовать, не используя внешний кварц.
Для гибкости и возможного расширения функционала добавлена FreeRTOS. Сенсорная кнопка обрабатывается сенсорным контроллером (TSC).
Поскольку на плате нет клавиатуры из сенсорных кнопок или ползунков, когда тачпады объединены в линию, а есть один датчик, распознающий короткие и длинные касания, то особого смысла в использовании комплексной библиотеки от ST нет. Сам принцип работы сенсорного датчика прост, имеется несколько выводов, объединенных в группы, к одному из них подключается конденсатор (Sampling capasitor) Cs, этот вывод становится образцовым, остальные выводы группы можно подключить к датчику.
многоугольники, которые по сути тоже являются конденсаторами Cx. Контроллер заряжает емкость многоугольного конденсатора Сх и затем передает этот заряд в опорный Сс, операция повторяется до определенного предела напряжения на Сс.
Емкость датчика обычно невелика, поэтому таких операций потребуется много и для подсчета есть отдельный регистр (TSC_IOGxCR).
Если прикоснуться к датчику, емкость Cx станет больше и для зарядки Cs потребуется меньше циклов; это немедленно фиксируется и о касании сообщается наверх.
Кстати, мощность датчика начинает увеличиваться тогда, когда прямого контакта еще нет, поэтому датчик можно защитить от физического контакта, например маской, или он может фиксировать разную степень близости.
Интерфейс I2C используется для связи с BME280. Реализация I2C в STM32F072 проще, чем в популярном STM32F103; кроме всего прочего, нет необходимости отдельно отслеживать 1/2/множество полученных байт, достаточно заранее указать их количество (I2C_CR2.NBYTES[7:0]).
Сама библиотека для работы с датчиком предоставил , и рекомендован к использованию производителем датчика.
Для того, чтобы снимать показания с помощью библиотеки, необходимо создать две структуры — для настроек и данных.
В настройках нужно ввести:
- адрес датчика на шине I2C
- Функции чтения/записи I2C и функция задержки
- количество показаний для усреднения (Oversampling) x1, x2 и т. д. для каждого параметра температуры/влажности/давления
- коэффициент фильтра для АЦП
- период приема значений параметров
- вообще какие параметры читать, например можно оставить одну температуру
- режим работы, «нормальный» – с периодическим снятием показаний, «принудительный» – снятие показаний по запросу
В результате структура выходных данных будет содержать значения температуры в градусах Цельсия, относительной влажности в процентах и атмосферного давления в Паскалях.
В «принудительном» режиме все то же самое, только каждый раз перед считыванием показаний нужно запускать преобразование «bme280_set_sensor_mode».
Общий принцип работы устройства следующий: подключиться к USB, либо к Power Bank в мобильной версии.
Для первоначального отображения и переключения показаний кратковременно коснитесь датчика; чтобы выключить его, нажмите и удерживайте.
Сначала отображается температура в градусах Цельсия, затем относительная влажность в процентах и атмосферное давление в миллиметрах ртутного столба, т. к.
индикаторов всего два, а показатель давления редко выходит за пределы семисот, то цифра семь здесь виртуальная.
Если некоторое время не прикасаться к сенсору, индикаторы погаснут, чтобы, например, Power Bank не разряжался.
Среднее потребление прибора ~50 мА, основными потребителями являются индикаторы; если их отключить, счет переходит в микроамперы.
В итоге общая стоимость комплектующих на январь 2020 года составила около 850 рублей, это без учета платы, достать было легко, ведь у производителя были новогодние скидки, а у меня были купоны, но вряд ли такое повторится.
в ближайшее время, по крайней мере, до декабря следующего года.
Ну а желающие ознакомиться с исходным кодом могут это сделать Здесь .
Теги: #Программирование микроконтроллеров #stm32 #Сделай сам или Сделай сам #C++ #bme280 #метеостанция
-
Логистика Видеоисследований И Планирования
19 Oct, 24 -
Обзор Htc Sensation
19 Oct, 24 -
Семь Советов После Установки Ubuntu 7.04
19 Oct, 24 -
О Ярких Идеях И Суровых Реалиях
19 Oct, 24