цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Измеряем интенсивность УФ-света с помощью Arduino и датчика ML8511

Измеряем интенсивность УФ-света с помощью Arduino и датчика ML8511

Автор: Mike(admin) от 18-12-2019, 03:55

В этом проекте мы свяжем УФ-датчик ML8511 с Arduino для измерения интенсивности ультрафиолетового света в мВт/см2. Ультрафиолетовое излучение или УФ-излучение происходит в диапазоне электромагнитных волн от 10 до 400 нм. Таким образом, чтобы получить эффективный выходной сигнал в соответствии с ультрафиолетовым излучением, следует использовать специальный датчик, такой как ML8511 от компании Lapis Semiconductor. Ультрафиолетовый датчик ML8511 лучше обнаруживает свет с длиной волны 280–390 нм, эта длина волны классифицируется как часть спектра лучей, излучающих ультрафиолетовое излучение.


Измеряем интенсивность УФ-света с помощью Arduino и датчика ML8511

Датчик ML8511 очень прост в использовании. Он выводит аналоговое напряжение, которое линейно связано с измеренной интенсивностью УФ (мВт/см2). Если ваш микроконтроллер может выполнять преобразование аналогового напряжения, вы можете определить уровень ультрафиолета. Он имеет низкий ток питания 300 мкА и низкий ток в режиме ожидания 0,1 А. Поставляется в малом и тонком 12-контактном керамическом корпусе QFN для поверхностного монтажа (4,0 x 3,7 мм x 0,73 мм).


Датчик ML8511

УФ-датчик MP8511 работает путем вывода аналогового сигнала в зависимости от количества обнаруженного ультрафиолетового излучения. Этот датчик может быть очень полезен при создании устройств, которые предупреждают пользователя о солнечном ожоге или обнаруживают УФ-индекс, связанный с погодными условиями.


УФ-датчик ML8511 имеет фотодиод, чувствительный к УФ-А и УФ-В. Также он имеет встроенный операционный усилитель, который преобразует фототок в выходное напряжение в зависимости от интенсивности ультрафиолетового излучения.


Датчик ML8511

Выходной сигнал подается всегда в виде аналогового напряжения. Через выходное напряжение легко взаимодействовать с внешними микроконтроллерами и АЦП. На следующем изображении показаны УФ-характеристики.


УФ-характеристики

Характеристики определяют зависимость выходного напряжения датчика относительно интенсивности ультрафиолетового излучения (мВт/см2) при постоянной подаче VDD. Кривые разного цвета представляют работу датчика в разных температурных диапазонах.


Принципиальная схема подключения УФ-датчика ML8511 к Arduino и ЖК-дисплею приведена ниже. Выводы RS, EN, D4, D5, D6, D7 дисплея 16 × 2 LCD подключены к контактам Arduino 12, 11, 5, 4, 3, 2. ЖК-дисплей питается от 5 В. Он имеет потенциометр 10K, прикрепленный к выводу 3 ЖК-дисплея для регулировки контрастности.


Измеряем интенсивность УФ-света с помощью Arduino и датчика ML8511. Схема подключения

Ультрафиолетовый датчик имеет 5 контактов Vin, 3V3, GND, OUT, EN. Некоторые модули не имеют вывода Vin, который тоже не используется. Контакт EN и контакт 3V3 подключен к контакту 3,3 В Arduino. 3V3 вывод подключен к аналоговым выводам A1, который используется в качестве опорного напряжения. Выходной вывод подключен к A0 Arduino и GND к GND.


Исходный код программы для взаимодействия ML8511 и Arduino приведен далее. Скопируйте этот исходный код и загрузите его на плату Arduino.



#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Определение аппаратных выводов
int UVOUT = A0; // Выход с датчика
int REF_3V3 = A1; // 3,3 В на плате Arduino
void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(UVOUT, INPUT);
  pinMode(REF_3V3, INPUT);
  Serial.println("ML8511 example");
}
void loop()
{
int uvLevel = averageAnalogRead(UVOUT);
int refLevel = averageAnalogRead(REF_3V3);
// Используйте контакт питания 3,3 В в качестве опорного, чтобы получить очень точное выходное значение от датчика
float outputVoltage = 3.3 / refLevel * uvLevel;
float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); // Преобразовать напряжение в уровень интенсивности УФ
  Serial.print("output: ");
  Serial.print(refLevel);
  Serial.print("ML8511 output: ");
  Serial.print(uvLevel);
  Serial.print(" / ML8511 voltage: ");
  Serial.print(outputVoltage);
  Serial.print(" / UV Intensity (mW/cm^2): ");
  Serial.print(uvIntensity);
  lcd.clear();
  lcd.print("UV Ray Intensity");
  lcd.setCursor(0, 1);
  lcd.print(uvIntensity);
  lcd.print(" mW/cm^2");
  Serial.println();
delay(200);
}
// Принимает среднее значение показаний на данном выводе
// Возвращает среднее
int averageAnalogRead(int pinToRead)
{
  byte numberOfReadings = 8;
unsigned int runningValue = 0; 
for(int x = 0 ; x < numberOfReadings ; x++)
    runningValue += analogRead(pinToRead);
  runningValue /= numberOfReadings;
return(runningValue);
}
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}



© digitrode.ru


Теги: Arduino, датчик УФ-излучения



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий