В предыдущей статье были описаны история создания и опыт использования походной метеостанции miniBTH. Этот прибор измеряет и непрерывно отображает на экране в виде графиков текущее атмосферное давление, температуру и влажность воздуха. Все измеренные параметры сохраняются на карту памяти раз в минуту. Кроме того, в приборе присутствует датчик освещенности, а данные с датчика давления могут быть пересчитаны в барометрическую высоту. Благодаря использованию трансфлективного экрана показания прибора легко считываются даже на ярком солнечном свету, а корпус прибора герметичен. Опыт использования этого прибора оказался в целом положительным, однако был выявлен ряд недостатков, подробно рассмотренных в прошлой статье, основным из которых является большой вес. В этой статье мы рассмотрим создание и опыт эксплуатации второй, более удобной и функциональной версии. Отметим, что на момент написания прошлой статьи вторая версия прибора уже была в высокой степени готовности, поэтому там были коротко изложены основные способы преодоления недостатков.
Конструкция нового прибора и уменьшение веса
Первая метеостанция MiniBTH задумывалась как автономный, прибор, предназначенный прежде всего для использования в походах. Именно поэтому корпус прибора делался герметичным, использовался трансфлективный экран, а емкость аккумулятора рассчитывалась больше чем на месяц работы. Основным недостатком первой версии, на мой взгляд, являлся большой вес, поэтому вторую версию, я решил делать как можно более компактной и легкой. Для этого надо развести плату прибора минимально возможного размера: чуть больше экрана, а корпус сделать по возможности тонкостенным и простым. Об электронной и программной части будет сказано дальше, а пока обратимся к конструированию корпуса второй версии прибора. Основные идеи уменьшения размера корпуса были следующие:
- Уменьшить количество винтов, прижимающих переднюю крышку с восьми до четырех, расположив их по углам корпуса.
- Отказаться от съемной задней стенки, а сборку всего прибора производить через переднюю крышку.
- Вместо беспроводной зарядки сделать гермоввод. Два винта из нержавеющей стали использовать как контактные площадки и вводы в корпус, а герметичность обеспечить резиновыми шайбами.
- Перенести сенсорные кнопки на боковую стенку прибора.
- Уменьшить размер блока датчиков и полостей для размещения датчиков.
- Датчик освещенности расположить над «слепой» частью экрана на выносной плате.
В результате удалось увязать предложенные идеи между собой и сделать достаточно компактный корпус из капралона следующей конструкции:
Блок датчиков предполагается съемным, крепится к корпусу двумя винтами, а герметичность стыковки блока датчиков и корпуса обеспечивается кольцевой прокладкой, через которую проходят провода. Набор датчиков используется такой же, как и в первой версии прибора – датчик давления MS5803 и датчик влажности sht21. Сам блок датчиков склеен герметиком из двух капралоновых крышек. Между ними помещена плата, на которой смонтированы датчики. Плата изготовлена из стеклотекстолита толщиной 0.75мм. Во время сборки блока, для защиты датчика влажности от паров, выделяемых герметиком, его окошко заклеивалось каптоновой клейкой лентой (как рекомендуют в документации).
В конструкции блока датчиков учтены недостатки, выявленные при эксплуатации первой версии прибора. Датчик влажности не накрывается сетчатым колпачком SF2, а просто размещается в углублении блока. Это решает проблему намокания колпачка, которое приводит к длительному «залипанию» показаний влажности на максимальной отметке, и, в то же время расположение в углублении чувствительной стороной к корпусу позволяет исключить его повреждения внешними предметами. На блоке датчиков прибора версии 2M предусмотрен дополнительный выступ для защиты датчика влажности от повреждений длинными тонкими предметами. Вопрос защиты датчика давления MS5803 от прямого солнечного света тоже решен на этапе конструирования прибора. Чувствительная часть датчика прикрывается колпачком из черного полистирола, вклеенным в углубление в корпусе. Поскольку датчик чувствителен к засветке и с обратной стороны тоже, на плате на месте его монтажа с противоположной стороны оставлена металлизация.
Доступ воздуха к датчику давления осуществляется через тонкий (0.5мм) канал между корпусом прибора и блоком датчиков. Отметим, что при выборе такой конструкции блока датчиков возникали опасения, что под дождем вода будет затекать в тонкую щель между блоком датчиков и корпусом прибора, и полностью перекрывать канал доступа воздуха непосредственно к датчику давления, что приведет к появлению систематической ошибки в показаниях давления, обусловленной поверхностным натяжением воды. Испытания приборов под дождем и под душем показали, что благодаря несмачиваемости капралона, при толщине канала 0.5мм затекания не происходит. Более тщательные эксперименты, показали, что если блок датчиков установить с наклоном и тем самым уменьшить толщину канала вплоть до касания краем блока датчиков корпуса, возможно затекание воды, попадающей на корпус прибора, и приводит к уменьшению показаний давления примерно на 0.7мм ртутного столба. Если же блок датчиков установлен ровно, затекания воды не происходит.
Передняя крышка и уплотнение на первый взгляд мало поменялась внешне, но при ее конструировании пришлось применить ряд новых технических решений. С одной стороны, уменьшение количества прижимных винтов и увеличение расстояния между ними требует более жесткой прижимной рамы и/или более мягкой уплотняющей прокладки для обеспечения обжатия прокладки по всей ее длине. С другой стороны, из соображений удобства пользования прибором прижимную раму решено делать пластиковой, а это наоборот уменьшит ее жесткость. Возможным вариантом разрешения этого противоречия является использования более мягкой резиновой прокладки. Этот вариант является более разумным, чем пытаться поставить «костыли» в виде введения жестких металлических вставок или упругих элементов в конструкцию прижимной рамы и использовать в качестве уплотнения все тот же жесткий пассик от магнитофона.
После непродолжительного поиска в Интернете было найдено решение, как изготовить резиновые прокладки самостоятельно. Существуют специальные двухкомпонентные силиконы, применяемые для изготовления форм и прокладок. Технология работы с этими силиконами вкратце выглядит следующим образом: два жидких компонента необходимо смешать между собой, после чего в течение нескольких минут залить в форму и ждать пока состав отвердеет. После отвердевания получается очень пластичная и мягкая силиконовая резина, которая легко отделяется от той формы, в которой затвердевала. Существуют целые линейки таких силиконов от разных производителей, они отличаются между собой типом используемого катализатора-отвердителя и физико-механическими и химическими свойствами получаемой резины. Все силиконы имеют относительное удлинение при разрыве равное сотням процентов, относительно мягкие, могут работать при температурах до 200 градусов Цельсия, и относительно химически стойкие. Силиконы с платиновым катализатором химически более стойкие, и имеют пищевой допуск. Одна из типичных областей применения таких силиконов – изготовления форм для отливки из гипса, цемента, мыла, или даже шоколада. Второй типичный вариант применения – изготовление прокладок.
Об изготовлении прокладок из силиконовой резины
В своем городе нашел поставщика, который предлагает целую линейку силиконов с оловянным катализатором Sk-76x, и силикон с платиновым катализатором Sk-790. Для опытов я приобрел два комплекта – силикон с платиновым катализатором Sk-790 и самый мягкий силикон Sk-762, и приступил к экспериментам с отливкой.
В моем случае изготовление формы для отливки проблем не представляло, я просто профрезеровал канавки нужной формы в листе полиметилакрилата. Вначале предполагалось налить в форму силикон и накрыть ее сверху вторым плоским листом органического стекла, выдавив лишний силикон. Однако оказалось, что все не так просто, и я несколько изменил технологию. Основной проблемой при отливке силикона являются пузырьки воздуха. Они образуются как при смешивании исходных компонентов, так и при заливке состава в форму. Одним из способов борьбы с пузырьками, который рекомендует производитель, является помещение приготовленного для заливки силикона в вакуум на несколько минут перед заливкой. В вакууме все пузырьки раздуваются и лопаются, и весь воздух из них выходит. Внешне это отдаленно напоминает сбегающее молоко. Чтобы бороться с пузырьками, возникшими при заливке, можно вауумировать состав после заливки. Однако, я решил не напрягать коллег, у которых есть вакуумная камера, и поискать более простой способ делать отливки без пузырьков. Это оказалось не так сложно, потому что все образующиеся при смешивании и заливке пузырьки имеют достаточно большой размер. Видимо вязкость силикона препятствует образованию мелких пузырьков при захвате воздуха или путем дробления крупных пузырьков. Поэтому пузырьки достаточно хорошо видны глазом, да еще и успевают всплыть на несколько миллиметров вверх до затвердевания силикона. Поэтому технология заливки предполагается следующая: силикон наносится с излишками вдоль канавки в форме, и через несколько минут излишки силикона, вместе со всеми пузырьками снимаются металлической лопаткой. Если пузырек прилип к стенке формы, его можно извлечь с помощью все той же лопатки. Верхняя поверхность заливки становится гладкой благодаря действию сил поверхностного натяжения и гравитации. Главное – равномерно удалить излишки силикона с верхней части формы. А вот если накрывать отливку крышкой – есть большой риск загнать пузырь воздуха в форму.
Таким образом, вопрос изготовления прокладок любой формы оказался решенным, что позволило выбрать любой удобный вариант конструкции передней крышки. Отдельной дилеммой являлся выбор материала прозрачной части крышки. Доступных мне прозрачных материала есть два вида. Один — вязкий и гибкий поликарбонат, который, однако, не очень устойчив к механическим воздействиям и не очень прозрачен, а имеет голубоватый оттенок. Второй – прозрачный но хрупкий полиметилакрилат. Несмотря на то, что в первой версии прибора использовался именно поликарбонат, во второй я решил использовать полиметилакрилат. С одной стороны он более прозрачен, что улучшает читаемость экрана при освещении ярким рассеянным светом, с другой стороны он вносит меньше отклонений в показания датчиков освещенности. Кроме того, он меньше царапается при схожих условиях эксплуатации. Чтобы уменьшить вероятность растрескивания акрилата при лобовом ударе и улучшить внешний вид прибора, прозрачная крышка делается толстой (5мм), а прижимная рама сажается на специальный фрезерованный уступ. Верхняя крышка такой конструкции оказывается достаточно жесткой, и может быть использована как с мягкой прокладкой из силикона Sk-762 так и с более жесткой из Sk-790. В итоге я решил остановить свой выбор на силиконе 790, потому что он с платиновым катализатором и является химически более инертным.
Возможность отливать прокладки любой формы позволила сделать лючок для быстрого доступа к SD, что было реализовано в версии прибора 2M. Окончательно идея сделать лючок оформилась достаточно поздно, когда прибор версии 2 был скомпонован и изготовлен. Создание лючка упиралось в три проблемы – как его герметизировать, где его разместить, и как его фиксировать. Первая проблема решается изготовлением прокладки нужной формы. Вторая проблема тоже решилась, ведь в углублении с нижней стороны есть свободное место, в котором удобно спрятать выступающую наружу крышку. Третью проблему я решил самым простым на мой взгляд способом – лючок фиксируется винтами. С одной стороны без ключа не откроешь, зато случайно тоже не откроется. Да и на серийных герметичных гаджетах крышки тоже часто винтами фиксируются.
Сам лючок находится в нижней части корпуса, и представляет собой сквозное фрезерованное отверстие продолговатой формы, с Т-образным в сечении уступом, об который обжимается прокладка. С наружной стороны прокладку прижимает плоская крышка, которая фиксируется на корпусе двумя винтами M3x5. Толщина нижней стенки корпуса составляет 5мм, глубина уступа 2мм, толщина несжатой прокладки 2.5мм, толщина крышки – 2мм. Отверстия, в которые вкручиваются винты не сквозные, они углублены в корпус на 3.9мм, резьба в них нарезана практически на всю глубину. Нарезка резьбы на доступном мне станке с ЧПУ невозможна, поэтому она выполнялась с помощью трех специально заточенных метчиков и шуруповерта.
Готовый корпус испытывался на герметичность погружением в воду на 12 часов. Для обнаружения возможных протечек использовалась фильтровальная бумага. Корпуса оказались герметичны. Для исключения конденсации воды внутри корпуса при низких температурах, в свободном объеме возле аккумулятора размещается тканевый мешок с силикагелем. Испытания и дальнейшая эксплуатация показали, что конденсат в корпусе не образуется.
О разработке электронной части
Электронная часть второй версии прибора в плане использованных решений очень похожа на первую версию. В качестве основного процессора использован микроконтроллер ATmega1284p, работающий на частоте 8мГц.
Все датчики и часы реального времени DS1337 подключены к нему по шине I2C. Дополнительный сигнал с частотой 1Гц заведен на отдельный вход микроконтроллера процессора. Это позволяет использовать спящие режимы с остановкой основного тактового генератора для лучшего энергосбережения. Зарядка аккумулятора осуществляется с помощью контроллера max1879 с внешним ключом, однако теперь он напрямую подключается к зарядному устройству через гермовводы. Для индикации тока заряда введена токоизмерительная цепь на операционном усилителе TS321, полностью аналогичная примененной в первой версии устройства. Экран и SD карта подключены к контроллеру по одной шине SPI, однако теперь в схеме предусмотрена возможность отключать питание SD карты в то время, когда она не используется. Сенсорные кнопки на фазовых детекторах аналогичны применяемым на первой версии прибора.
Пластины сенсорных кнопок вынесены на боковую панель прибора, и над ними сделана фрезеровка для удобного поиска вслепую. Кнопок по прежнему три, верхняя условно называется «Ввод», средняя «–», а нижняя «+». Практически все детали прибора удалось разместить на плате размером 59x41мм со скругленными краями. Только защитные сапрессоры и катушки L2-L3 монтируются непосредственно на винтах – гермовводах.
Датчики освещенности вынесены на отдельную тонкую плату, расположенную над дисплеем. Размер платы выбран так, что в собранном виде дисплей покрывает практически всю переднюю часть платы.
Для придания прибору более эстетичного вида была сделана декоративная накладка, закрывающая все кроме рабочей части дисплея и датчиков освещенности.
Об интерфейсе прибора и разработке программной части
Прежде всего, стоит отметить, что проект второй версии прибора был перенесен с Arduino на AVR Studio. Это было сделано потому, что никакой реальной пользы от Arduino кроме быстрой прошивки через бутлоадер и UART нет, а вот проблемы с watchdog, энергосбережением и некоторыми мелочами есть. Ситуация усугубляется еще и тем, что штатных платформ ардуино на ATmega1284p не существует, поэтому был выбор – либо допиливать Arduino IDE и бутлоадер, либо переводить проект на AVR Studio. Чтобы сильно не вмешиваться в работу используемой библиотеки SDFATlib, я оставил в проекте часть arduino core, относящуюся к инициализации, работе с таймером и линиями ввода/вывода. Однако изменения в библиотеку SDFATlib внести таки пришлось, и связано это с изменением полярности сигнала SCK при использовании схемы отключения SD карты. Кстати SDFATlib может работать как с библиотекой SPI унаследованной от ардуино так и со своей собственной. В моем проекте SDFATlib сконфигурирована на работу с SPI через свою собственную библиотеку для AVR (кстати это стандартная ее конфигурация, хотя возможна и работа через библиотеки Arduino).
Важным отличием второй версии прибора является энергосбережение. Поскольку включенный цветной экран, потребляет около 3ма в активном режиме, основной способ энергосбережения это перевод экрана в спящий режим через некоторое время бездействия прибора. Включение экрана выполняется такой же «инициирующей» комбинацией кнопок, которой выполнялось включение подсветки в первой версии прибора – удержанием крайних кнопок, при отпущенной средней.
При включенном экране датчики и сенсорные кнопки опрашиваются с периодом главного цикла равным примерно 200мс, с таким же периодом опрашиваются, и обновляются некоторые элементы индикации, такие как состояние кнопок и время. Отображаемая информация с датчиков обновляется с вдвое большим периодом, примерно раз в 400мс. Такой период, на мой взгляд, оптимален, потому как при более коротком периоде обновления меняющиеся цифры неудобно читать, а при более длинном будет заметно запаздывание показаний. Частота опроса всех датчиков специально выбрана вдвое выше частоты обновления индикации, потому как из датчиков давления и влажности считываются два измеряемых параметра по очереди: во время одного опроса температура, во время следующего — давление либо влажность. Все «свободное» время главного цикла процессор находится в режиме ADC noise reduction, измеряя ток заряда аккумулятора. В итоге при включенном экране прибор потребляет примерно 6мА.
При выключенном экране обновления индикации не требуется, поэтому опрос датчиков и кнопок проводится реже, раз в 500мс, а все свободное время процессор проводит в режиме power down. Выход из режима power down происходит по прерыванию pin change interrupt от часов реального времени. При этом усредненные данные со всех датчиков записываются на карту памяти раз в минуту независимо от режима работы экрана. Для снижения потребления энергии вся периферия микроконтроллера включается непосредственно перед использованием через регистры PRR и отключается после использования. Потребляемый прибором ток с выключенным экраном составляет в среднем примерно 250мкА, из которых, около 100мкА приходится на экран в режиме power down, а остальное в основном на микроконтроллер. При этом снижение частоты опроса датчиков практически не дает уменьшения потребляемого тока, потому что значительная часть энергии расходуется во время опроса сенсорных кнопок. Стоит отметить, что тип используемого тактового генератора тоже влияет на энергопотребление. Так, при тактировании микроконтроллера от встроенного RC осцилятора потребляемый ток в режиме выключенного дисплея оказывается несколько меньше чем при использовании внешнего кварца. Очевидно, это связанно с более быстрым стартом и меньшей диссипативной емкостью RC осцилятора. В итоге, поскольку в данной версии прибора нет особых требований по стабильности тактовой частоты микроконтроллера, в окончательной версии прибора в качестве тактового генератора используется встроенный RC осцилятор (хотя на плате есть место под кварц).
Важные изменения коснулись режимов отображения информации, все недостатки, выявленные при использовании первой версии прибора, были учтены и проведены соответствующие изменения в программе. Теперь есть 4 различных режима отображения данных (под режимом отображения понимается вид главного экрана), переключение между которыми осуществляется кнопкой ввод.
Первый экран используется для отображения истории изменения метеоданных в виде графиков, а так же текущих показаний датчиков, даты и времени. На первый взгляд может показаться, что здесь практически ничего не изменилось с первой версии прибора, но на самом деле это не так. Теперь прибор запоминает температуру, влажность, и давление каждые две минуты, и хранит в ОЗУ данные за последние 4 дня — всего 2880 отсчетов. Все эти данные доступны для просмотра, в разных масштабах времени. По умолчанию на экране показываются самые последние данные, однако, удерживая кнопку «–» можно перейти в режим перемотки, и затем кнопками «+» и «–» перемещаться по оси времени назад и вперед. Выход из режима перемотки осуществляется кнопкой «ввод». Переключение масштабов по времени осуществляется кнопкой «+». В конечной версии прошивки предусмотрено 4 масштаба по времени:
- 2мин/пиксель (3.2 часа на весь график).
- 6мин/пиксель (9.6 часа на весь график).
- 10мин/пиксель (16 часов на весь график).
- 30мин/пиксель (48 часов на весь график).
Принципиально возможны и любые другие варианты масштабов, кратные 2 минутам. Теперь при построении графиков возможны различные варианты интерпретации метеоданных. Давление может отображаться непосредственно, а может пересчитываться в барометрическую высоту относительно точки с заданным опорным давлением. В первом случае правая шкала градуирована в миллиметрах ртутного столба, а во втором случае – в метрах. Влажность тоже может отображаться либо непосредственно (голубоватое заполнение) либо пересчитываться в точку росы, тогда помимо кривой температуры отображается кривая точки росы (малиновая). Режим отображения давления и влажности переключается на втором экране.
Второй экран, как и в первой версии, отведен для отображения всей информации о текущем состоянии прибора и датчиков. Здесь показаны такие параметры как напряжение на аккумуляторе, ток заряда, текущие показания основных датчиков, давление нулевой отметки высоты, время, дата. На последней строке показан результат последней попытки записи на SD карту, и текущий вариант интерпретации метеоданных на графиках. На этом экране кнопками «+» и «–» можно переключать вариант интерпретации метеоданных, а нажатием инициирующей последовательности войти в режим настройки часов. Что касается SD карты, отображается результат последнего обращения. Если запись прошла успешно, показывается число байт, записанных во время последнего обращения, если произошла ошибка – отображается «Err», а если карты не было в картоприемнике, отображается «---».
Третий экран предназначен для установки опорного давления барометрического высотомера. В первой строке показывается текущее опорное давление и соответствующая ему барометрическая высота. Ниже показано текущее атмосферное давление. Далее следует таблица истории опорных давлений с указанием даты и времени их установки, последней строкой показаны дата и время. Изменение опорного давления осуществляется кнопками «+» и «–», и оно автоматически добавляется в таблицу истории, если при переключении на следующий экран, установленное текущее опорное давление отлично от последнего исторического значения.
Четвертый экран предназначен для подробного отображения данных предоставляемых RGB датчиком освещенности max44008. Первые пять строк показывают текущую освещенность по каналам в числовом и графическом виде, далее следуют расчетные цветовые координаты и цветовая температура падающего света. Далее следует строка с двумя показаниями в люксах. Левое число относится к текущим показаниям датчика max44008, правое – к max44009. Последние четыре строки полностью совпадают с таковыми с первого экрана.
Работа подсветки несколько изменилась по сравнению с первой версией прибора, потому что поменялся режим работы экрана. Подсветка по-прежнему включается инициирующей комбинацией кнопок (как и экран) причем, если в момент включения экрана освещенность составляет меньше 100люкс, подсветка включается вместе с экраном. В момент включения таймер отключения подсветки, устанавливается на некоторый период, выбранный равным 40 секундам. Любое нажатие на кнопку при включенной подсветке устанавливает значение таймера отключения не ниже другого периода, заданного равным 12 секундам. Перед включением подсветки все показания датчиков освещенности запоминаются, и в течение начального периода горения подсветки равного примерно 7 секундам, на всех экранах отображаются именно запомненные показания датчиков освещенности, при этом фон отображаемого текста меняется с белого на зеленый. Благодаря запоминанию показаний прибор может отображать малые освещенности не искаженные засветкой датчиков собственным экраном. На всех экранах кроме второго нажатие инициирующей комбинации при горящей подсветке приводит к выключению подсветки, на втором экране эта комбинация включает режим настройки часов.
О работе датчиков освещенности, особенно о max44008 стоит поговорить отдельно. Этот датчик был добавлен в версии прибора 2M, с целью расширить диапазон работы люксометра метеостанции в область низких освещенностей. Максимальная чувствительность унаследованного от первой версии прибора датчика max44009 равна 45милилюкс/отсчет, чего вполне хватает для измерения освещенности в сумерках, но недостаточно для измерения освещенности в лунную и безлунную ночь. Конечно, измерение освещенности не есть основная задача моей метеостанции, но раз уж в приборе есть люксометр, а в походах иногда приходится двигаться ночью, хочется иметь инструмент, который покажет, насколько темная сейчас ночь. Поэтому и был выбран самый чувствительный датчик, родственный применяемому в более ранних версиях max44009. Датчик имеет шесть каналов для измерения освещенности в разных диапазонах и один канал измерения температуры. Датчиков температуры в приборе нам и так хватает, поэтому прибор опрашивает только шесть оптических каналов – видимый (Clear), красный (Red), зеленый(Green), синий (Blue), инфракрасный (IR), и компенсационный (IRcomp). Первые пять каналов предназначены для измерения освещенности в различных участках спектра, а шестой предназначен для компенсации инфракрасной засветки видимых каналов. Установка таких параметров как коэффициент усиления (по сути — чувствительность) и время накопления сигнала (тоже влияет на чувствительность и точность измерений) возможна только для всех каналов сразу, причем только извне. Возможность автоматического выбора этих параметров самим датчиком не предусмотрена, и в отличие от max44009, подстраивать чувствительность приходится из программы. Согласно документации на датчик, выдаваемые исходные значения могут быть пересчитаны в мощность светового потока на единицу площади в милливаттах на квадратный сантиметр. Там же приведены и кривые (на самом деле прямые) для пересчета выдаваемых данных в люксы для таких источников как лампа накаливания и люминесцентная лампа. Я провел свою калибровку, сравнивая показания max44009 и нового max44008, используя как источник рассеянный солнечный свет, свет люминесцентной лампы, светодиодного фонаря, и усреднил показания. В результате я получил похожие значения для коэффициентов пересчета. В итоге чувствительность max44008 оказывается примерно 1.4 милилюкс на отсчет в самом чувствительном диапазоне, что на полтора порядка лучше, чем у max44009. Конченое значение показаний люксометра формируется путем линейной сшивки данных с малочувствительного max44009 и чувствительного max44008 в области значений 5-10 люкс. Вычисление цветовых координат и цветовой температуры реализовано согласно документации, просто потому что есть такая возможность.
Отдельного исследования заслуживает вопрос о точности датчиков освещенности и влиянии ИК засветки на достоверность показаний. Корень проблемы заключается в том, что светочувствительные элементы датчиков max4400x (а также множество других фотодиодов и интегральных датчиков, матриц фотоаппаратов и видеокамер, и других устройств) сделаны на основе кремния. По своей физической природе такие светочувствительные элементы регистрируют электромагнитное излучение с длинной волны, короче некоторого предела определяемое шириной запрещенной зоны. Для кремния эта предельная длинна волны составляет приблизительно 1100нм. В то же самое время, человеческий глаз совершенно нечувствителен к электромагнитным излучениям с длинной волны больше 800нм. Поэтому излучения с длинной волны больше 800нм (обычно 800-1400нм) называют ближним инфракрасным. Такого излучения много в спектрах излучения нагретых тел, таких как лампы накаливания, дуговые лампы или солнце. И такое излучение практически отсутствует в спектрах белых светодиодов и люминесцентных ламп. Обычно светочувствительные элементы покрывают сверху специальными фильтрами, которые приближают их кривую чувствительности к требуемой в конкретном применении. Такой фильтр может ослаблять ближнее ИК излучение на несколько порядков, но не отсекает его полностью. При этом остается проблема, связанная с тем, что человеческий глаз не видит в ближнем ИК диапазоне совсем, а прибор, который должен измерять поток видимого света, его хоть немного но регистрирует. Есть несколько путей решения этой проблемы. Так, в цифровых фотоаппаратах или видеокамерах перед матрицей размещают специальный многослойный фильтр, который ослабляет излучение ближнего ИК диапазона примерно на 3 порядка. В датчиках max4400x применяется другое решение – использование дополнительного «компенсационного» канала. В датчике устанавливается несколько фотодиодов с разными фильтрами, с примерно одинаковым пропусканием в ближнем ИК диапазоне, и итоговая освещенность в видимом диапазоне определяется как разность измерений с двух фотодиодов. В нашем случае датчик max44009 выполняет компенсацию автоматически, а датчик max44008 только отдает наружу данные измерительного канала, а компенсацию пользователь должен выполнять сам, вычитая считанные значения одно из другого.
Для проверки адекватности работы ИК компенсации я провел несколько простых экспериментов. Первый – изучение влияния ИК засветки от ИК светодиода с длинной волны излучения 880нм на показания обоих датчиков. Сравнивались показания каналов при включенном и выключенном источнике ИК излучения и неизменной световой обстановке. Эксперимент показал, что лучше всего ИК компенсация работает в канале clear датчика max44008. Когда ИК засветка превосходит видимый свет по интенсивности примерно на порядок, ошибка скомпенсированного канала clear составляет не более 10%, а датчик max44009 при такой засветке выдает сильно заниженные показания (имеет место перекомпенсация). А вот показания цветных каналов RGB датчика при ИК засветке начинают «плыть», причем в разные стороны. Была найдена еще одна странность в работе этого датчика – скачки реальных измеренных значений при переключении коэффициента усиления PGA с 16 на 256 в канале ircomp.
Вторым опытом была проверка правильности измерения цветовой температуры, используя различные источники с известной цветовой температурой. Учитывая, что у меня нет точного колориметра для проверки, я могу заключить, что max44008 показывает более или менее адекватные результаты для таких источников как светодиоды и люминисцентные лампы, однако результаты измерений для ламп накаливания, горящих как с полным накалом так и с недонакалом, абсолютно недостоверные ввиду ИК засветки. Тут стоит упомянуть, что при использовании недонакаленной лампы в качестве источника ИК излучения, перекомпенсация датчика max44009 все так же заметна.
Стоит упомянуть еще об одном недостатке датчика max44008 – о темновом токе. Так, при температуре ниже 15 градусов Цельсия в абсолютной темноте показания датчика max44008 нулевые, однако с ростом температуры сильно растет темновой ток. При температуре 18 градусов он составляет 1 отсчет, 20 градусов уже 2 отсчета, а при 30 градусах уже 7 осчетов. Вполне вероятно, что датчик можно откалибровать для термокомпенсации темнового тока, однако я этим вопросом не занимался, потому что обнаружил заметный рост темнового тока только когда анализировал лог данных из поездки в Карелию, точнее ту его часть, когда прибор был упакован в сумку и гермомешок.
О зарядке аккумулятора. Как видно из схемы, зарядом батареи управляет отдельный контроллер max1879, а процессор и выполняемая на нем программа могут только измерять напряжение на аккумуляторе и ток заряда через соответствующие цепи. Однако ряд мер был принят для того, чтобы прибор мог нормально зарядиться и включиться, даже если аккумулятор сядет полностью. Теперь в проекте используется watchdog, и прошит fuse WDTON, что обеспечивает автоматический старт watchdog при любом сбросе контроллера. При этом порог brownout установлен 1.8В, источником тактовой частоты является встроенный RC осцилятор, и fuse CKDIV8 тоже прошит. Для того, чтобы включенный watchdog не приводил к циклической перезагрузке, с помощью __attribute__((section(".init3"))) в начало инициализации контроллера встроена перенастройка watchdog на период равный четырем секундам. Благодаря установленному CKDIV8 контроллер стартует на частоте 1мГц что возможно при напряжениях от 1.8В. После инициализации main контроллер проверяет напряжение на аккумуляторе. Если оно меньше установленного порога (2.7в), на экран выводится сообщение о разряде аккумулятора и значение напряжения на аккумуляторе, после чего контроллер ждет примерно 500мс, выключает экран и уходит в power down до сброса по watchdog. Если напряжение выше порога, программа переключает тактовую частоту на 8мГц через регистр CLKPR, и инициализируется в нормальном режиме. В качестве дополнительной меры предосторожности запись на microSD карту происходит только если напряжение на аккумуляторе выше некоторого порога, выбранного равным 3.2В. В результате даже при глубоком разряде аккумулятора прибор продолжает работать в нормальном режиме, пока это возможно. Благодаря блокировке записи на карту сбой карты при записи исключен. Если при глубоком разряде напряжение упадет настолько, что процессор зависнет, (опыт показал, что это происходит при напряжении около 2.3в), произойдет сброс по watchdog и прибор уйдет в бесконечный цикл состоящий из перезагрузок и кратковременной индикации «батарея разряжена». При еще более глубоком разряде прибор отключится по BOD. При подключении к зарядке все происходит в обратном порядке. Контроллер max1879 заряжает глубоко разряженный аккумулятор малым током 8ма. Когда напряжение аккумулятора превысит примерно 2в, микроконтроллер сбросится по BOD и покажет мигающее раз в 4 секунды сообщение «батарея разряжена». При этом средний потребляемый ток не превысит 1мА, и зарядка продолжится. Когда напряжение на аккумуляторе достигнет значения в 2.5В, произойдет переход на заряд полным током, а при 2.7В произойдет нормальное включение прибора. Такое решение, на мой взгляд, обеспечивает лучшую работоспособность и индикацию при глубоком разряде аккумулятора и устойчивый выход из глубокого разряда. А вот если установить порог BOD в 2.7В, возможны случайные ложные срабатывания при неблагоприятном стечении обстоятельств (уж слишком близок максимальный порог BOD к минимальному выходному напряжению стабилизатора).
Штатная индикации о низком заряде аккумулятора в виде мигающих букв «LB» имеет порог срабатывания 3.65В, что соответствует примерно 20% остатку заряда аккумулятора, то есть прибор может проработать примерно месяц после включения индикации о необходимости заряда. Поэтому пропустить момент, когда надо заряжать прибор очень сложно, если хоть иногда смотреть на его показания. По этой причине я решил, что более назойливая индикация разряженного аккумулятора не требуется. Светодиод-индикатор заряда, подключенный к max1879, находится на плате с противоположной от экрана стороны, поэтому на зарядке прибор светится зеленым изнутри.
Для зарядки прибора сделана специальная подставка с выемкой под прибор и двумя контактными группами. Подставка оснащена разъемом microUSB для подключения источника тока. Подставка не имеет внутри электронных схем, только провода и самовосстанавливающийся предохранитель. Внимательному читателю выбор микросхемы max1879 в качестве контроллера заряда может показаться несколько несуразным, потому как при выбранной схеме заряда от USB совместимого источника тока логичнее было бы использовать контроллер со встроенным ограничением тока. Однако выбранная схема является надежной, не боится источников с плохой стабилизацией выходного напряжения, и единственным ее недостатком, по сути, является не полная совместимость со стандартом USB в виду отсутствия автоматического регулирования максимально разрешенного тока. Зато такая схема обеспечивает более быстрый заряд при использовании сетевого адаптера.
Опыт эксплуатации прибора
Весной был готов экземпляр версии два, и я взял его в поход по горному Крыму. Летом в поход по Белому морю и Ковдозеру, я взял уже следующий экземпляр версии 2M. Как и прежде, во время движения на байдарке я клал прибор на корпус байдарки перед собой, во время похода по Крыму я носил прибор на шее, во время остановок, стоянок и дневок я вешал прибор на дерево в тени, в продуваемом ветром месте.
Как и первая версия, прибор ощущается как дополнительный орган чувств, а использование его стало более удобным по сравнению с первой версией. При массе примерно 128г (по сравнению с 330г первой версии) прибор практически не ощущается на шее. Внешний вид прибора стал, на мой взгляд, более аккуратным по сравнению с первой версией. Сенсорные кнопки на второй версии более удобные благодаря расположению сбоку и отсутствию рядом металлических частей корпуса, хотя в виду не очень быстрого опроса не у всех получается ими пользоваться с первого раза. Необходимость включать экран, чтобы посмотреть показания прибора не доставляет каких либо неудобств. Экран легко включить даже на ощупь в полной темноте. Примененный на второй версии прибора способ отображения графиков, с разными масштабами и прокруткой назад оказывается очень практичным, позволяя легко анализировать погоду или пройденный профиль за последние дни.
При движении пешком, особенно в горах, очень удобно использовать отображение давления на графике как барометрической высоты. На графике виден профиль пройденного пути. С одной стороны такой график позволяет легко оценить неровность той или иной пройденной тропы, что особенно актуально для горных троп Крыма, идущих по лесу.
С другой стороны по графику легко видеть собственный темп движения вверх и вниз (актуально на крутых подъемах) и оценивать, сколько осталось до конца движения на участках с известным перепадом. Во время водных походов по морю или озерам, когда высота над уровнем моря постоянна, давление удобнее отображать именно как давление. По тенденциям изменения давления можно судить о поведении погоды в течение ближайших двух дней. В горах с отслеживанием тенденций давлений сложнее, их видно на графике только за время стоянки.
При этом, как уже отмечалось в предыдущей статье, собственное движение в горах и даже по холмистой пересеченной местности приводят к значительно более быстрым изменениям давления, чем типичные процессы, протекающие в атмосфере. По этой причине набегающая за день погрешность в графике барометрической высоты как правило невелика, кроме того ее легко оценивать визуально, экстраполируя изменения давления во время остановок и стоянок.
Графики температуры и давления тоже интересны, однако их практический смысл не столь очевиден. Они позволяют определить тенденции изменения погоды, правильнее выбрать одежду, и оценить перспективность попытки просушить свое снаряжение. С измерением температуры, как и первой версии, есть особенности. Так, попадания солнечного света на прибор приводят к заметному его нагреву и ошибке измерения температуры. Кроме того, на температуру воздуха (и прибора) влияет температура окружающих предметов и лучистый нагрев. Так, даже в пасмурный день, прибор размещенный в тени над сушей показывает температуру на несколько градусов ниже, чем если его разместить на корпусе стоящей на воде байдарки. По видимому, это связанно с нагревом байдарки и воздуха над ней рассеянным светом и ИК излучением. Для изучения этого обстоятельства я даже провел следующий эксперимент. Как известно, для ускорения теплообмена можно применить обдув. Самый простой способ организовать обдув термометра в безветренную погоду это просто покрутить его на веревочке вокруг себя. Покрутив прибор над сушей в пасмурный день в тени, я убедился, что обдув не влияет на показания. Значит в тени показания, и так соответствуют температуре воздуха. Ведь если бы температура прибора отличалась от температуры воздуха, благодаря например лучистому нагреву, интенсификация теплообмена привела бы к изменениям условия равновесия и изменениям показаний в меньшую сторону. Если же покрутить прибор над поверхностью воды, показания температуры становятся меньше, чем, если прибор лежит на байдарке, причем эффект наблюдается даже при наличии небольшого ветра. Отсюда можно сделать вывод о существенности нагрева прибора от байдарки, и вероятно, от других освещенных подстилающих поверхностей.
Стоит упомянуть и о возможности отображения точки росы. Температура точки росы является функцией абсолютной влажности воздуха (массы водяного пара в единице объема), и позволяет судить о содержании воды в атмосфере. Если взять некоторый объем воздуха и нагреть его, температура возрастет, относительная влажность упадет, а температура точки росы не изменится. Соответственно, поскольку датчик всегда находится в равновесии с тонким слоем воздуха его окружающим, если нагреть датчик (или весь прибор), отображаемая температура возрастет, отображаемая влажность упадет, а отображаемая температура точки росы не изменится. В реальности все несколько сложнее, потому что погрешность и дискретность измерения температуры и особенно влажности сильно влияют на точность вычисления точки росы. Тем не менее, можно сказать, что расчетная точка росы, а не относительная влажность является информацией о количестве воды в атмосфере, причем на нее не влияют ошибки измерения температуры связанные с нагревом прибора солнцем. Как правило, температура точки росы меняется достаточно медленно, и ее суточные колебания могут составлять всего 2-5 градуса против 10-15 у температуры воздуха. Летом повышение точки росы примерно до 20 градусов является предвестником образования гроз.
Люксометр, оснащенный теперь двумя датчиками позволяет измерять освещенность, и получать достоверные результаты измерений в самых разных условиях: как в солнечный день, так и в безлунную ночь, и даже в очень темных помещениях. Его показания позволяют судить о толщине облачного покрова на небе или о глубине сумерек. Возможность построения графика освещенности в приборе не предусмотрена, потому что показания сильно зависят не только от освещенности, но и от пространственного положения окружающих предметов, и самого прибора, соответственно из такого графика было бы трудно извлечь информацию. Благодаря наличию двух датчиков один из которых RGB c ИК каналом, люксометр предоставляет достаточно много информации о освещенности, цветовой температуре, и уровне ИК излучения. Однако, на мой взгляд, этот функционал более полезен при оценке освещенности в помещениях, чем в походах.
Подводя итог, отметим, что второй прибор получился удобней и практичней первого. Корпус достаточно легок, компактен и приятен на ощупь даже при низких температурах. Время работы на одной зарядке аккумуляторов более чем достаточное для любого похода. Графики можно легко масштабировать и листать в пределах последних четырех дней, чего достаточно для анализа погоды и/или пройденного профиля пути, а функционал прибора, на мой взгляд, достаточен. SD карта может быть легко извлечена для копирования данных.
Если описание опыта эксплуатации первой версии прибора заканчивалось списком недостатков, то здесь я такого списка приводить не буду, потому что явных недостатков, на мой взгляд, у прибора нет. Конечно, идеи по наращиванию функционала есть всегда, но в процессе эксплуатации у меня не возникало чувства нехватки какой-либо функции. Поэтому дальше я рассмотрю возможные варианты развития проекта.
Одним из возможных путей развития прибора является добавлений новых функций к программному обеспечению прибора. Тут можно предложить такие направления:
- Добавить возможность разделять и отображать на графике изменения давления связанное с изменением состояния атмосферы и с изменением высоты на которой находится прибор. Для реализации этой возможности потребуются некоторые модельные предположения, чтобы апроксимировать поведение давления на опорной высоте, и результат будет не очень точным, но добавить такой режим отображения к доступным было бы интересно.
- Сделать функцию обновления ПО прибора через SD карту.
- Добавить настройки частоты записи данных на карту и режимы отображения быстрых изменений метеоданных (особенно актуально для давления) для расширения сферы применения прибора, например в городских условиях.
- Добавить логгирование изменения настроек опорной высоты и показания каналов RGB датчика на SD карту.
Помимо этого есть идеи о развитии набора датчиков на будущее. Например, можно добавить специальный датчик, предназначенный для измерения температуры воды в водоемах и родниках, датчик солености воды (TDS-метр), и добавить возможность хранения соответствующей истории измерений в ПО. Ведь иногда интересно измерить температуру воды в водоеме, а датчики температуры, имеющиеся в приборе, несколько инерционны и не предназначены для погружений, хотя погружение для них и безвредно. Кроме того, к набору датчиков освещенности можно добавить датчик ультрафиолета, чтобы определять, насколько опасно находиться на ярком солнце при текущем состоянии атмосферы.
Конструкция корпуса прибора второй версии тоже имеет некоторый запас для дальнейшего снижения веса и размера. За счет снижения толщины стенок, использования более мягкой прокладки и более тонкой крышки (например, из закаленного стекла), уменьшения размера аккумулятора корпус можно сделать несколько меньше и легче. Отдельно стоит сказать, что мне удалось найти ныне производимый трансфлективный экран размером 2.4” разрешением 320x240 точек. Поэтому третью версию прибора возможно будет сделать полностью из серийно выпускаемых компонентов. Однако при переходе на экран большего разрешения следует увеличить тактовую частоту процессора, для того, чтобы перерисовка не занимала слишком много времени, и увеличить объем ОЗУ, чтобы эффективно использовать возросшее количество пикселей на экране, уменьшив минимальное число градусов, метров и минут на пиксель. По этой причине третья версия прибора, вероятно, будет собрана на микроконтроллере серии AVR Xmega или STM32.
Исходный код программы, кривые для фрезеровки и разводка платы доступны по ссылке.
Автор: Nick0las