1 May

Измеряем индекс ультрафиолетового излучения UVA UVB

Programming microcontrollersGadgetsDIYElectronics for beginners
Все мы любим солнце и конечно же знаем о вреде ультрафиолетового излучения для человеческой кожи. Очевидно, что на пляже нельзя долго загорать. Но вот совсем не очевидно, можно ли гулять под солнцем в футболке, а плавать, ходить по горам? После очередного «обгорания» от солнца в горах на Красной поляне встал вопрос — как бы измерить мгновенный индекс ультрафиолетового излучения и знать, когда пора укрыться в тени. В результате родился этот небольшой прибор — датчик уф излучения с рядом дополнительных функций.



Что должен уметь прибор


Основная функция — измерение индекса УФ излучения. Дополнительно захотелось измерять температуру воздуха и температуру воды, с точностью хотя бы 0.5 градуса (особенно, когда искупавшись в бассейне с ледяной водой посмотрели на китайский термометр, который там плавал — 28 градусов, и рядом не было). Ну и конечно же питание от аккумулятора.

Основные компоненты: VEML6075 + MCP3421 + STM8


Для измерения индекса УФ излучения существует не так много датчиков. Обычно используется датчик УФ изучения — фототранзистор. Но его оказалось довольно сложно откалибровать. Выбор пал на цифровой датчик — VEML6075. Он оказался очень хорош. Единственный минус — сложно купить, поставку ждать пришлось около месяца по официальным каналам — «Пятый элемент» (китай рассматривать не стал — в разовом приборе гадать о качестве неприятно). Преимущества датчика:

  • лёгкая калибровка в домашних условиях
  • косинусовый отклик поверхности датчика — учет падения лучей
  • точные показания индекса в двух диапазонах — UVA UVB
  • малое потребление
  • общение по I2C — полностью цифровой датчик


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


Второй вопрос — измерение температуры воды, решил с помощью термопары. Для точного снятия данных с этого датчика использовать очень точный ADC, со встроенным источником референсного напряжения — MCP3421. 18-бит разрешение + 8 кратное усиление сигнала для термопары K-типа дает 0.01 градус разрешение температуры — более чем достаточно. С учетом необходимости измерения температуры соединения точность получилась в районе 0.2 градуса. Проверял путём измерения кипящей воды и льда.

В качестве микроконтроллера — самый простой и дешевый вариант — STM8S003F3. На борту все есть — таймеры, I2C — нужное для датчика и т.д.

Так как прибор должен работать на солнце — то в качестве индикатора — LCD экранчик. Хотелось компактности — выбрал этот:


С управлением пришлось помучаться. Мультиплексирование выводов LCD на обычном микроконтроллере ещё та задача, но в общем все получилось отлично.

Корпус выбрал маленький, компактный от компании Sanhe модель «20-31». Внешний размер — 35х45х18 мм. Все влезло — плата, индикатор и аккумулятор.

Схему и плату приводить не буду, все есть на github

Калибровка датчика УФ


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

Чтобы корректно рассчитать индекс УФ излучения по показаниям датчика необходимо использовать несколько констант. Как их вычислить не имея специального оборудования? Вот полная формула вычисления индекса:

Константы k1 и k2 без оборудования вычислить не получится. Но они необходимы для максимально точного расчёта, так что их можно принять за единицу. Константы чувствительности датчика можно взять из таблицы:

Нам нужны константы из первой строки, так как датчик у нас не закрыт тефлоном (оптический тефлон не удалось купить, поэтому датчик в итоге открыт). UVAresp и UVBresp. А вот константы a, b, c, d необходимо вычислить. Я делал это с помощью отладчика. Необходимо получить данные uva, uvb, uvcomp1, uvcomp2, и в Excel рассчитать константы. Показывать их на дисплее неудобно — слишком мало разрядов. Вот тут и нужен отладчик. Поставить точку останова после получения данных и посмотреть вычисленные значения. Также можно использовать возможность отключения ST-link от STM8 в процессе отладки и обратного подключения. При этом сеанс отладки не прерывается! Ещё один вариант — использовать STM8 STUDIO. Это специальная программа позволяет получить переменные в любой момент времени.

