
Предыстория
Я разрабатываю Солнечный навигатор. Подробнее про это можно почитать тут. Во время экспериментов я обнаружил, что есть такая проблема как искусственное освещение, которое ночью портит статистику. Для нормальной работы нужен такой датчик света, который покажет только Солнце в прямой видимости. Признаком присутствия естественного света у поверхности Земли может как раз служить факт наличия ультрафиолетовых лучей. Поэтому и пришлось разбираться как подключить датчик УФ к микроконтроллеру.
Теория
Ультрафиолетовое излучение это электромагнитные волны с длинной волны от 100 до 400 нм (7.5e14—3e16 Гц). Источниками ультрафиолетового излучения являются Солнце и всяческие дуговые разряды в газах (сварка, ртутные лампы уличного освещения). LED лампочка на смартфоне тоже излучает ультрафиолет.
Ультрафиолетовое излучение в своем нижнем диапазоне проникает сквозь атмосферу.
Интенсивность ультрафиолетового излучения измеряется в UVI. Один UVI - это много или мало? Скорее мало. Всё, что больше 2х UVI считается опасным для человека.
UV излучение преломляется сильнее, чем красный цвет видимого излучения.
Аппаратная часть
Самое доступное, что есть в магазинах электроники это датчик LTR-390UV-01.
Итак, существует ASIC чип LTR-390UV-01. Это 6-пиновый датчик ультрафиолетового излучения с разрешением до 20 бит.

Вот блок схема модуля. Внутри него есть два фотодиода, ADC, внутренний генератор тактового сигнала, температурная компенсация, интерфейс I2C и цепь прерываний.

Распиновка чипа LTR-390UV-01
pin num | Name | Dir | Top Side | Active | Pull | Max V | type |
1 | VDD | in | Left | Hi | Air | 4.0 | -- |
2 | NC | -- | Left | -- | Air | -- | -- |
3 | GND | in | Left | Low | Air | 0 | -- |
4 | SCL | in | right | height | Up | 3.3 | open drain |
5 | INT | out | right | Low | Up | 3.3 | open drain |
6 | SDA | io | right | height | Up | 3.3 | open drain |
Габаритные размеры чипа LTR-390UV-01 впечатляют всего 4мм^2

Вот список основных характеристик этого чипа
Значение | |||
Характeристика | min | max | Единица измерения |
Диапазон измеряемых волн | 280 | 430 | nm |
Максимальная мощность питания ASIC(а) | 0.17 | 0.4 | W |
VDD max | 1.7 | 4 | V |
Max input current | 100 | mA | |
Температeра | -40 | 85 | Deg |
Разрешение | 13 | 20 | bit |
I2C clock | 100 | 400 | kHz |
Отладочная плата
Для этого датчика есть отладочная плата LTR390-UV-01 от компании WaveShare Electronics. Её можно купить как в ЧипДип так и на Aliexpress.

Это распиновка модуля
pin# | Pin Name | Dir | Description |
1 | VCC | out | Power supply |
2 | GND | in | Ground |
3 | SDA | io | data wire |
4 | SCL | in | clock wire |
5 | INT | Out | Interrupt |
Программная часть
Взаимодействие с чипом происходит по интерфейсу I2C. Вот шпаргалка по I2C.

Чип откликается на базовый адрес 0x53=0b101_0011
Bit | |||||||||
Base Address (0x53) | R/W | Value | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
Read | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0xA7 |
Write | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0xA6 |
Сканирование показывает, что в самом деле отзываются I2C адреса 0xA7 и 0xA6.

У чипа LTR-390UV-01 19 регистров по 8им бит каждый. Если отбросить все зарезервированные биты, то получится 57 бит чистых конфигов. Каждый бит чего-то да значит.

Для I2C чип виден как внешняя память. То есть в I2C пакете чтения 2 старт сигнала и один стоп сигнал.

Какие есть конфиги?
Все 10 параметров, которые можно конфигурировать.

На GitHub я обнаружил драйвера для чипа LTR-390UV-01. Их можно найти по ключевому слову LTR390. А вот в ядре Linux по ключевым словам LTR-390UV-01,LTR390 ничего не находится. Ещё есть драйвер от производителя платы. Его можно скачать по ссылке.
В Zephyr исходниках тоже нет поддержки ASIC LRT390. Пришлось скомпоновать свой драйвер на основе дюжины примеров из GitHub
Отладка
Вот такой я собрал прототип, чтобы проверить датчик освещения. На основании из оргстекла закрепил плату Black-Pill Super модуль LTR-390UV-01, дисплей SSD1306 и RTC DS3231

