UltraV: Переносной УФ-индексометр для безопасного загарения
Компоненты и материалы
| Arduino Nano R3 | 1 |
| Датчик УФ ML8511 (Texas Instruments / Lapis Semiconductors) | 1 |
| OLED-дисплей 128×64 (SSD1306) | 1 |
| DC-DC преобразователь MT3608 (step-up) | 1 |
| Батарея CR2 (3 В, 800 мАч) + держатель | 1 |
| Корпус (3D-печать), переключатель | 1 |
О проекте
Автор, имеющий дерматологические проблемы, создал портативный прибор для измерения УФ-индекса. Устройство компактно, работает от батареи CR2, показывает мгновенное и максимальное значение УФ-индекса, а также категорию риска по ВОЗ (LOW, MODERATE, HIGH, VERY HIGH, EXTREME).
Шаг 1: Детали
Список компонентов см. выше.
Шаг 2: Датчик ML8511
Датчик чувствителен к УФ-А и УФ-Б, имеет встроенный усилитель, выдаёт аналоговое напряжение. Ток потребления 300 мкА, в режиме ожидания 0.1 мкА. Корпус QFN 12-pin. Автор не нашёл УФ-прозрачного материала для защиты датчика (стекло, пластик затухают УФ), поэтому датчик оставлен открытым.
Шаг 3: Работа
Включите прибор, направьте датчик на солнце на несколько секунд. На дислее: слева — мгновенное значение (обновление каждые 200 мс), справа — максимум за сессию (используйте его). Внизу слева — категория ВОЗ.
Шаг 4: Батарея и измерение напряжения
CR2 (3 В, 800 мАч) хватило на весь лето. Схема потребляет ~100 мА во время измерения (несколько секунд). DC-DC MT3608 поднимает напряжение до 9 В на пин Vin. Напряжение батареи измеряется через А2 с калибровкой: измерьте мультиметром 5 В на пине 5V Arduino (это опорное для АЦП), подставьте значение в формулу:
voltage = ((long)sum / (long)NUM_SAMPLES * 5023) / 1024.0;
Измерение усредняется по 10 сэмплам.
Шаг 5: Схема подключения
Схема показана на фото. Датчик ML8511 — к A0, опорное 3.3 В — к A1, батарея — к A2. OLED по I2C (A4/A5).
Шаг 6: Программное обеспечение
Для OLED используется библиотека U8g2lib. Для точного АЦП используется опорное 3.3 В (точность 1%): читаем A1 (3.3 В) и A0 (датчик), пересчитываем реальное напряжение датчика:
int uvLevel = averageAnalogRead(UVOUT);
int refLevel = averageAnalogRead(REF_3V3);
float outputVoltage = 3.3 / refLevel * uvLevel;
float uvIntensity = mapfloat(outputVoltage, 0.99, 2.6, 0.0, 15.0);
Полный код доступен по ссылке (UltraV_OLED.ino.zip).
Шаг 7: Корпус
Спроектирован в CAD, батарея CR2 размещена снаружи на держателе. STL-файл доступен (UltraV.stl.zip).
Шаг 8: Будущие улучшения
- Калибровка по УФ-спектрометру (дорого).
- Синхронная запись ML8511 и разработка алгоритма пересчёта в реальный УФ-индекс.
Шаг 9: Галерея
Фотографии собранного устройства.
Шаг 10: Благодарности
- Carlos Orts, Arduino Forum, Starting Electronics, U8g2lib, WHO UV Index.
Код (основные фрагменты)
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);
#define UVOUT A0
#define REF_3V3 A1
#define VBATT A2
float maxUV = 0;
void setup() {
pinMode(UVOUT, INPUT);
pinMode(REF_3V3, INPUT);
pinMode(VBATT, INPUT);
u8g2.begin();
}
void loop() {
u8g2.firstPage();
do {
int uvLevel = averageAnalogRead(UVOUT);
int refLevel = averageAnalogRead(REF_3V3);
float outputVoltage = 3.3 / refLevel * uvLevel;
float uvIntensity = mapfloat(outputVoltage, 0.99, 2.6, 0.0, 15.0);
readBattery();
if (maxUV < uvIntensity) maxUV = uvIntensity;
u8g2.drawFrame(0, 17, 128, 38);
u8g2.setFont(u8g2_font_logisoso18_tf);
u8g2.setCursor(10, 40); u8g2.print(uvIntensity); // INSTANT
u8g2.setCursor(70, 40); u8g2.print(maxUV); // MAXIMUM
u8g2.setFont(u8g2_font_u8glib_4_tf);
u8g2.setCursor(10, 52); u8g2.print("INSTANT");
u8g2.setCursor(75, 52); u8g2.print("MAXIMUM");
showUVCategory();
u8g2.setCursor(88, 64); u8g2.print("F.Marzocca");
} while (u8g2.nextPage());
delay(200);
}
// ... функции averageAnalogRead, mapfloat, readBattery, showUVCategory см. в полном коде
Производственный процесс
- Лаборатория делителя напряжения: дизайн, измерение и верификация закона Кирхгофа о напряжении
- Сборка картофельной батареи: Пошаговое руководство по DIY электрохимическому питанию
- Понимание конструкции измерительных приборов: от классических гальванометров к современным цифровым диспле…
- Мультиметры: от аналоговых к цифровым — полное руководство
- Основы конструкции батарей: элементы, внутреннее сопротивление и соединения
- Портативные точечные сварочные аппараты: определение, принцип работы и ключевые преимущества
- Выбор между стационарными и портативными КИМ: что нужно знать
- Автомобильный аккумулятор: устройство, типы, характеристики, обслуживание
- Как проверить генератор (альтернатор): экспертные методы для надежного результата
- 7 явных признаков неисправности генератора