Чтобы вычислить константы без спец оборудования, воспользуемся вот чем (это описано в application note к датчику). Солнечный свет в своём спектре имеет УФ излучение, ИК излучение и видимое излучение. Чтобы рассчитать интенсивность УФ излучения, необходимо вычесть лишние данные про ИК излучение и видимое излучение. Для этого служат данные uvcomp1 (отвечает за видимое излучение) и uvcomp2 (отвечает за ИК излучение).

Чтобы рассчитать константы в используемой формуле необходимы два искусственных источника света:
• обычная лампа накаливания — она излучает в ИК спектре и видимом излучении, нет УФ излучения
• светодиодная лампа — она излучает только в видимом излучении, нет УФ и ИК излучения
Начинаем со светодиодной лампы. Так как УФ излучение отсутствует, то соответствующий индекс будет равен нулю.

У светодиодной лампы нет ИК излучения, поэтому UVcomp2 будет равен 0. И в этом случае можно найти коэффициенты

Получив эти коэффициенты не составляет труда найти коэффициенты b и d, при использовании обычной лампы, когда UVcomp2 не равно нулю.


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

При загаре, для точного измерения излучения, датчик необходимо держать параллельно поверхности тела. Для получения максимального текущего индекса датчик нужно направлять на солнце.

Наилучшие результаты датчик стал показывать с максимальным временем усреднения данных (датчик имеет возможность установить этот параметр — время в течении которого он сам усредняет показатели) — 800мс.

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

Опыт использования


Скажу сразу про потребление — оно крайне небольшое, составляет около 2мА при работе всех датчиков и микроконтроллера. При нечастом использовании, аккумулятора хватает где то на 3 месяца на одном заряде.

Точность показаний считаю очень высокой. Проверял в нескольких регионах (Москва, Сочи, Крым) — показания совпадают в полдень с погодными сайтами. Поэтому считаю, что в облачную погоду ему тоже можно доверять.

При изготовлении датчика пришлось изучить что такое УФ излучение, чем оно все таки вредно. Какие виды его бывают. Как оно влияет на кожу. Как влияет положение солнца на горизонте и вредно ли УФ излучение для глаз.

Лично на себе проверил все статьи про «обгорание». Датчик показал себя отлично. Теперь, увидев на датчике в горах индекс 13, одеваю плотную рубашку и закрываю все части тела. А вечером, когда индекс 5 — спокойно хожу и нежусь под теплыми лучами солнца.

Узнал то, что в солнечный день, можно неплохо обгореть и в Москве — индекс доходит до 9 в полдень. А также, что при плавании время нахождения на солнце увеличивается в два раза.
Для меня этот прибор оказался очень полезным, пользуюсь до сих пор, показаниям доверяет вся семья.

На текущий момент добавил туда ещё очень точный датчик влажности — HTS221. Он тоже работает по I2C, так что просто сделал миниплатку и вклеил внутрь. Припаял проводом лакированным 0.15мм. Так что, сейчас он ещё показывает и влажность, гораздо точнее чем китайские измерители, продаваемые на рынке.

Напишу немного про большой жирный минус — по рекомендациям разработчика датчик лучше закрыть оптическим тефлоном для изолирования датчика от пыли и грязи. Найти в прождаже такой тефлон не вышло, поэтому датчик пылится и иногда я его протираю его ватной палочкой.
Tags:stm8микроконтроллерытермопараlcdуф-излучениеdiyпечатная плата
Hubs: Programming microcontrollers Gadgets DIY Electronics for beginners
+7
3.3k 32
Comments 17
Popular right now
Web Developer (Kotlin Sites)
from 150,000 ₽JetBrainsСанкт-Петербург
Web Developer (Kotlin Sites)
from 150,000 ₽JetBrainsМосква
Middle+ / Senior Node.js developer
from 3,500 to 5,000 $CodemotionRemote job
Java API Developer
from 3,300 to 5,000 $AWWCOR Inc.Remote job
Software Developer for Remote Collaborative Tool (‘Code With Me’)
from 200,000 ₽JetBrainsСанкт-Петербург