Для отладки I2C мне понадобился логический анализатор. Чтение регистра результата измерений UV датчика

Но как проверить датчик UV? Самое простое это оставить его на день на балконе и посмотреть что он намеряет. Вот такой получился график зависимости освещения от времени для Москвы на 4 февраля 2024 года.

Тут отчетливо видно, что 4 февраля ультрафиолетовое поле действовало с 5:02 до 14:32 (UTC+0). То есть продолжительность облучения составила 9 часов, 30 минут. А ночью UV полностью отсутствует. Вполне похоже на правду.
Достоинства UV датчика в исполнении ASIC LTR390
1++ Есть регистр с ID чипа (Addr:0x06). Можно делать тест на подключения чипа. Эх, вот бы все вендоры ASIC чипов работали на таком уровне...

2++ Широкий диапазон измеряемых освещенностей. Шире чем у ASIC BH1750. Датчик LTR390 способен измерять весь диапазон для естественных природных освещений на Земле.
3++ Цифровой интерфейс I2C для выдачи данных.
Недостатки UV датчика LTR390
1--Есть не задокументированные адреса I2C регистров, которые при чтении показывают какие-то загадочные ненулевые значения. Всё это выглядит как Back-door для Vendor-Locking(а).
+-----+------+------+-------------+
| No | Addr |ValueH| ValueBin |
+-----+------+------+-------------+
| 0 | 0x02 | 0x08 | 0b0000_1000 |
| 1 | 0x03 | 0x45 | 0b0100_0101 |
| 2 | 0x16 | 0x02 | 0b0000_0010 |
| 3 | 0x1c | 0x07 | 0b0000_0111 |
+-----+------+------+-------------+
Идеи проектов на основе датчика освещённости
Тестер присутствия UV. Предупреждение об опасных уровнях UV излучения (всё то, что больше 2х UVI). Можно предложить любителям пляжного отдыха приборчик, который будет интегрировать дозу UV излучения и пищать при превышении определённого уровня.
Если установить УФ фонарик или лазерный луч, то можно сделать тестер материалов на проникновение ультрафиолета сквозь различные образны материалов.
Датчик присутствия Солнца. Как следствие, датчик продолжительности светового дня, как следствие датчик широты и долготы наблюдений. Глобальная навигация по фазам естественного освещения Cолнца.
При помощи датчиков освещения можно определять чистоту и прозрачность газа. Можно просвечивать газ лазерным лучом сравнивая яркость на чистом воздухе и на грязном делать выводы. Это особенно полезно для чистых комнат микроэлектронных производств. Можно сканировать объём по разным направлениям. Отслеживать перемещение пылевых облаков.
Можно измерять уровень жидкости в емкостях тоже измеряя лазером яркость луча прошедшего через объём воды.
Если пропускать УФ лазер через две поляризационные пластинки, то получится датчик угла. Датчик угла на основе эффекта Малюса.
Будильник который будет срабатывать в момент рассвета
Автоматическое уменьшение подсветки экранов.
Бесконтактные кнопки. Заслонил датчик и сработало действие.
Головки самонаведения ГСНы на источник света, например для солнечных батарей
Можно передавать бинарные данные модулированным светом LiFi.
Детектор тени для гномона. То есть можно автоматически считывать показания с солнечных часов.
Итоги
LTR390 - это доступный вариант датчика UV излучения. Не самый плохой вариант на рынке. Относительно широкий диапазон измерений освещённости.
Надеюсь что этот текст сподвигнет кого-нибудь изобрести полезный электронные прибор с датчиком UV излучения внутри.
Словарь
Для работы с датчиками освещённости надо понимать, что значат эти аббревиатуры
Акроним | Расшифровка |
ADC | Analog-to-digital converter |
I2C | Inter-Integrated Circuit |
UV | UltraViolet |
ASIC | application-specific integrated circuit |
ALS | ambient light sensor |
UVI | uvi ultraviolet index (Ультрафиолетовый индекс) |
Links