Датчик ультрафиолета GYML8511: устройство и работа с Arduino

Датчик ультрафиолета GYML8511: устройство и работа с Arduino

Аналоговый модуль на чипе ML8511 измеряет интенсивность излучения UV-A и UV-B. Принцип действия, выводы, построение графика и простой УФ-метр.

Немного об ультрафиолете

Ультрафиолетовые лучи относятся к невидимой человеку части солнечного спектра. Их условно делят на дальние и ближние. Дальние называют вакуумными: они целиком поглощаются верхними слоями атмосферы, а на Земле их получают только в вакуумных камерах. Ближний ультрафиолет разбит на три поддиапазона:

  • длинные волны — от 400 до 315 нм;
  • средние — от 315 до 280 нм;
  • короткие — от 280 до 100 нм.

Помимо Солнца существуют искусственные источники: ртутно-кварцевые лампы высокого давления (100–400 нм), люминесцентные витальные лампы (280–380 нм), а также озонные и безозонные бактерицидные лампы, у которых 80 % излучения приходится на длину волны 185 нм.

Как устроен модуль

GYML8511 — аналоговый датчик, определяющий интенсивность излучения в диапазонах UV-A (400–315 нм) и UV-B (315–280 нм). Его основа — чип ML8511, в который входят чувствительный к ультрафиолету диод и операционный усилитель. На плате дополнительно установлен стабилизатор LM6206 на 3,3 В, поэтому модуль можно питать от 5 В через вход VIN.

Модуль датчика ультрафиолетового излучения GYML8511

Работа чипа основана на фотовольтаическом эффекте. Поверхность диода поглощает часть излучения UV-A и UV-B, электроны получают энергию фотонов и становятся свободными, в результате возникает ток. Операционный усилитель усиливает его, и напряжение на выходе OUT оказывается прямо пропорциональным интенсивности ультрафиолета.

Питание через VIN5 В (допустимо от +4 до +6 В)
Питание через 3V33,3 В (от +2,7 до +3,6 В)
Потребляемый токдо 2 мА, номинально 1 мА
Диапазон излучения400…280 нм (UV-A и UV-B)
Время стабилизации после включениядо 2 мс
Максимальный ток выхода OUTдо 5 мА
Рабочая температура-20…+70 °C
Температура хранения-30…+85 °C
Габариты12 x 13,5 мм
Вес2 г

Выводы и схема включения

  • OUT — аналоговый выход, напряжение пропорционально интенсивности УФ;
  • VIN — питание 5 В;
  • GND — общий провод;
  • 3V3 — питание 3,3 В;
  • EN — вход разрешения, подтянут внутренним сопротивлением модуля; при логическом нуле датчик перестаёт регистрировать излучение.

Выход OUT соединяют с аналоговым входом Arduino, в базовой схеме это A1. Вход EN можно оставить свободным. Питание подаётся на один из двух выводов: 5 В на VIN или 3,3 В на 3V3.

Подключение датчика GYML8511 к плате Arduino

Показания на графике

Тестовый скетч каждые полсекунды читает аналоговый вход и отправляет число в порт командой Serial.println(analogRead(pinGYML8511)). Начиная с версии 1.6.6 в Arduino IDE есть встроенное средство построения графиков: оно открывается через меню «Инструменты» — «Плоттер по последовательному соединению» и рисует кривую по значениям, приходящим построчно.

Запуск плоттера по последовательному соединению в Arduino IDE
График показаний датчика: фон и освещение лампой

На таком графике хорошо видна разница между фоновым уровнем и показаниями под лампой.

Пример: УФ-метр с дисплеем и сигналом

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

  • плата Arduino;
  • макетная плата;
  • датчик GYML8511;
  • дисплей Nokia 5110;
  • пьезодинамик;
  • соединительные провода.

Дисплей обслуживают библиотеки SPI, Adafruit_GFX и Adafruit_PCD8544; объект в листинге создаётся как Adafruit_PCD8544(3, 4, 5, 6, 7). В этом скетче датчик подключён к входу A0, пьезоизлучатель — к выводу 9, а пороговое значение задано переменной limitUV, равной 220. При старте устанавливается контраст 60 и на четыре секунды выводится заставка.

Далее раз в пять секунд экран очищается и на него выводится подпись «UV level» с текущим показанием АЦП. Если оно превышает порог, функция tone(pinPiezo, 523, 2000) включает звук частотой 523 Гц на две секунды.

При неверных показаниях

Если датчик выдаёт явно неправильные значения, проверяют соединения модуля с платой Arduino.

← Все статьи